ニューラルネットワークにIntel Movidiusを使用する

はじめに



写真、ビデオ、テキストを分析するためのディープニューラルネットワークを開発しています。 先月、プロジェクトの1つに非常に興味深いギズモを購入しました。

Intel Movidius Neural Compute Stick

Intel MNCS



これは、ニューラルネットワークコンピューティング専用のデバイスです。 実際、ニューラルネットワーク用に研ぎ澄まされた外部ビデオカードは非常にコンパクトで安価です(〜$ 83)。 Movidiusを使用した最初の印象を共有したいと思います。 猫の下で興味を持っている皆にお願いします。



デバイスの計算能力



コンピューティングに関しては、ニューロンは非常に貪欲です。ニューロンはトレーニングにGPUを必要とし、実際のタスクで使用するにはGPUまたは強力なCPUも必要です。 Movidius NCSでは、たとえばRaspberry Pi、DJI Phantom 4、DJI Sparkなど、元々このために設計されていないデバイスでディープニューラルネットワークを使用できます。 予測段階(事前トレーニング済みネットワークの推論)についてのみ話している:Movidiusでのニューラルネットワークのトレーニングはまだサポートされていません。



チップのパフォーマンスは約100ギガフロップス、10 ^ 9 FLOPSです(これはおおよそ90年代初期のトップスーパーコンピューターのレベルに相当し、現在は約数百ペタフロップス、10 ^ 15です)。



参考:FLOPSは、1秒あたりの浮動小数点オペランド(FP)で実行される計算操作または命令の数です。 トピックを深くするために、Intelの記事をお勧めします



ハードウェアはMyriad 2チップに基づいており、Myriad 2構成には12個の特殊なプログラム可能なベクトルプロセッサが含まれています。 SoCコンポーネントは、最小限のレイテンシで動作する高速内部接続に接続されます。 Myriad 2は、モバイルデバイスのアプリケーションプロセッサと共にコプロセッサとして、またはウェアラブルまたは組み込みの電子デバイスのスタンドアロンプ​​ロセッサとして配置されています。



無数2

無数の2プロセッサ自体



さて、フラッシュドライブのフォームファクター(Neural Compute Stick)では、たとえばRaspberry Piと一緒に、ドローンにニューラルネットワークを埋め込むために使用できます。



NCSで最初のプログラムのインストールと起動を開始しましょう



何が必要ですか





準備する



MovidiusをUSB 3.0コネクターに接続します。 次に、コンソールに書き込みます。



$ git clone https://github.com/movidius/ncsdk.git $ cd ncsdk $ sudo make install
      
      





これらのコマンドはインストールします:





また、PYTHONPATHにMovidiusのPythonライブラリへのパスを追加します。



例を実行する



同じフォルダーで、コマンドを実行して例をビルドします。



 $ make examples
      
      





ImageNetでトレーニングされたinception_v1の実装である標準的な例を準備するには、次のコマンドを実行します。



 $ cd examples/tensorflow/inception_v1 $ make all
      
      





最後のコマンドは、グリッドの説明と既にトレーニングされた重みを使用してバイナリグラフをコンパイルし、Myriad 2 VPUで実行できます。



次に、 テストスクリプトrun.pyを実行します。 スクリプト全体で起こることを簡単に説明します(スクリプトの一部は省略されています)。



 #  NCS, numpy, sys  opencv from mvnc import mvncapi as mvnc import sys import numpy import cv2 #/  / #     graph_filename = 'graph' #      image_filename = path_to_images + 'mouse.jpg' #  NCS-,     , #     devices = mvnc.EnumerateDevices() if len(devices) == 0: print('No devices found') quit() device = mvnc.Device(devices[0]) device.OpenDevice() #   ,   TensorFlow #(  Caffe) with open(path_to_networks + graph_filename, mode='rb') as f: graphfile = f.read() #/  / #      graph = device.AllocateGraph(graphfile) #         img = cv2.imread(image_filename).astype(numpy.float32) dx,dy,dz= img.shape delta=float(abs(dy-dx)) if dx > dy: #crop the x dimension img=img[int(0.5*delta):dx-int(0.5*delta),0:dy] else: img=img[0:dx,int(0.5*delta):dy-int(0.5*delta)] img = cv2.resize(img, (reqsize, reqsize)) img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #  for i in range(3): img[:,:,i] = (img[:,:,i] - mean) * std print('Start download to NCS...') graph.LoadTensor(img.astype(numpy.float16), 'user object') #  output, userobj = graph.GetResult() #        NCS- top_inds = output.argsort()[::-1][:5] print(''.join(['*' for i in range(79)])) print('inception-v1 on NCS') print(''.join(['*' for i in range(79)])) for i in range(5): print(top_inds[i], categories[top_inds[i]], output[top_inds[i]]) print(''.join(['*' for i in range(79)])) graph.DeallocateGraph() device.CloseDevice() print('Finished')
      
      





サンプルを収集したら、コンソールでmake allコマンドを入力しました。その後、コンソールに有用な情報が表示されました。たとえば、 Detailed Per Layer Profileを使用して、データがネットワークの各レイヤーを通過する速度を確認できます。 デバッグと最適化に役立ちます。



スクリプトを実行します。



 $ python3 run.py
      
      





テストイメージはNCSにアップロードされ、Inceptionを通過し、認識結果がコンソールに表示されます(ImageNetデータセットの1000 + 1カテゴリにわたる確率分布)。



コンソール出力
 Number of categories: 1001 Start download to NCS... ******************************************************************************* inception-v1 on NCS ******************************************************************************* 674 mouse, computer mouse 0.99512 663 modem 0.0037899 614 joystick 0.00031853 528 desktop computer 0.00021553 623 lens cap, lens cover 0.0001626 ******************************************************************************* Finished
      
      







テスト画像
画像 この写真をMovidiusにアップロードし、Inceptionを介して運転しました


〜99%の確実性を備えたネットワークは、コンピューターのマウスが画面にあると信じていることがわかります(私たちのプロンプトのおかげです:))。2番目に0%に近い確信があるのはモデムなどです。 グリッドは正しいので、このデバイスで正常に起動された最初のニューロンをおめでとうございます!



おわりに



最後に、デバイスの主な利点と欠点をリストしたいと思います。



まず、悪いニュース:





良いニュース:





画像

IntelはMovidiusを使用してコンピューティングを高速化することを提案しています



もちろん、このデバイスにはアナログがあります。



それらの1つ、そしてこれまでで最も有望なのは、生産性が28倍、エネルギー効率が90倍のGyrfalcon Technology Laceliです。 購入の唯一の障害は、デバイスがまだ市場に参入していないことです。



長い間市場に出回っている別の競争相手は、 NVIDIA Jetson TX2です。 違い:





興味があれば、Jetson TX2のニューラルネットワークの使用について、近い将来に別の記事を作成します。 ご清聴ありがとうございました



PS Intelは、Intel Movidius Neural Compute Stickのニューラルネットワーク最適化コンテストの開始発表しました。 登録は1月26日、競技会の終わり-3月15日まで。



All Articles