ド素人のための自家製Deepdream構築法（探索中）

# この記事
Mac向けの「とりあえず自分でDeepdreamをやる」ための解説です。
**「『ターミナル』でcdとlsくらいは自在に使える」
「『Python』は使ったことないけど知っている」**
くらいのレベル向けです。
ターミナルをまったく使ったことない人は厳しいかもしれません。

**そしてわたしも全く詳しくありません。caffeが何か知りません。**でしたが、やってる途中に画像のディープラーニングに適したパッケージだということは知りました。読み込むパッケージの意味とか何も分かっていないです。ご容赦ください。

「Saqooshaさんのガイドをもとにド素人がやってみた（けどうまくいってない）」くらいに見てもらえると幸いです。
http://qiita.com/Saqoosha/items/d1a10accdef197a9de68



# Deepdreamって何

「Googleがつくった、コンピュータが見る夢」とか言われて流行ってますが、別に夢とかではないです。

具体的には、

1. 画像をGoogleの画像認識プログラムに入力する
2. プログラムが画像のあちこちを「建物」とか「犬」とかとして認識する
3. **プログラムの認識の通りに、元画像の一部を置き換える**
4. プログラムが認識したように置き換わった画像が出力される
5. なんか悪夢っぽく見える

ということのようです。コンピュータが寝るわけじゃないし夢を見るわけでもないですが、そのほうがWebメディアは取り上げやすくていいですね。
参考：http://nlab.itmedia.co.jp/nl/articles/1507/07/news160.html


# 準備
**空き容量がたぶん3GBくらい要ります。そしてDLとインストールにだいぶ時間かかります。**

Saqooshaさんの投稿を参考に。
http://qiita.com/Saqoosha/items/d1a10accdef197a9de68

##①Homebrewをダウンロード（入ってなかったら）
```
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
とターミナルにかちこみましょう。XcodeとCommand Line Toolが必要っぽい。
参考：http://brew.sh/index_ja.html

##②CUDAをダウンロード
https://developer.nvidia.com/cuda-downloads
やや時間かかります。

##③AnacondaのPythonをダウンロード##
http://continuum.io/downloads
DMGはだめっぽいのでPKGをダウンロード。さらに時間かかります。
homebrewのpythonは外したほうがいいみたいなので、インストールした後にこのコマンドをいれておきましょう。

```
brew uninstall python
```


##④その他必要なファイルをダウンロード##
ターミナルを使います。

```
brew install --fresh -vd snappy leveldb gflags glog szip lmdb
brew tap homebrew/science
# Anaconda の Python なら hdf5 はインストール済みっぽい
brew install hdf5 opencv
brew install --build-from-source --with-python --fresh -vd protobuf
```

ルートフォルダで実行しましょう


つづいてboostとboost python。

```
cd $(brew --prefix)
cd Library/Formula
curl -O https://raw.githubusercontent.com/Homebrew/homebrew/6fd6a9b6b2f56139a44dd689d30b7168ac13effb/Library/Formula/boost.rb
curl -O https://raw.githubusercontent.com/Homebrew/homebrew/3141234b3473717e87f3958d4916fe0ada0baba9/Library/Formula/boost-python.rb
brew install boost boost-python
```



Saqooshaさんのは1.57.0を入れるために1.58.0のboostとboost pythonをuninstallしてたけど、ぼくのは1.57.0だったのでuninstallしなくてよかった。これもまあまあ時間かかる。


##⑤最低限のpython環境をつくる
とりあえずpipというpythonを扱うためのプログラムが必要になる。
pythonオフィシャルには下記のget-pip.pyを入れる方法がのってるけど、ぼくはうまくいかなかった。

```
brew install python
python get-pip.py
```

ので、下記をつかうとうまくいった。

```
brew install python
pip install virtualenv
```

参考：http://stackoverflow.com/questions/24483486/error-when-trying-to-install-pip-on-mac-10-7


##⑥caffeをなんとかする

```
git clone --depth 1 git@github.com:BVLC/caffe.git
```

ぼくはサーバの設定か分からないけどコマンド入力ではDLできなかったので、githubから直接ダウンロード。
https://github.com/BVLC/caffe
からダウンロードして解凍して、フォルダ名をcaffeに変えて、ライブラリにぶちこみ、ターミナルでルートフォルダに戻って下記を実行。

```
cd caffe
pip install -r python/requirements.txt
cp Makefile.config.example Makefile.config
```

Makefile.comfigをテキストエディットとかで開き、先頭の#を下記のように書き変える。

```
# 一部抜粋
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# PYTHON_INCLUDE := /usr/include/python2.7 \
#       /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
        $(ANACONDA_HOME)/include/python2.7 \
        $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \

