Raspberry Pi 2 でDeepDreamを動かしてみた
想定している読者の方
- すでにRaspberry Pi(Model Aでもいいです)を持っていて、基本的なLinux(特にRaspbianなどDebian系のディストリビューション)のコマンド操作ができる方
- 母艦はなんでもいいので、Raspbian(現時点で2015-05-05版)のイメージディスクを作成してRaspberry Piを起動できる方
- Raspberry Pi 2をお持ちの方(Raspberry Pi Model B+でも動くとは思いますが、CPU性能的に厳しいかと)
Raspbian(Wheezy)のシステムディスクを作って、パーティションを拡張する
本質的な箇所ではないので省略します。
なお、SDカードは8GBだとギリギリなので16GBをおすすめします。Class 10未満のものは避けたほうがいいと思います。
Raspbian(Wheezy)をjessieにアップグレード
Release Notes for Debian 8 (jessie), ARMv7 (EABI hard-float ABI) の通りです。慣れた方であれば目を通さなくてもいいかと思います。
Caffeのインストール
Caffe | Deep Learning Frameworkにubuntu用のインストールガイド(
http://caffe.berkeleyvision.org/install_apt.html)があるので結構参考になります。
buildとかいったディレクトリを作る
$ mkdir build
$ cd build
Caffeのソースを取ってくる
$ git clone --depth 1 https://github.com/BVLC/caffe.git
まず、必要なパッケージをひたすらインストール
OpenBLAS
多分ATLASでも大丈夫だと思いますが、OpenBLASの方が性能がいいっぽいので。
$ sudo apt-get install libopenblas-dev
その他必要なパッケージ
ゴリゴリとコンパイルするより、パッケージで入るものは入れてしまったほうが時間の短縮になります(経験済み・・・)。
$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev
$ sudo apt-get install libhdf5-serial-dev protobuf-compiler
pythonのパッケージ
./build/caffe/python/requirements.txt に必要なパッケージ一覧(バージョン情報込み)があるので、
$ apt-cache showpkg foobar
といったコマンドで、バージョンが要件を満たしているものは、ひたすらapt-getでインストールする。
Cython>=0.19.2
$ sudo apt-get install cython
numpy>=1.7.1
$ sudo apt-get install python-numpy
scipy>=0.13.2
$ sudo apt-get install python-scipy
scikit-image>=0.9.3
$ sudo apt-get install python-skimage
以下のパッケージは依存で引っ張られてインストールされる。
matplotlib>=1.3.1
nose>=1.3.0
six>=1.1.0
Pillow>=2.3.0
h5py>=2.2.0
$ sudo apt-get install python-h5py
networkx>=1.8.1
pyyaml>=3.10
$ sudo apt-get install python-networkx
pandas>=0.12.0
$ sudo apt-get install python-pandas
protobuf>=2.5.0
$ sudo apt-get install python-protobuf
残りのpythonモジュールはバージョン違いなどでパッケージでいれられないので、pipでインストールする
# curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
以下のパッケージがインストールされるように、
./build/caffe/python/requirements.txt
を編集。(多分編集しなくても平気)
ipython>=3.0.0
leveldb>=0.191
python-dateutil>=1.4,<2
python-gflags>=2.0
# pip install -r python/requirements.txt
後で使うので入れとく
# pip install "ipython[notebook]"
ソース・ヘッダーなどをjessieに合わせる
これをしないと、後でエラーになる
- ヘッダーなどの位置合わせ
Optimize build process on debian jessie · Issue #2347 · BVLC/caffe · GitHub
-
DB周りの調整
caffe on jetson tk1 · Issue #1861 · BVLC/caffe · GitHub
src/caffe/util/db_lmdb.cppの定数変更
const size_t LMDB_MAP_SIZE = 1099511627776; // 1 TB
の定数を
2^29 (536870912)
に変更
Caffeのコンパイル
$ cp Makefile.config.example Makefile.config
$ vi Makefile.config
Raspberry PiのVideocore IVはGPUを演算に使えないのと、今回はOpenBLASを使っているので、適当なエディターで編集する。
(抜粋)
# CPU-only switch (uncomment to build without GPU support).
CPU_ONLY := 1
# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := open
コンパイル
$ make all -j4
$ make test -j4
$ make runtest
$ make pycaffe
テストをパスしたら、あともう少し。
モデルを取ってくる
wgetとかで下記モデルをダウンロード
http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel
buid/caffe/models/bvlc_googlenet
にコピー
DeepDream動かすよー
$ git clone --depth 1 git@github.com:google/deepdream.git
$ cd deepdream-master
$ export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH
$ ipython notebook
GUIの場合この時点でブラウザが立ち上がる。
「再生ボタン」っぽい黒三角をクリックして、「青空に雲」の絵まで来てエラーがなければ、OK。あとはのんびりグロい絵になるのを眺める。
お疲れ様でした。
本文中に明記していないけど参考にしたサイト)
勉強になるスライド(読むと理解が深まる)