YU2TA7KA's BLOG

派生開発、組み込み開発周りのこと。

Raspberry PiでCaffeの物体認識のリファレンスモデルを動かせた

f:id:yuji-tanaak:20190503080425j:plain
画像分類と結果とその対象画像

ラズパイへCaffeのインストールが完了したので、リファレンスモデルを動作させました。VGG16のネットワークも利用してみたかったのですが、こちらはメモリ不足で動かせませんでした。

動作環境

Raspberry Pi Pi 3 Model B+
SDHCカード 16GB Class10
OS Raspbian-2018-10-09(11)

リファレンスモデルの動作手順

下記を参考に動作させました。
punyo-er-met.hateblo.jp

そのまま動作させると下記のようにメモリ不足のエラーが発生します。

Traceback (most recent call last):
  File "classify.py", line 138, in <module>
    main(sys.argv)
  File "classify.py", line 110, in main
    channel_swap=channel_swap)
  File "/home/pi/caffe/build/caffe/python/caffe/classifier.py", line 26, in __init__
    caffe.Net.__init__(self, model_file, caffe.TEST, weights=pretrained_file)
MemoryError

エラー対策

下記を参考に利用可能なフリーメモリ量を増やすことで動作させました。
Raspberry Piでメモリを馬鹿食いするアプリ用に不要なサービスを停止してフリーメモリを増やす方法 (ラズパイでメモリを沢山使用するビルドやアプリ用に不要なサービス等を停止して使えるメインメモリを増やす)

対応前(初期状態)
pi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           875M         91M        583M         11M        200M        709M
Swap:           99M          0B         99M
対応後(フリーメモリ量増)
pi@raspberrypi:~ $ free -h
              total        used        free      shared  buff/cache   available
Mem:           865M         29M        752M         11M         83M        777M
Swap:          2.0G          0B        2.0G

実行結果

識別実行
$ python ./python/classify.py --raw_scale 255 data/101_ObjectCategories/airplanes/image_0002.jpg result.npy
~中略~
Saving results into result.npy

1分程度で識別が完了します。

結果表示
$ python show_result.py data/ilsvrc12/synset_words.txt result.npy
#1 | n04552348 warplane, military plane | 84.8%
#2 | n04008634 projectile, missile |  5.5%
#3 | n02690373 airliner |  5.1%

warplaneと正しく分類されています。

まとめ

ネットにある情報と資産を利用させてもらってCaffeのリファレンスモデルの実行確認までできました。今後は、データを用意してラズパイで学習をさせてみたいと思います。

おまけ(VGG16関連)

参考:【Caffe】モデルをダウンロードして利用する - いつもの作業の備忘録

ネットワーク定義ファイルのダウンロード*1

$ $CAFFE_HOME/scripts/download_model_from_gist.sh 211839e770f7b538e2d8 .
$ cd 211839e770f7b538e2d8
$ wget http://www.robots.ox.ac.uk/~vgg/software/very_deep/caffe/VGG_ILSVRC_16_layers.caffemodel

スクリプトの実行

cp $CAFFE_HOME/python/classify.py .
./classify.py --raw_scale 224 --model_def VGG_ILSVRC_16_layers_deploy.prototxt --pretrained_model VGG_ILSVRC_16_layers.caffemodel --mean_file '' $CAFFE_HOME/data/101_ObjectCategories/airplanes/image_0001.jpg result.npy

メモリ不足のエラー発生、フリーメモリ量を増やしても結果変わらず。

I0503 06:25:36.105965  1475 net.cpp:257] Network initialization done.
Traceback (most recent call last):
  File "./classify.py", line 138, in <module>
    main(sys.argv)
  File "./classify.py", line 110, in main
    channel_swap=channel_swap)
  File "/home/pi/caffe/build/caffe/python/caffe/classifier.py", line 26, in __init__
    caffe.Net.__init__(self, model_file, caffe.TEST, weights=pretrained_file)
MemoryError