Introduction
ChainerCVで SSD (Single Shot Multibox Detector) を遊んでみます。
How to?
CUDA、cuDNNのチェック、仮想環境作成、仮想環境のアクティベートまでの手順は下記です。
パッケージのインストール
cupy、cupy-cuda、chainerのバージョンは一致させます。
cupy-cudaの末尾の数値は、先ほど確認したCUDAのバージョンに合わせます。
また、Chainerは4.5.0を使うため、ChainerCVは0.10.0になります。
(0.11.0はChainer 5.0.0になるため) また、下記の順番を守ってインストールします。
1 | > python -m pip install --upgrade pip |
最終確認
Chainer、ChainerCVがインストールされたこと、ChainerがCUDA、cuDNNを認識していることを確認します。
1 | > python -c "import chainer; chainer.print_runtime_info()" |
デモ (学習)
ChainerCVのリポジトリにサンプルが含まれているのでブランチを指定してクローンします。
クローンしたらサンプルを実行します。
1 | > git clone -b v0.10.0 https://www.github.com/chainer/chainercv |
データセットはVOC2007のようです。
GeForce GTX 1080を利用した場合、約30時間かかりました。また、バッチサイズを増やそうとしたらメモリが足りなくなりました。
下記は学習後の損失の推移グラフです。
上から、全体の損失、カテゴリの損失、位置の損失です。
デモ (推論)
前項での学習した結果、モデルがresult\model_iter_120000として保存されていますのでそれを活用します。
学習に使ったVOC2007のカテゴリは下記のとおりです。
- Aeroplanes
- Bicycles
- Birds
- Boats
- Bottles
- Buses
- Cars
- Cats
- Chairs
- Cows
- Dining tables
- Dogs
- Horses
- Motorbikes
- People
- Potted plants
- Sheep
- Sofas
- Trains
- TV/Monitors
試しにWikipediaにある羊の画像(Lleyn sheep.jpg)を認識させてみます。
なお、推論のデモには追加でモジュールが必要であるためインストールします。
1 | > pip install matplotlib |
実行は下記のように行います。
1 | > python demo.py --gpu 0 --pretrained-model result\model_iter_120000 800px-Lleyn_sheep.jpg |