# We need to be able to find libpythonX.X.so or .dylib.
# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib
```

そんでこれ。

```
make all -j4
make test
# CUDA ライブラリあるとこを適当に指定
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:~/anaconda/lib
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:$HOME/anaconda/lib:/usr/local/lib:/usr/lib:/opt/intel/composer_xe_2015.2.132/compiler/lib:/opt/intel/composer_xe_2015.2.132/mkl/lib
make runtest
# ↓ ドキュメントにないけど Python から caffe つかうには必要、たぶん
make pycaffe
```

warningとか出るけどたぶんなんとかなる。（英語リファレンスにもだいたいそんなようなこと書いてある）

`make runtest`をやってこういうのが出ればたぶん正解。

```
[----------] Global test environment tear-down
[==========] 755 tests from 123 test cases ran. (31003 ms total)
[  PASSED  ] 755 tests.
```

困ったらこれをやり直すと幸せになれそう。

```
make clear
make
make test
make runtest
make pycaffe
```

参考：
・https://groups.google.com/forum/#!searchin/caffe-users/caffe$2F.build_release$2Ftools$2Fcaffe$20image$20not$20found%7Csort:date/caffe-users/Hi4HKumNIdM/nKp_piy7OtsJ


`make runtest`がうまくいったら、
http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel
これをダウンロードして`caffe/models/bvlc_googlenet`に入れる。


##⑦iPython Notebookを入れる

```
pip install "ipython[notebook]"
```
長い準備はこれで大体おわりです。


#Deepdream動かす
##その前の設定
```
pip install numpy scipy pil
```
これは打ってみたけどやってみたけど「pilが見つかりません」みたいなこと言われた。pilは打たなくてよさそう。

```
git clone --depth 1 git@github.com:google/deepdream.git
```
これもぼくはやっぱりアクセスできないので、githubから直接DLする。
https://github.com/google/deepdream
解凍してルートに`deepdream-master`ってフォルダ名でいれておく。そんで`caffe`フォルダから`deepdream-master`フォルダに移る。

```
cd ../deepdream-master
# CUDA まわりのライブラリがみつからない場合↓設定
export DYLD_FALLBACK_LIBRARY_PATH=/Users/ユーザー名/anaconda/lib:/usr/local/lib:/usr/lib:/Developer/NVIDIA/CUDA-7.0/lib:$DYLD_FALLBACK_LIBRARY_PATH
export PYTHONPATH=/Users/ユーザー名/caffe/python:$PYTHONPATH
```

※`anaconda`、`caffe`フォルダがルートにある場合。そうでない場合はそれぞれのフォルダの場所を指定。Saqooshaさんありがとうございます！

参考：
・https://github.com/BVLC/caffe/issues/1273



##iPython動かす
```
ipython notebook
```


とするとブラウザが自動で開き、dream.ipynbを押すところまでうまくいくんだが、どうしても再生ボタン押してもうまくいかない。

```
The kernel appears to have died. It will restart automatically.
```

という表示が出て進まない。いったいなんなんでしょー？？？


#ということで
Kernelが死なない方法を探しております。



###手軽にやるなら

https://www.reddit.com/r/deepdream/comments/3cawxb/what_are_deepdream_images_how_do_i_make_my_own/

ここにめっちゃdeepdreamしてくれるサイト載ってた。


###あれれ？
上記のページには、deepdreamしてくれるサイトの下に自家製deepdreamのやりかたも載っているのだが、よく見てみると

```
You need an NVidia Graphics card GPU that is on this list in order to be able to run CUDA/Caffe. Find out your GPU by clicking 'About Your Mac' > 'More Info...' > Graphics. Mine was Intel, so I cant use CUDA/Caffe.
```

とか書いてある。NVidiaのグラフィックカードじゃないとダメなんだそうです。なんでダメなのかは書いてない。ぐぐってもいまいち出てこない。当方のはIntel HD Graphics 3000 512 MB。ダメな原因はこれか？でもCPUでもめっちゃ遅いけどできるって書いてあるしな…遅すぎてKernelが死ぬのかな。