United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

Movidiusで エッジ端末上での深層学習

NCS_d37b02bc950687e638090e36288f7de750d2083d.jpg

Movidius NCS(Neural Compute Stick)を使えば、低電力のエッジデバイスにAIを実装できます。

過去数十年にわたり、人口知能 (AI) への世界の期待は非常におおきなものでした。例えるなら核融合からクリーンエネルギーを生成するのと同等レベルの社会的影響の大きなものと考えられてきました。そして近年のさらなる技術の進歩により、AIはついに非常に多くの実用アプリケーションに応用されるようになりました。

その一方で、なかなか解決できない課題もありました。それは、画像処理などの多くの主要なアプリケーションがサーバ処理型で構成されており、低電力デバイス上でのローカル処理ができないというものです。

この流れを変えたのが、現在インテル 傘下となったMovidius社の、Myriad 2 Vision Processing Unit (VPU)です。この技術により 超低電力でソフトウェアプログラミング可能なマシンビジョンを低予算で実現できるようになりました。

この記事では、最初にMyriad VPUテクノロジー、およびそのSDKについて説明し、低コストの開発とプロトタイピングを可能にするMovidius NCSを使用した実践的な説明を行います。

1Wで100Gflops

Myriad21_a36513c7cc195c1915fb3346e2e6b3ce73377346.jpg

出典: 『Movidius Myriad 2 VPU Product Brief』

Movidius NCS (139-3655) は、約1Wのエネルギー消費量で100Gflops超といった優れたパフォーマンスで画像処理を行うことができます。これを実現するのは、400Gbpsの転送速度の2MBオンチップメモリを中心として12基のVLIW 128ビットプロセッサが統合された、600MHzのシステムオンチップ(SoC)です。

Movidius NCSな機能は、次のとおりです。

  • FP16、FP32、及び8ビット、16ビット、32ビット精度の整数演算をサポート
  • クラウド接続を使用しないリアルタイムオンデバイス推論
  • 既存のCNNモデル又は独自の学習を施したネットワークを展開
  • すべてのデータ通信と給電にホストPCのUSB 3.0ポート1つで対応

USB 3.0にも対応していますが、大抵の場合はUSB 2.0ポートで十分です。パフォーマンスの向上した複数のNCSは、適切なUSBハブを使用してネットワーク化することができます。

Caffeをサポート

深層学習のアプリケーション開発には、Berkeley Artificial Intelligence Research (BAIR) Labの開発したオープンソースのディープラーニングライブラリ Caffe が使えます。Caffeのコンセプトは次のとおりです。

  • 表現: モデルと最適化は、コードではなくプレーンテキストスキーマとして定義されています。
  • 速度: 研究と産業の用途ではいずれも、速度が最先端モデルと大量のデータにとって重要です。
  • モジュール性: 新たなタスクと設定には、柔軟性と拡張性が必要です。
  • オープン性: 科学と応用の進歩には、共通コード・参照モデル・再現性が必要です。
  • コミュニティ: 学術研究・新規プロトタイプ・産業アプリケーションのすべてが、BSD-2プロジェクトでの共同ディスカッション及び開発により、強みを共有しています。

Caffeプロジェクトのサイトでは、Caffeの構造と機能を紹介しています。これらの情報は、AI技術にあまり馴染のない私のようなエンジニアには必見です。理解しておくべきことがかなり多くありました。Caffeは 既に ハードとして Movidius NCSをサポートしているので、既存のニューラルネットワークモデルを活用したサンプルアプリケーションを、すぐに実行し評価することができます。

SDKのインストール

NCS_example031_b6dc86b7d1ac74ed95bfb384e88e9a3386b55ad6.jpg

NC SDKをインストールするには、Ubuntu 16.04を実行しているコンピュータが必要です。他のディストリビューションでも動作する可能性はありますが、これが唯一指定されています。

以下の手順に従って、「Getting Started Guide PDF」 と詳細手順について説明したその他の公式ドキュメントをダウンロードすることをお勧めします。

ダウンロードが完了したら、NC SDKを以下の手順に従ってインストールできます。

$ sudo apt-get update

$ sudo apt-get upgrade

$ tar xvf MvNC_SDK_1.07.07.tgz

$ tar xzvf MvNC_Toolkit-1.07.06.tgz

$ cd bin

$ ./setup.sh

ツールキットと関連する依存関係がインストールされるまで、少し時間がかかる場合があります。セットアップスクリプトにより~/.bashrcファイルが更新され、PYTHONPATH環境変数が適宜設定されます。たとえば、デフォルトのインストール場所がある場合は、行が次のように追加されます。

export PYTHONPATH=$env:"/opt/movidius/caffe/python":$PYTHONPATH

その他のユーザーがSDKを使用できる必要がある場合は、この行を~/.bashrcファイルに追加する必要があります。

binディレクトリ内にあると仮定すると、以下のようにサンプルコードのCaffeモデルをインストールできます。

$ cd data

$ ./dlnets.sh

SDKが最初に展開されたディレクトリに戻れば、APIをインストールできます。

$ cd ../..

$ tar xzvf MvNC_API-1.07.07.tgz

$ cd ncapi

$ ./setup.sh

NCS操作をテストするためにbinディレクトリから実行できるサンプル例は、いくつかあります。

