Raspberry PI3とMovidius Neural Compute Stickを使用して、リアルタイムでグリッド外のオブジェクトを検出

これを進める前に、Movidius Neural Compute Stick(NCS)を使用して、ラズベリーの画像分類に関する以前のチュートリアルをご覧になることをお勧めします。(

Getting Started 3: Movidius Neural Compute Stick with Pi 3 Raspbian Stretch Desktop ( Image Classification ))

Movidius NCSを搭載したRaspberry Piでオブジェクト検出を実行するには、3つの手順が必要です。

開発ホストへのMovidius SDKのインストール(Fresh Installed Ubuntu 16.04);
SDLを使用してモデルのグラフファイルを生成します。そして
リアルタイムのオブジェクト検出を実行するPythonスクリプトの開発。
まず、NCSワークフローを示す下の図を見てみましょう。

f:id:OliverSpace:20190812201154p:plain


Movidius Neural Compute Stickのワークフロー(クレジット:Intel

A.トレーニング:これには2つの方法があります。 1つは、事前に訓練されたTensorFlow / Caffeモデルを使用することです。 TensorFlow / Caffeを強力なGPUで使用して、ネットワークをトレーニングすることもできます。

B.プロファイリング、チューニング、コンパイル:このステップでは、NCS SDKツールチェーンを使用してグラフファイルを生成します。 NCSはこのファイル形式のみをサポートしています。

C.プロトタイピング:Raspberry Stretch(Debianベース)を搭載したRaspberry Pi 3は、グラフファイルとNCSを使用するようになりました。 NCS APIは、グラフファイルをNCSに送信するために使用され、リアルタイムのビデオ予測を表示します。

このチュートリアルの要件:

A. Raspberry Pi、Piカメラ

B. Movidius NCS

C. Ubuntu 16.04を使用したスタンドアロンLinuxマシン

Raspberry PiとMovidius NCSを使用してオブジェクトを検出する実用的なプロトタイプを作成するために従う手順の完全な説明を次に示します。

1. Movidius NCS SDK(Ubuntuシステム)のインストール
I. Ubuntu 16.04の新規インストールまたはVirtual-Boxインストール

NCS SDKのインストールを選択したUbuntuシステムは、Movidiusプラットフォームでの開発専用に使用する必要があります。望まないのは、他の仮想Python環境またはOpenCVがインストールされ、他のアプリケーションで使用されていることです。これにより、ライブラリが不安定になり、PYTHONPATHシステム変数との競合が発生します。

このため、Ubuntuバージョン16.04の新規インストール、またはMovidius開発にのみ使用されるVirtual-boxシステムのインストールから始めるのが最善です。両方の方法の手順を以下に示します。

A. Ubuntu 16.04の新規インストール:(こちらをフォローしてください

B. VirtualBox Machine VMへのUbuntu 16.04のインストール:(こちらをご覧ください

VMメソッドを使用すると、いくつかの欠点が生じる可能性があります。他のアプリケーションが実行されているVMを使用すると、VMを介してGPUにアクセスできなくなります。別の考慮事項は、USBパススルーを実装する必要があることです。 VMはパススルーなしではハードウェアに直接アクセスできないため、NCSにアクセスできる方法を提供する必要があります。

USBパススルー設定については、次のリンクに従ってください:VMware USBパススルー

NCSを仮想マシンに接続したままにするには、USB2およびUSB3デバイスフィルターを作成する必要があります。これを行うには、「新しいUSBフィルターを追加」をクリックし、名前とベンダーIDに以下の形式を使用します。

  1. 名前:Movidius1、ベンダーID:03e7、その他のフィールド:空白
  2. 名前:Movidius2、ベンダーID:040e、その他のフィールド:空白

いずれかの方法を使用してUbuntu 16.04のインストールを完了したら、システムを更新する必要があります。次のコマンドを使用します。

sudo apt-get update && sudo apt-get upgrade


II。 UbuntuシステムでのNCS SDKのインストール

インテルは、NCS SDKをインストールする簡単なプロセスを作成しました。端末に次のコマンドを入力すると、ジョブが完了します。

sudo apt-get install git
cd〜
mkdir ncsproject
cd ncsproject
git clone https://github.com/movidius/ncsdk.git
git clone https://github.com/movidius/ncappzoo.git
cd〜/ ncsproject / ncsdk


インストールする
このプロセスは、ネットワークダウンロード速度とホストコンピューターの容量に基づいて、15〜30分かかります。

f:id:OliverSpace:20190812203021p:plain

ホストコンピューターへのMovidius SDKの正常なインストール(Ubuntu 16.04)

2. NCS接続の確認(デスクトップ/ラップトップ上)
オペレーティングシステムがNCSを認識していることを確認するには、ターミナルを開いてdmesgと入力します。成功した場合、次のような画面が表示されます。

f:id:OliverSpace:20190812203046p:plain

OSによるNCSの正常な認識

3. SDKのテスト(デスクトップ/ラップトップ)
ビルド済みの例をテストするには、次のコマンドを使用します。

cd ~/ncsproject/ncsdk
make examples


これには最大5分かかります。その間、メイクファイルが実行され、Githubからモデルとウェイトがダウンロードされます。それが完了すると、mvNCCompileプロシージャが実行されます。これについては、次のセクションで詳しく説明します。

APIおよびNCS接続が正しく実装されていることを確認する最終テストは、次のコマンドを使用して、事前に作成されたhello_ncs.pyスクリプトを実行することです。

cd ~/ncsproject/ncsdk/examples/apps
make all
cd hello_ncs_py
python hello_ncs.py
Hello NCS! Device opened normally.
**
Goodbye NCS! Device closed normally.
**NCS device working.

4.カスタムCaffe / Tensorflowモデルからグラフファイルを生成(デスクトップ/ラップトップ上)
IntelのSDKを使用すると、カスタムグラフを作成するための合理化されたプロセスがあります。 CaffeとTensorFlowのサポートを提供するmvNCCompileツールを使用します。

Caffeには次のコマンドライン引数を使用します。

mvNCCompile network.prototxt [-w network.caffemodel] [-s max_number_of_shaves] [-in input_node_name] [-on output_node_name] [-is input_width input_height] [-o output_graph_filename]


Tensorflowを使用している場合、これは次のコマンド形式です。

mvNCCompile network.meta [-s max_number_of_shaves] [-in input_node_name] [-on output_node_name] [-is input_width input_height] [-o output_graph_filename]


network.prototxt:Caffeネットワークファイルのパス/ファイル名

network.meta:TensorFlowネットワークファイルのパス/ファイル名

-w network.caffemodel:caffemodelファイルのパス/ファイル名

-s MaxNumberOfShaves:ネットワークレイヤーに使用するSHAVE(1、2、4、8、または12)(デフォルト値は1です。この値を使用すると、SHAVEを少なくすることで電力を節約できます。)

-in InputNodeNodeName:ここでは、prototxtファイル内の名前と一致する名前の入力レイヤーを指定できます)

-on OutputNodeName:このオプションにより、ユーザーは代替ネットワークエンドポイントを選択できます。デフォルトでは、出力テンソルを介してネットワークが処理されます。

-is InputWidth InputHeight:入力形状は重要であり、ネットワークの設計に一致する必要があります。

-o OutputGraphFilename:ファイル/パスが指定されていない場合、「graph」というデフォルトのファイル名を使用しますが、これはあまり説明的ではありません。作業ディレクトリにあります。

NCSのバッチサイズとチャネル数は、それぞれ1と3に設定されます。このチュートリアルの目的のために、CaffeでトレーニングされたSingle Shot Detector(SSD)を備えたMobileNetニューラルネットワークを使用しています。 Adrian Rosebrockは、チュートリアルネットワークでchuanqui305によってMS-COCOデータセットに関するトレーニングを受けたこのネットワークについて言及しています。カフェモデルをMovidius NCSで使用できるグラフファイルに変換するには、次のコマンドを使用します。

mvNCCompile models / MobileNetSSD_deploy.prototxt \
-w models / MobileNetSSD_deploy.caffemodel \

-s 12 -is 300 300 -o graph


5.リアルタイムオブジェクト検出用のPythonスクリプト(Raspberry Piの場合)
サンプルの使用方法の詳細については、Githubリポジトリhttps://github.com/Geo-Trackers/Movidius-NCS-RealTime-Object-Detectionにアクセスしてください。

(img 4)

NCSを使用してPiでスクリプトを実行中の予測結果

Thank you for the work of Suman Ghimire

Pixel Labsの共同創立者(https://www.pixelnetworks.net/pix-agri