2016年初Raspberry Pi記事
どうもです、Raspberry Piのわけわからん記事書いてるからあげです。2016年初のRaspberry Pi記事になる予定です。予定ですというのは2015年の年末にこの記事を書いているからです。今年も気が向いたらRaspberry Piのわけわからん記事を量産していこうと思います。よろしくな!
新年一発めということで、初夢にからめて夢に関する話題です。去年末頃に話題になった人工知能が見る夢「DeepDream」の話題です。
- 出版社/メーカー: RaspberryPi.org
- メディア: エレクトロニクス
- この商品を含むブログ (10件) を見る
DeepDreamとは
一時期グロい画像を生成するということで話題になりましたね「Deep Dream」。Deep Dreamの詳細は以下参照ください。
今更ながらですが、ちょっとやってみたいなと思い立ちました。この前Raspberry Pi2でDeep LearningやったしどうせならRaspberry Pi2でできないかな?検索したら既にRaspberry Pi2にインストールしている偉大なる先人がいるじゃん!楽勝楽勝!
そう思っていた時期が私にもありました。結論から言うと地獄でした。必要なパッケージのインストールとビルドにめちゃめちゃ時間かかる上、上記サイトと同じようにやっても、エラー多発してそのたびに対処方法検索してトライアンドエラを繰り返す羽目になりました。そして、なんとかできるようになったものの、240x120サイズの画像サイズで1枚画像生成するのに5分かかるという状況。しかも5,6枚画像生成したらsegmentation falutで落ちるし。画像認識が一瞬だったので完全に見誤っていました。
本当はDeep Learningデジカメ作りたかったのですが、ちょっとRaspberry Pi2での実現は道遠そうです。
Raspberry Pi2でDeep Dream画像
興味ない方が大半の作り方等は後に回して、とりあえず結果だけ先に載っけておきます。
Deep Dreamで画像生成
うわーグロ画像だ!だんだんグロ画像になっていくのがお分かりいただけるでしょうか?一枚生成するに5分以上かかり、6枚ほど生成した後segmentation falutでプログラムが落ちました。Raspberry PiがDeep Learningの夢を見ているのがお分かりいただけただろうか?
この後は、このしょうもない結果を得るための地獄の宇宙語が続くので興味と覚悟がある方だけご覧ください(といってもこの記事の通りやれば2時間もあればできるはずです、多分、ファイト!)。
Deep Dreamセットアップ
大きく2つ必要で、Deep LearningのCaffeというライブラリのインストールとDeep Dream自体のインストールです。ほとんどはCaffeとCaffeを動かすためのパッケージのインストールに費やされます。
Caffeインストール準備
まずは適当な作業用のディレクトリを作って中に入りましょう。
$ cd $ mkdir DeepDream $ cd DeepDream
以下のコマンドでCaffeの最新のソースコードを取得。
$ git clone --depth 1 https://github.com/BVLC/caffe.git
必要なパッケージをapt-getでインストール
ひたすらインストールします。多分30分くらいかかります。
$ sudo apt-get update $ 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のパッケージインストール
Caffeに必要なpythonのパッケージをインストールします。必要なパッケージは以下のコマンドでコマンドで確認できます。1行目のコマンドはディレクトリの移動。
$ cd ~/DeepDream/caffe $ less python/requirements.txt
一気にpipで入れようとすると何故かエラーがでるので、apt-getで入れられるものはapt-getで入れます。具体的には以下のコマンドを地道に打っていきます。
$ sudo apt-get install cython $ sudo apt-get install python-numpy $ sudo apt-get install python-scipy $ sudo apt-get install python-skimage $ sudo apt-get install python-h5py $ sudo apt-get install python-networkx $ sudo apt-get install python-pandas $ sudo apt-get install python-protobuf
他のパッケージは、apt-getで入れるとバージョンが合わないらしいので以下のコマンドで必要なパッケージをpipというpythonのライブラリ専用のインストーラでインストールします。
$ cd ~/DeepDream/caffe $ sudo pip install -r python/requirements.txt
ビルドのための準備
ビルドのために色々準備が必要です。
ヘッダーなどの位置合わせ
修正が必要とのこと、自動で修正するスクリプトgistにアップしました。以下のコマンドをコピペすれば修正してくれます。
$ cd ~/DeepDream/caffe $ git clone https://gist.github.com/karaage0703/955324396cf60e1dc839 optimize $ mv optimize/OptimizeBuildCaffe.sh ./ $ bash OptimizeBuildCaffe.sh
DB周りの調整
ソースファイルの定数を変更する必要あります。以下コマンドでファイルを編集しましょう。
$ vi src/caffe/util/db_lmdb.cpp
変更内容は以下
変更前 const size_t LMDB_MAP_SIZE = 1099511627776; // 1 TB 変更後 const size_t LMDB_MAP_SIZE = 536870912;
Makefile修正
ビルドする前に、Makefileを修正する必要あります。まずは以下コマンドでMakefile準備して編集
$ cd ~/DeepDream/caffe
$ cp Makefile.config.example Makefile.config
$ vi Makefile.config
変更内容は以下です。理由は参考サイトを参照してください。あと参考サイトのままではhdf5
が無いというエラが出てきたビルド通らなかったので、ひっしにググってLIBRARYにパスを追加すればビルドが通ることがわかりました。
変更前
7行目付近 # CPU-only switch (uncomment to build without GPU support). # CPU_ONLY := 1 42行目付近 # BLAS choice: # atlas for ATLAS (default) # mkl for MKL # open for OpenBlas BLAS := atlas 86行目付近 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
変更後
7行目付近 # CPU-only switch (uncomment to build without GPU support). CPU_ONLY := 1 42行目付近 # BLAS choice: # atlas for ATLAS (default) # mkl for MKL # open for OpenBlas BLAS := open 86行目付近 LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/arm-linux-gnueabihf/hdf5/serial/
足りないパッケージのインストール
この後はmakeしてはエラー発生、エラーメッセージでググる、再度makeの繰り返し。最終的に必要だったのは以下でしたのでビルドする前に入れちゃいましょう。一部不要なやつも入れちゃっているかも。エラーメッセージで出てくると大抵解決方法が出てきました。偉大なる先人に感謝感謝。すでにインストールされているものがあるかもしれませんが、気にせずどんどん進んでいってください。
apt-getでインストール
$ sudo apt-get install libboost1.55-all $ sudo apt-get install cmake
gflagインストール
$ cd $ wget https://github.com/schuhschuh/gflags/archive/master.zip $ unzip master.zip $ cd gflags-master $ mkdir build && cd build $ export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1 $ make $ sudo make install
glogインストール
$ cd $ wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz $ tar zxvf glog-0.3.3.tar.gz $ cd glog-0.3.3 $ ./configure $ make $ sudo make install
mdbインストール
$ cd $ git clone https://github.com/wizawu/lmdb.git $ cd lmdb/libraries/liblmdb $ make $ sudo make install
本家のgit://gitorious.org/mdb/mdb.git
が死んでいたのでミラーサイトを探し出しました。
Caffeビルド
いよいよビルドです。ここまでの準備がうまくいっていたらビルドが一発で通るはずです。うまくいかなかったら…残念でしたね。エラーをググっては対処方を調べるという地獄へようこそ!(Welcome to underground!)
$ cd ~/DeepDream/caffe $ make all -j4 $ make test -j4 $ make runtest $ make pycaffe $ make distribute $ mkdir ~/pycaffe $ mv distribute/python/caffe ~/pycaffe
あとは以下コマンドでcaffeへのパスを通します。ここらへんもよくわからなくてググって解決しました。exportは起動のたびに実行必要になります。毎回面倒くさいという人は.bashrc
にでもコピペしてね。
$ export PYTHONPATH=/home/pi/pycaffe:$PYTHONPATH $ export LD_LIBRARY_PATH=/home/pi/DeepDream/caffe/distribute/lib:$LD_LIBRARY_PATH
モデルダウンロード
ダウンロードしましょう。
$ cd ~/DeepDream/caffe/models/bvlc_googlenet/
$ wget http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel
DeepDreamインストール
いよいよインストール!なのですが、ipythonで動かす本家のDeepDreamは何故かうまく動きませんでした(多分ipythonのバージョン関係)。単純にpythonで動かしたいけど、うまくいかず四苦八苦していたら、こちらにも偉大な先人が。
プログラムコピペして、モデルのパスだけ書き換えたら一発で動きました。凄い!超感謝!パス書き換えたコードをgistにアップさせていただいたいので、以下のコマンドでコピー(clone)できます。
$ cd ~/DeepDream
$ git clone https://gist.github.com/d9ad7556fa624ccce303.git dd
DeepDream実行
好きな画像をv.jpg
という名前で保存して、スクリプトと同じディレクトリ~/DeepDream/dd
に配置してから、以下コマンドを実行してください。画像のサイズは160x120くらいじゃないと1枚も生成できずsegmentation falutで落ちます。
$ cd ~/DeepDream/dd
$ python deepdream_sample.py
同じディレクトリにframes
というディレクトリが生成されて、約5分毎に画像が1枚生成されます。すでにframes
が生成されているとエラになるので$ rm -rf frames
でディレクトリ削除してね。
まとめ
というわけでDeep Dreamやってみましたがかなり大変でした。そしてRaspberry Pi2でも重すぎて実用的じゃないですね。もっと軽ければ色々使い道ありそうなのですが…残念です。