Movidius NCSと各種フレームワークの学習モデルを使って自己完結型の推論実行環境を作ってみます。
NCSでは以下のOSとフレームワークがサポートされています。
OS:
Ubuntu 16.04(x86_64 コンピュータ or VirtualBox)、Stretch desktop(Raspberry Pi 3 Model B)
(現RaspbianはBusterです。Stretchのイメージ->Lite、Full)
フレームワーク:
TensorFlow、Caffe
現時点(2018/09/07)のRaspbian Stretch Desktop環境でプレインストールされているPython3のバージョンは3.5.3でした。ラズベリーパイの環境チェック いろいろ
ラスパイのセットアップ時にswapの拡張などを行っておいてください。
ラズパイ3に環境を構築
TensorFlowやCaffeの依存ライブラリー・パッケージをインストールしておく
1 2 3 4 |
$sudo apt-get install libblas-dev liblapack-dev python3-dev libatlas-base-dev gfortran python3-setuptools $sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler $sudo apt-get install --no-install-recommends libboost-all-dev $sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev |
OpenCV 3.4をインストール
$wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.0-20180115.1_armhf.deb
$sudo apt install -y ./libopencv3_3.4.0-20180115.1_armhf.deb
$sudo ldconfig
Tensorflow 1.4.1 for Python3.5.3をインストール
$sudo apt-get install libblas-dev liblapack-dev python3-dev libatlas-base-dev gfortran python3-setuptools
$sudo pip3 install https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.4.1/tensorflow-1.4.1-cp35-none-linux_armv7l.whl
$sudo apt-get install python3-h5py
注:numpyはデフォルトでは1.12が入っていますが、1.13にアップグレードされます。
注:2019/08/19時点のTensorflowの最新は1.9
sudo pip3 install https://www.piwheels.org/simple/tensorflow/tensorflow-1.9.0-cp35-none-linux_armv7l.whl
確認
Movidius NCS SDK(ncsdk)をインストール
サイトには2つのバージョンが存在します。1.12.00.01と2.05.00.02。
ncsdk2は複数のgraphバイナリーがサポートされるようです、APIも大幅変更されたみたいで1との互換性はないそうです。
できたてみたいで不安なので旧バージョン(v1)でやってみます。
1.12.00.01をGitHubから取ってきて、シェルスクリプトでインストール。
$wget https://ncs-forum-uploads.s3.amazonaws.com/ncsdk/ncsdk-01_12_00_01-full/ncsdk-1.12.00.01.tar.gz
$tar zxvf ncsdk-1.12.00.01.tar.gz
$cd ncsdk-1.12.00.01
$./install.sh
2019/07/16現在、NCSDK1のインストール方法が変更になっていました。
gitクローンしてインストールします。
1 2 3 |
git clone https://github.com/movidius/ncsdk.git cd ncsdk make install |
OpenCV用のインストール用シェルスクリプトもありますが、済んでるのでパス。
(スクリプトでは3.3.0がインストールされるようです、不具合が出たらその時点で対処しましょう)
約1時間くらいでインストール終了。
なんかする時は新しくターミナルを開いて、そこで実行してね……だそうです。
exampleを実行するには、先にビルドしておきます。
実行にはCaffeも使いますので、これも先にインストールしておく必要があります。
1 |
make examples |
TensorFlowサンプル実行
$ cd ncsdk-1.12.00.01/examples/tensorflow/inception_v3
$ cd /home/pi/ncsdk/examples/tensorflow/inception_v3
$python3 run.py
NCSを挿してないと文句を言われます、当然ですが。
98.8%位の確率で「electric guitar」、ほぼ正解ですね。
Movidius NCSは大きいので、直挿しすると他のポートがすべて使えなくなります。
延長ケーブルを使いましょう。
消費したディスク容量
before
after
1.5GBくらい増えてます。
Caffe
ncsdkのついでにインストールされるようです、多分。
1 |
$sudo apt-get -y install caffe-cpu |
でも、このままだとCaffeはnumpyのバージョン違いで動かないと思います。
numpyをアップグレードします。
1 |
$pip3 install --upgrade numpy |
1.15.1にアップグレードされますが、TensorFlowは問題なく動きます(^^)。
graphバイナリーファイルの作成
Movidius NCSで推論を実行するには、TensorFlowかCaffeの学習済みモデルをNCS用のgraphバイナリーに変換する必要があります。
graphバイナリーの作成や使った例などは以下を参照してみてください(Caffeを使った例)。
YOLOネットワークモデルをPC+NCSで実行してWebカメラで物体検出してみました
ここではUbuntuの環境で実行していますがRaspbianでも同様に実行できます。
graphバイナリーというのはこういう86MBほどのファイルです。
以下を実行すれば、ラズパイのUSBカメラでもリアルタイム(?)物体検出ができます。
$python3 /home/pi/YOLO/yoloNCS-master/py_examples/object_detection_app.py
他の学習済みモデルの場合は
学習済みモデル
学習済みモデル ->TensorFlowかCaffeのモデルへ変換 ->NCS用graphバイナリーファイル作成
学習済みモデル
・
・
・
Darknetなどのモデルの変換についてはこのページ参照
モデル間での相互変換(クロス・フレームワーク・ソリューション…..というそうです)。
MMdnn (日本語があやしいです。開始V1とあるのはInceptionV1のことです)
Next
カメラモジュールと連携してリアルタイム物体検出ができるのか?
(OpenCVとの相性でWebカメラなら簡単にできるようだが…..)
転移学習/ファインチューニングの独自モデルでやれるのか?
Appendix1
Neural Compute Application Zoo (NC App Zoo)
Tensorflow detection model zoo
NCSをIoTプラットフォームの頭脳に組み込んでみる
Leave a Reply