はじめに
- USB型DeepLearningアクセラレータ,"Movidius Neural Compute Stick"をRaspberryPi2で動かしてみました.
- 基本的な手順はRaspberryPi3と変わりませんが,RaspberryPi2での動いた実績メモです.
- Caffe modelのコンパイル環境にはUbuntu16.04が必要ですが,コンパイル済みのCaffe model(Graphバイナリ)があれば,Raspbian Jessie(2017-07-05)だけで動ごかせるのがポイントです.その辺を整理して書いてみます.
Movidius Neural Compute Stickとは.
- Movidiusとは,GoogleのProject Tangoや,DJIのドローンSPARKなど,リアルタイム性が高いコンピュータービジョンの性能向上に,効果を発揮しているチップセットです.
- Movidiusが開発した専用チップ"Myriad 2 VPU"を搭載.消費電力1Wで100GFLOPSでのディープニューラルネットワーク処理が可能とのこと.
- 専用SDKを利用してCaffe modelをこのUSBアクセラレータ用にコンパイル,RaspberryPiに接続すればエッジサイドでのDNN実行が可能となります.
- 以下に公式の説明動画を貼っておきました.
Introducing Movidius Neural Compute Stick
MovidiusNCSとRaspberryPi2で動かしてみました。
- MovidiusNCSとRaspberryPi2,SDKサンプルで動かしてみた事を動画でまとめてみました.
- CVPR2017で購入したので,現地の状況なども動画に含んでいます.ご参考までに.
- 2017-08-12現在.日本のRSコンポーネンツでも9900円で購入できそうです.
- 以下に記載した手順を踏むと,この動画で行っていることができます.
- 詳細や最新は,Latest version: Movidius™ Neural Compute SDKでご確認ください.(はまりそうなTIPSは細々書いてみました.)
Try Movidius Neural Compute Stick in Raspberry Pi 2
Movidius NCSに必要な,2つの環境.
- Movidius NCSを使うには,2つの環境が必要となります.
- 1つ目はCaffe modelをNCS用にコンパイルする環境です.これはUbuntu16.04が必須となります(Raspbian Jessieは今のところ×). 一方でMovidius NCSは不要です.
- 2つ目はNCS用にコンパイルしたCaffe modelバイナリ(graphと呼ぶ)を実行する環境です.こちらはUbuntu16.04でもRaspbian Jessieでも実行可能です. Movidius NCSは必須です.
- 今回は,1つ目のCaffe modelをNCS用にコンパイルする環境はRaspberryPi2 + Ubuntu16.04で. 2つ目の実行環境は,RaspberryPi2 + Raspbian Jessie + Movidius NCSで環境を別々に作ってみました.(もちろん分けなくても良いです.また,RaspberryPiではなく,上記OSを準備したPCなら同様に環境構築が可能です)
- 以下の動画だけ見ると,RaspberryPi2 + Raspbian Jessieのみで全部出来るように見えますが,実はそうではなくて, Caffe modelをNCS用にコンパイルする環境がUbuntu16.04が別途必須なのです.
Getting Started with Neural Compute Stick and Rasbperry Pi 3
① Caffe modelをNCS用にコンパイルする環境を作る(Ubuntu16.04)
1.RaspberryPi2用のUbuntu16.04イメージをここからダウンロード(ubuntu-16.04.3-preinstalled-server-armhf+raspi2.img.xz)して,SDに書き込みます.
2.SDKをダウンロードして解凍します.
wget https://ncs-forum-uploads.s3.amazonaws.com/ncsdk/MvNC_SDK_01_07_07/MvNC_SDK_1.07.07.tgz tar xvf MvNC_SDK_1.07.07.tgz tar xvf MvNC_API-1.07.07.tgz tar xvf MvNC_Toolkit-1.07.06.tgz
3.MvNC_Toolkit-1.07.06をセットアップします.これがCaffe modelをNCS用にコンパイルする環境です.セットアップ完了に3時間はかかったと思います...気長に.(あまりに長すぎて,Caffeのインストール途中で止めてしまい,その後Caffeのビルドが通らなくなったのですが,make cleanしてから,再度./setpu.shすればいけました.)
cd bin ./setup.sh
4.MvNC_API-1.07.07をセットアップします.これがNCS用にコンパイルしたCaffe modelバイナリ(graphと呼ぶ)を実行する環境です.Caffe modelバイナリ(graphと呼ぶ)を生成するために,Ubuntu16.04でCaffe model(Alexnet,Googlenet,Squeezenet,etc)のダウンロードを行い,MvNC_Toolkit-1.07.06に含まれるコンパイラを使ってCaffe modelをコンパイルし,graphを生成します.1点ファイル修正をします.デフォルトのconvert_models.shは,-s 12のコンパイルオプションがついておらず,実行速度が半減以下になるので,以下のように書き換えます.(2017-08-12現在. 他のサンプルは,mvNCCompile.pycに対して-s 12のコンパイルオプションがついてる場合のあるのですが,なぜかここには付いていない)
convert_models.sh
#!/bin/sh NCS_TOOLKIT_ROOT='../../bin' echo $NCS_TOOLKIT_ROOT python3 $NCS_TOOLKIT_ROOT/mvNCCompile.pyc ../networks/SqueezeNet/NetworkConfig.prototxt -s 12 -w ../networks/SqueezeNet/squeezenet_v1.0.caffemodel -o ../networks/SqueezeNet/graph python3 $NCS_TOOLKIT_ROOT/mvNCCompile.pyc ../networks/GoogLeNet/NetworkConfig.prototxt -s 12 -w ../networks/GoogLeNet/bvlc_googlenet.caffemodel -o ../networks/GoogLeNet/graph python3 $NCS_TOOLKIT_ROOT/mvNCCompile.pyc ../networks/Gender/NetworkConfig.prototxt -s 12 -w ../networks/Gender/gender_net.caffemodel -o ../networks/Gender/graph python3 $NCS_TOOLKIT_ROOT/mvNCCompile.pyc ../networks/Age/deploy_age.prototxt -s 12 -w ../networks/Age/age_net.caffemodel -o ../networks/Age/graph python3 $NCS_TOOLKIT_ROOT/mvNCCompile.pyc ../networks/AlexNet/NetworkConfig.prototxt -s 12 -w ../networks/AlexNet/bvlc_alexnet.caffemodel -o ../networks/AlexNet/graph
cd ncapi/redist/pi_jessie sudo dpkg -i * cd ncapi/tools ./get_models.sh ./convert_models.sh
5.これで,Caffe modelをNCS用にコンパイルする環境作りと,NCS用にコンパイルしたCaffe modelバイナリ(graphと呼ぶ)の生成が完了しました.(ncapi/networks/Googlenetなどにgraphというバイナリファイルが生成出来ていれば成功です)
② NCS用にコンパイルしたCaffe modelバイナリ(graphと呼ぶ)を実行する環境を作る(Raspbian Jessie)
1.RaspberryPi2用のRaspbian JessieイメージをダウンロードしてDDで書き込みます.ここを参考にしました 2.Raspbian Jessieを起動したらapt-getで環境を最新にしておきます.
sudo apt-get upate sudo apt-get upgrade
3.上記①Caffe modelをNCS用にコンパイルする環境を作るを完了した,ncapiディレクトリ一式を,Raspbian Jessieの実行用環境にフルコピーします.私はWindows環境でTeraTermを使ってssh接続したのちファイルコピーしました.ここを参考に,SCPコマンドを使うとファイルのやり取りが簡単でした. 4.Raspbian Jessie側に,NCS実行環境をインストールします.
cd ncapi/redist/pi_jessie sudo dpkg -i *
5.SDKのstream_inferサンプルを動かす環境をインストールします.これはUSBカメラを使ったSqueezeNetの1000クラス分類デモを実行できます.(Googlenet等も実行可能です)
sudo apt install gstreamer-1.0 sudo apt install python3-gst-1.0 sudo apt-get install gir1.2-gstreamer-1.0 sudo apt-get install gir1.2-gst-plugins-base-1.0
6.RaspberryPiで実行用に,ncapi/py_examples/stream_infer/stream_infer.pyを一行書き換えます.
stream_infer.py
#SINK_NAME="xvimagesink" # use for x86-64 platforms SINK_NAME="glimagesink" # use for Raspian Jessie platforms
7.Movidius NCSとUSBカメラを接続し,stream_infer.pyを実行すると,リアルタイムでカメラ映像のクラス分類が走ります.(SqueezeNetがper50msくらい,Googlenetがper80msくらいで実行できました.クラス分類の精度の方はまぁこんなものなのでしょうか.結構はっきりした物体じゃないと認識できませんね.
cd ncapi/py_examples/stream_infer/ python3 /stream_infer.py
まとめ
- USB型DeepLearningアクセラレータ,"Movidius Neural Compute Stick"をRaspberryPi2で動かしてみました.
- "Movidius Neural Compute Stick"が必要なのはコンパイル済のgraphバイナリを実行するときだけでした(まぁわかれば当たり前ですかね)
- 次は,SDKサンプル以外のCaffe Modelを実行したり,これを使ったガジェット作りに進みたいと思います.
以上