Chainerのcaffeモデルの読み込みが遅い
下記記事で、Chainer使った画像認識をしたのですが、一つ問題があってモデルの読み込みが遅い。遅過ぎる!
で、色々調べたらどうもcaffeの学習モデルのChainerのモデルへの変換に時間がかかっていることがわかりました。で、更に調べたら id:shi3z さんがまさにそこらへんのこと書いてくれているじゃないですか。
ただ、例によってあまりにあっさり書いてあるのと、汎用的でないので少し使いやすい形にして下記リポジトリにアップしました。
convert_caffe_to_chainer.py
がcaffeモデルからChainerモデルに変換するスクリプトです。以下のように変換したいモデルと変換後のモデルのファイル名を引数にして実行することで変換できます。
$ python convert_caffe_to_chainer.py bvlc_googlenet.caffemodel chainer.pkl
時間計測
モデルの変換でどれだけ早くなったか測定してみました。とれたてほやほやのフリー素材を使用します。ロンスタさん(id:lonestartx)いつもありがとうございます。
Mac Book Pro
スペックは以下です。
Model:MacBook Pro (Retina, Mid 2012) CPU: 2.3 GHz Intel Core i7 Memory: 8 GB 1600 MHz DDR3
$ python evaluate_caffe_net_ranking.py megane.jpg googlenet bvlc_googlenet.caffemodel -b ./
1 | n04356056 sunglasses, dark glasses, shades | 45.4% 2 | n04355933 sunglass | 20.7% 3 | n02841315 binoculars, field glasses, opera glasses | 18.4% 4 | n04235860 sleeping bag | 5.7% 5 | n03476991 hair spray | 1.3% time:31.9829010963s
$ python evaluate_caffe_net_ranking.py megane.jpg googlenet chainer.pkl -b ./
1 | n04356056 sunglasses, dark glasses, shades | 45.4% 2 | n04355933 sunglass | 20.7% 3 | n02841315 binoculars, field glasses, opera glasses | 18.4% 4 | n04235860 sleeping bag | 5.7% 5 | n03476991 hair spray | 1.3% time:0.435350894928s
30秒以上かかっていたのが、変換することで1秒以下!!爆速!!どうでもいいけど、1.3%でヘアスプレーとして認識されているのは何故でしょうねw
Raspberry Pi
スペックは以下です。
Model:Raspberry Pi 3 Model B CPU:1.2 GHz Cortex-A53 ARMv8 Memory:1GB 450MHz DDR2
これはRaspberry Piでも期待が持てると実行!
$ python evaluate_caffe_net_ranking.py megane.jpg googlenet bvlc_googlenet.caffemodel -b ./
1 | n04356056 sunglasses, dark glasses, shades | 45.4% 2 | n04355933 sunglass | 20.7% 3 | n02841315 binoculars, field glasses, opera glasses | 18.4% 4 | n04235860 sleeping bag | 5.7% 5 | n03476991 hair spray | 1.3% time:203.423058033s
$ python evaluate_caffe_net_ranking.py megane.jpg googlenet chainer.pkl -b ./
Load file=megane.jpg 1 | n04356056 sunglasses, dark glasses, shades | 45.4% 2 | n04355933 sunglass | 20.7% 3 | n02841315 binoculars, field glasses, opera glasses | 18.4% 4 | n04235860 sleeping bag | 5.7% 5 | n03476991 hair spray | 1.3% time:32.5437700748s
なんと認識に30秒以上…これは実用には辛いですね。
まとめ
Chainerで使用するモデル、caffeモデルをChainerモデルに変換して保存することで、Macなら実時間で認識できるまで早く動作できるようになりました。ただ、Raspberry Piではかなり重い結果に。Raspberry Pi上でChainerで画像認識はそのままでは難しそうですね。Raspberry Pi上でChainer使って色々面白いことできるかなと思っていたので残念です。