2015-07-09
■ChainerのNINで自分の画像セットを深層学習させて認識させる
Caffeに関してはいいテキストがあるのに、chainerはまだ出たばかりなので圧倒的に情報が少ない。
僕も日頃からchainerにはお世話になっているので、なんとか貢献したい。
というわけで、とりあえずCaffeでは定番となっている以下のようなタスクをやってみたメモ
ちなみにNVIDIA CUDA GPU必須(GTX680でひとまず検証済み)。Ubuntu14.04で動作確認
要するに、画像データセットをとってきて、学習させるところまではみんなやるのよ。
たとえばHi-Kingさんとか
PFN発のディープラーニングフレームワークchainerで画像分類をするよ(chainerでニューラルネット1) - 人工言語処理入門
で、これは素晴らしいんだけど、学習してテストしてエラーレートが下がっていって・・・っていうのは解るんだけど、実用的に使うには「で、結局、この画像はなんだと思うワケ?」と問い詰めないとならない。その問い詰め方についてはどこにも書いてない。研究者ならそれでいいのかもしれないけどさー。
オレのオレによるオレのための一般物体認識はどうすりゃいいの?人工知能をどうやって調教するの?
という疑問が拭えませんので、ここらへんを効率的にやるスクリプトをぽちぽち書いてみたというわけで候。
たとえばCaltech 101のように、フォルダの中にカテゴリ(クラス)ごとに分かれたサブフォルダがあって、そこにそれぞれのクラスに対応した画像が入ってる、なんていうパターンを考える。
とりあえずデータセットをつくるために作ったスクリプトをgithubに置いた。
ちなみにpythonは書き慣れてないのでコードは汚い。許して。
$ git clone https://github.com/shi3z/chainer_imagenet_tools.git
$ cd chainer_imagenet_tools
それからCaltech 101をダウンロードして展開してみる。
$ wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz $ tar xzvf 101_ObjectCategories.tar.gz
するとこんな感じのフォルダに分かれていろんな画像が収納されている。
よし、準備OK
ここでさっきcloneしたスクリプトを使う。
$ python make_train_data.py 101_ObjectCategories
んで、これがうまく行くとtrain.txtとtest.txt、label.txtという三種の神器が出来上がる。
あとはcompute_mean.pyしてmean.npyを生成したりというのはHi-Kingさんのエントリの通り。
$ python ~/chainer/examples/imagenet/compute_mean.py train.txt
ただし、トレーニングするときはあとでnin.pyをそのまま使うのでちょっと変形させtrain_imagenet.pyを使う。
nin.pyはforwardに加えて推測だけを行うpredictというメソッドを追加している。chainerのモデルデータはオブジェクトの単純なダンプなので、これを使って学習させなくてはならない。
$ python train_imagenet.py -g 0 -E 20000 train.txt test.txt 2>&1 | tee log
学習が始まる。
頃合いを見て別のターミナルを開き、学習成果を確かめてみよう。
手元に適当な画像を持ってきて、それを認識させてみる。
認識用に画像をリサイズするといい
リサイズ用のスクリプトも書いた。
$ python resize.py ramen.jpg $ python inspection.py _ramen.png
すると認識した結果が表示される。
まだこれは学習がぜんぜん進んでないので、ラーメンを地図と解釈してしまってるが、学習が進むと上手く解釈してくれるのではないだろうか。
けっこうメモリ (特にVRAM)を食うので、AWSのg2サーバーあたりだと学習しながら同時に認識させるとメモリーオーバーフローするかも。手元のGTX680ではそうなった。
このスクリプトは少し改造するだけでカメラ画像に映ったものをリアルタイムに解釈するものにできる。
ゴリラ、とか判定されたら殺意が沸くかも知れないが
- 29 http://t.co/3TXEmqutNS
- 14 http://t.co/vOIvsJi4B1
- 13 https://www.facebook.com/
- 11 http://pipes.yahoo.com/pipes/pipe.info?_id=7ed2910a6358c42a7305fae463b19704
- 9 http://pipes.yahoo.com/pipes/pipe.info?_id=8dda7c5265619c2fb368495a3d11b784
- 8 https://www.google.co.jp/
- 3 http://b.hatena.ne.jp/
- 3 http://pipes.yahoo.com/pipes/pipe.info?_id=VPw6npu13RGKo15vBRNMsA
- 2 http://bit.ly/1KUOv4F
- 2 http://search.yahoo.co.jp/search;_ylt=A3xTkOlFtJ1VamcADmSJBtF7?p=清水+亮&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=&afs=