deepdream を動かしてみる

[Google の deep learning のきもいやつ](http://googleresearch.blogspot.jp/2015/06/inceptionism-going-deeper-into-neural.html)、[deepdream](https://github.com/google/deepdream) を動かしてみる。
環境は OS X 10.10.4, iMac (27-inch, Late 2012), NVIDIA GeForce GTX 675MX 1024 MB。

# まず Caffe インストール

ここ参考に。
http://caffe.berkeleyvision.org/installation.html
http://caffe.berkeleyvision.org/install_osx.html

CUDA
最新版の 7 が strongly suggested
https://developer.nvidia.com/cuda-downloads

Caffe は Anaconda の Python がいいつってるので、そっちいれる。
http://continuum.io/downloads
（brew のは uninstall か unlink する、はいってるなら）

ほか、必要なパッケージを brew でいれる。

```
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 は最新版の 1.58.0 では、caffe コンパイルエラーになっちゃうのでいっこまえの 1.57.0 を入れる。↓いれかた
[Itinerant Bioinformaticist: Caffe incompatible with Boost 1.58.0](http://itinerantbioinformaticist.blogspot.jp/2015/05/caffe-incompatible-with-boost-1580.html?m=1)

```
brew uninstall 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
```

ようやく caffe 本体

```
git clone --depth 1 git@github.com:BVLC/caffe.git
cd caffe
pip install -r python/requirements.txt
cp Makefile.config.example Makefile.config
```

`Makefile.config` は Anaconda 使うようのに書き換える。（Anaconda つかうなら）

```mf:Makefile.config
# 一部抜粋
# 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
make runtest
# ↓ ドキュメントにないけど Python から caffe つかうには必要、たぶん
make pycaffe
```

caffemodel ファイルだけ別途配布なので↓から。
https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
caffemodel_url ってかいてあるやつ。おとして `caffe/models/bvlc_googlenet` に入れる。


# iPython Notebook

deepdream のサンプルコードは iPython Notebook 形式で配布されてるので、iPython Notebook をいれる。（Anaconda にはもとからはいってるっぽい）

```shell-session
pip install "ipython[notebook]"
```

# deepdream 動かしてみる

入ってないならいれる。（Anaconda にはもとからはいってるっぽい）

```
pip install numpy scipy pil
```

deepdream おとす。

```
git clone --depth 1 git@github.com:google/deepdream.git
```

iPython Notebook 立ち上げる

```
cd deepdream-master
# CUDA まわりのライブラリがみつからない場合↓設定
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/cuda/lib:~/anaconda/lib
export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
ipython notebook
```

ブラウザ勝手にひらくので dream.ipynb 選ぶ。あとはツールバーの再生ボタンぽちぽちやれば上から python スクリプト実行されてく。In[3] のとこの 1 行目、caffemodel ファイルがあるパスに書き換えること。

```py
model_path = '/some/path/caffe/models/bvlc_googlenet/' # substitute your path here
```

エラーでなければ In[7] のスクリプト実行すれば例のキモいやつできあがる。
![inception.jpeg](https://qiita-image-store.s3.amazonaws.com/0/2595/0952db46-e6b6-6efa-0b6f-b70b7aff1eee.jpeg)


# iPython Notebook つかわずに

ふつうの Python からやるには、`dream.ipynb` にはいってたスクリプトをコピペでいっこのファイルにまとめて、あとはてきとうに。こんなかんじ。
https://gist.github.com/Saqoosha/50b83b10f8dfc1cc0a3b
↑ので↓これできる。
https://vimeo.com/132849531 （連番出力したあと After Effects でタイムリマップかけてる）
これはデフォルトの `bvlc_googlenet` じゃなくって `finetune_flickr_style` をつかってる。`end` パラメタも変更必要。`pool5` つかってる。これかえるといろいろ絵もかわる。`end` に何が指定できるかは `net.blobs.keys()` を呼べばリストがでてくるのでその中から。