$ cd ../bin

$ make example00

$ make example01

$ make example02

$ make example03

動画ストリームの推論 (infer) の例

coffee_mug1_63fc1f088f0459a8af395ba3ceb5d5c611083cf9.jpg

Python stream_inferの例

ちゃんと 100%の可能性で coffee mug と言い当てました。

次に、さらに面白い例について説明します。これには動画入力デバイスが必要なため、Linuxサポートが優れているLogitech C920 Full HD Webcam (125-4272)を使用することにしました。

$ cd ../ncapi/tools

$ ./get_models.sh

$ ./convert_models.sh

$ cd ../py_examples/stream_infer

$ python3 stream_infer.py

shower_cap1_f06ff3be07988e14156d30a3bb279ef114eebc22.jpg

なんと、今度は 60.60%の確率でshower cap(シャワーキャップ)と表示されてしまいましたw。でも、間違っていることを非難しないようにしましょう。Movidius NCSには荷が重過ぎましたが、CNNを使用したため、なんとか推論できました。公平を期するために言えば、ある意味当然です。どのようなケースでも、上記のように、コーヒーマグでははるかに良い推論が行われ、他の物についても同様に行われた例を見ることがあります。

ここで重要なのは、AIが推論を行う速度であり、使用されたエネルギーです。確かにとても高速であると思います。

stream_infer.pyの例に採用されたデフォルトモデルは、SqueezeNetと言います。これは、LSVRC-2010 トレーニングセットの130万件もの高解像度の画像を1,000クラスに分類するようトレーニングされた、4年ほど前のAlexNetというモデルと同等の精度を達成するCNNです。ただし、SqueezNetは、AlexNetよりも510倍小型のモデルでこれを達成したと言われています。

stream_infer.pyは、SqueezeNet又はAlexNetを使用して設定できるため、NCSでのパフォーマンスを比較できます。これは、Pythonファイルのほぼ最上位のコメント行(又は非コメント行)です。GenderやGoogleNetモデルでも、同様に設定できます。たとえば以下のように設定します。

NETWORK_IMAGE_WIDTH = 224 # the width of images the network requires

NETWORK_IMAGE_HEIGHT = 224 # the height of images the network requires

NETWORK_IMAGE_FORMAT = "RGB" # the format of the images the network requires

NETWORK_DIRECTORY = "../../networks/GoogLeNet/" # directory of the network

stream_infer.pyの例では、NETWORK_DIRECTORYの「graph」、「stat.txt」、及び「categories.txt」ファイルを検索します。AlexNetとSqueezeNetのグラフファイルのサイズを比較すると、以下のようになります。

graphSize1_a2d9b802cedf8eb33b3132a47e8551baf5d499dc.jpg

バイナリグラフでは510倍ほどの差はありませんが、サイズに大きな違いがみられます。

ネットワークのコンパイルとプロファイリング

CompileProfile1_d4b9897b3546f58da417bd4049a2d2c3a6317eb1.jpg

出典: 『Movidius NCS Tookit Documentation』

新しいCNN (たとえば既存のCNNでカバーされていない画像タイプの分類に用いられるものなど)は、適切なフレームワークを使用して設計され、トレーニングされています。以降のネットワークは、SDKの一部として提供されるNCSツールキットを使用して、グラフファイルへのコンパイルやプロファイリングを行えます。

組み込みプラットフォームがターゲット

APIは最初にツールキット (Ubuntu 16.04 x86-64システム)と同じコンピュータにインストールする必要がありますが、ライブラリやヘッダなどは、その後別のプラットフォームにインストールできます。さらに、実際には、Raspbian Jessieのパッケージセットは、SDKとともに提供されます。つまり、これらと依存関係をRaspbianリポジトリからインストールすると、stream_infer.pyの1行のみが変更され、この例をRaspberry Piで実行できるようになります。

一般的なアプリケーション

MotoMod1_fcb7a250f38e1b16a238283f2e30c0cf282f8400.jpg

Movidius VPUは、Motorola Moto Modで4KのVRピクセルを処理することを選択しました。出典: movidius.com

マシンビジョンアプリケーションには、以下のようなものがあります。

  • ドローンやロボット
  • 拡張現実 (AR) や仮想現実 (VR)
  • ウェアラブル
  • スマートセキュリティ

Myriad VPUをセキュリティカメラに搭載して、たとえば、私道に駐車された車両を識別したり、窃盗犯とペットを区別したりする方法は容易に想像できます。同様に、回避してほしい場所や特定の目標を見つけ出してほしい家庭用ロボット(掃除機などの)やドローンアプリケーションにも、多くの価値を追加することができます。これらは単にテクノロジーの用途の一部にすぎず、さらに多くの用途があることは明らかです。

第一印象

Movidiusテクノロジーは、すでに多くの実際のアプリケーションでAIを実用化しており、スマートフォンのアドオンやドローンのSense-and-Avoid (検出及び回避)システムの4K VRピクセル処理をはじめとした最先端の製品に引き続き使用されています。Neural Compute Stickの可用性が意味するのは、誰もがすぐにMyriad 2 VPUを使用してテストを開始できることであり、既存の組み込みプラットフォームに強力な深層学習機能を簡単に追加できることです。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin