学習済みの一般物体検出(SSD)をローカルPC上で動かしてみた
前回は性能は不十分ながらも自分で学習させたモデルをPC上で動かしてみましたが、
誤検知している様子を見てても面白くないので、学習済みのオープンソースモデルを動かしてみます。
今回は有名な一般物体認識の一つであるSSDを使います。
SSDの詳細についてはこちら。
また、フレームワークはKerasを用います。
動作環境
OS:Windows 10 Home (64bit)
Python 3.5
Anaconda 4.2.0
Keras 2.2.4
手順
①GITHUBに上がっているこちらの学習済みモデルをダウンロードし、任意の場所に解凍します。
https://github.com/mashyko/ssd_keras_ver2_1
<学習済みモデル>
入力画像サイズ:300x300
学習データセット:Pascal VOC
検出クラス:21クラス
"background", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"
②こちらから学習済みの重みファイル(weights_SSD300.hdf5)をダウンロードし、zipファイルを解凍します。
https://mega.nz/#F!7RowVLCL!q3cEVRK9jyOSB9el3SssIA
③①で作成したssd_keras_ver2_1-masterの直下に②の重みデータを格納します。
④ssd.pyとtesting_utilsフォルダの下にあるvideotest.pyを以下のように変更します。
Keras v1で記載されているのでV2ではエラーになります。
ssd.py
#12行目 from keras.layers import merge #を以下のように変更 from keras.layers import concatenate #253, 260, 267, 284行目 merge -> concatenate #に変更 #258, 265, 272, 287行目 mode='concat' #はすべて削除 #258, 265, 272, 287行目 concat_axis=1 => axis=1 #のように変更
videotest.py
#82行目 vid = cv2.VideoCapture(1) -> vid = cv2.VideoCapture(0) #のように変更 #0はPC内蔵のカメラ、1は外付けUSBカメラ
⑤Anacondaプロンプトを起動し、以下を実行します。
$ cd testing_utils/ $ python videotest_example.py
すると、Web cameraの映像が立ち上がり、検知結果のバウンディングボックスが表示されます。プロンプト上でたくさんWarningが出てきますが、無視してOKです。
検知のフレームレートは1-2fpsです。
実際に検知させてみた様子
Youtubeの動画をWebカメラで撮影し、その映像にSSDをかけてみました。
1-2fpsしか処理速度がないため非常にカクカクした映像になっていますが、車や人、バイクなどを認識できています。
また、動画をカメラで撮影しているので、スピードが速い動きは不鮮明に映ってしまいますがそれでもある程度検出できているのがわかります。
感想
学習済みのモデルを使うことで簡単に一般物体検出を動かすことができました。
次はラズベリーパイ上でディープラーニングを動かすことにチャレンジしてみたいと思います。
参考URL
http://www.koi.mashykom.com/tensorflow.html