学習済みのモデルがそろったGitHubのリポジトリやサイト(Zoo)がいくつかあります。
ラズパイ3のカメラで物体検出をやってみます(1)ではYOLOのCaffeモデルを使いましたが、ここではNeural Compute Application Zoo (NC App Zoo)を使ってみます。
フォルダーの構成
apps:NCSを使うためのアプリケーション用のフォルダー。ビルド後のものやビルド前のものがあります
caffe:Caffeモデルをダウンロードしたりgraphにコンパイルするためのスクリプトがあります
tensorflow:TensorFlowモデルをダウンロードしたりgraphにコンパイルするためのスクリプトがあります
data:データ自体かデータをダウンロードするためのスクリプトがあります
アプリケーションにはPythonで実行するパターンと、C++のソースからコンパイルして実行用バイナリーを作るパターンの2つがあるようです。
Makefileに記述があれば、make compileでgraphバイナリーが作成されます。
概ね、Movidius NCSは1個でいけますが、中には複数のNCSが必要なものもあります。
例:tensorflow/MTCNN、ここは2つのgraphバイナリを使っています。
ncsdk2なら複数graphをサポートしているようですが、1.12はそうではないので、複数のgraphに対しては、対応する複数のNCSが要るってことですね。
静止画を読み込んで物体検出
動画を再生しながら物体検出
最後にライブカメラで物体検出
番外:画像の人物の年齢を推論してみる
Raspberry-Pi (ラズベリーパイ)3 Model B + ncsdk 1.12.00.01の環境
NC App Zooをクローンしてセットアップしておきます。
$git clone https://github.com/movidius/ncappzoo.git
$ cd ncappzoo
$ make
Tensorflowのモデルを使います。分類は、ISVRC 1000 categories。
$cd ~/ncappzoo/tensorflow/
$make all
Tensorflowのモデルで使用可能な学習済みモデルは以下の通りとなっています。
facenet
inception_v1
inception_v2
inception_resnet_v2
inception_v3
inception_v4
mobilenets
MNIST
inception_v4モデルを使って静止画から検出。
Tensorflowのネットワークの重みファイルをgraphバイナリーファイルに変換。
$cd ~/ncappzoo/tensorflow/inception_v4
$ make all
実行してみます。
$python3 run.py
~/ncappzoo/apps で提供されているプログラムを使ってみます。
ディレクトリ内のmp4動画を再生して物体検出してみます、SSD Mobilenetが使われています。
video_objectsを利用してみます。
$cd ~/ncappzoo/apps/video_objects
$python3 video_objects.py
動画が再生されて、リアルタイムで物体を検出します。
では、カメラモジュールを使ってライブ映像で物体検出してみます。
$sudo modprobe bcm2835-v4l2
$cd ~/ncappzoo/apps/live-object-detector
$python3 live-object-detector.py
カメラモジュールでYouTubeの動画を写しながら検出
trainとbus、dogとcatの区別が明確じゃないです…..。
以下のようなエラーが出た場合
VIDIOC_QBUF: Invalid argument
video_objects.pyでVideo StreamのFrameサイズを変更してみます。
# Set camera resolution
CAP_PROP_FRAME_WIDTH 620->640
camera.set( cv2.CAP_PROP_FRAME_WIDTH, 640 )
番外:画像の人物の年齢を推論してみる
ラズパイ3で静止画やLiveカメラから年齢・性別を推測してみるへ移行しました
Leave a Reply