Movidius NCSを使ってYOLO学習済みモデルで物体検出をやってみます。
この物体検出の「目」になるのがカメラです。ラズパイに取り付けるカメラは2種類あります、両方でやってみましょう。
Raspberry-Pi (ラズベリーパイ)3 Model B + ncsdk 1.12.00.01の環境
Webカメラ
まずは、YOLOネットワークモデルをPC+NCSで実行してWebカメラで物体検出してみました
のラズパイ版です。
こういう構成で、USB接続のカメラを使います。
やり方はPC版と同じなので、ざっと手順のみ。
YOLOのサイトから以下の2つのファイルをDLしておきます。
YOLOディレクトリを作成
ダウンロードしたyoloNCS-masterを解凍してYOLOディレクトリにコピー
YOLO/yoloNCS-master/weightsディレクトリを作成
ダウンロードしたyolo-tiny.caffemodelをYOLO/yoloNCS-master/weightsディレクトリにコピー
NCS用graphバイナリーファイルを作成します
$cd ~/YOLO
$mvNCCompile prototxt/yolo_tiny_deploy.prototxt -w weights/yolo_tiny.caffemodel -s 12
カメラを起動して検出開始
$cd ~/YOLO/yoloNCS-master
$python3 py_examples/object_detection_app.py
object_detection_app.pyで検出できるオブジェクトは以下の20種類です。
classes = [“aeroplane”, “bicycle”, “bird”, “boat”, “bottle”, “bus”, “car”, “cat”, “chair”, “cow”, “diningtable”, “dog”, “horse”, “motorbike”, “person”, “pottedplant”, “sheep”, “sofa”, “train”,”tvmonitor”]
カメラ・モジュール
こういう構成で、カメラ・モジュールを使います。
方法は2つ
1:カメラ・モジュールをUSBカメラとして扱えるようにマウントして使う場合
これだとobject_detection_app.pyを書き換える必要がないです。
ただし、他のUSBカメラと共存させる場合は、/dev/video0として認識されるようにします。
手動でマウントする場合は、他のカメラを外しておきます。
他のUSBカメラが接続されていると、それが優先されるので以下のコマンドで見ると
$ls /dev/video*
USBカメラが、/dev/video0
カメラモジュールが、/dev/video1
になってしまいます。
object_detection_app.pyではデフォルトでDevice0しか見ていません。
カーネルモジュールのロードを実行
$sudo modprobe bcm2835-v4l2
ちなみに、アンロードする場合は
$sudo modprobe -r bcm2835-v4l2
恒久的に使う場合は/etc/modulesをエディターで開いて
$sudo leafpad /etc/modules
以下を記述して
bcm2835-v4l2
ラズパイ再起動
カメラを起動して検出開始
$cd ~/YOLO/yoloNCS-master
$python3 py_examples/object_detection_app.py
カメラ・モジュールの方が画素数が多いので画像はきれいですが、それで検出に差が出るってことはありません。
注:
object_detection_app.py実行時に以下のメッセージが出てカメラが起動しない場合
VIDIOC_QBUF:Inavalid argument
object_detection_app.py:__name__のvideo streamのframeサイズを落としてみます
Width
default=800 -> default=640
Height
default=600 -> default=480
2:直カメラ・モジュールを使う場合
若干ですが、カメラ動作は軽くなります、本当に若干ですが。
ncsdk2の環境でやってみます。ただ、ncsdk2の環境だとNCSのサンプルはTensorFlowが1.8.0じゃないと通らないという報告がありますね。SDKの1.12をインストールした時のTensorFlowは1.4.1、さてどうしよう?
工事中(coming soon)
CPUチェック
カメラで物体検出を行っている時のCPU温度です。
80℃を超えていますね。
こりゃ扇風機、いるな。
再度測定
CPUが77℃くらいの時のクロックは1.2GHzまで上昇してました。
検出を停止したら、あっという間に63℃くらいまで低下し、クロックも通常の600MHzに落ちてました。
Leave a Reply