Raspberry Piで実現させるエッジAIテクノロジー

AI/Digital Signage/IoT /

Raspberry Piはイギリス生まれのカード型CPUボードである。当初は教育用として開発されたが、教育目的だけではなく、ホビー、研究、産業用途などに利用され、通算での出荷実績は全世界で1,000万台を超えている。最近では、産業用途利用がその出荷の半数以上を占めているとアナウンスされている。電源もケースも無いPCB(基板)単体での製品とはいえ、35ドル程度と低価格であること、全世界のエンジニアがプログラムや実績をWebで公開していること、Linuxで動作するここと、センサーや外部デバイスを簡単に接続できるGPIO(汎用入出力)があること、多くの書籍が出版されていること、CPUパワーもそこそこであること、などからIoTデバイスとしてデファクトスタンダードになっている。

あらゆる場所においてIoTのゲートウェイとして利用できるとなると、最近のトレンドから、機械学習(AI)のエンジンをそこで動かせないかというリクエストが出てくるのは当然である。

このような例を考えてみよう。たとえば、店舗の玄関にカメラが設置されており、入店してくる人だけを判断して来客数をカウントして、そのログをサーバーに送信するシステムがあったとする。入店者の性別と年齢を判断し(多人数、その他の難しいことはここでは一旦無視する)、エントランスのデジタルサイネージのコンテンツを即座に切り替え、性別、年齢などにあった表示をする仕組みにしたい。その性別、年齢の判断にAIを使えないか?、というリクエストである。

カメラで撮った画像をネットワークでサーバーに送信し、答えをネットワーク経由でもらっていては時間的に間に合わないし、ネットワークが不安定なことも多い。また人物の画像データをネットワークに通過させることはコンプライアンス上厳しいなどの条件から、ローカルにあるデバイスだけで判断させたいという結論になる。

このようにサーバーサイドで判断するのではなく、現場で判断できるシステムを「エッジコンピューティング」と呼び、そこでAIを利用する場合は、エッジAIシステムなどと呼んでいる。

こうした仕組みを、安価なRaspberry Piを使ってシステムを構築できるのである。性別などをシステムに学習させるのは高速のCPUGPUを搭載したコンピュータで行い(最低でも数千枚の画像処理と機械学習が必要になり、処理に何日もかかる場合もある)、学習したパラメータだけをRaspberry Piに転送するのである。

20188月、Googleは機械学習のライブラリであるTensorFlowRaspberry Piへの正式サポートをアナウンスした。Raspberry Pi上で簡単に機械学習のライブラリを動作させることができるわけだ。比較的簡単な演算で済むような場合はRaspberry Piでもそれなりの速度で動作させることが可能だが、この例の場合のようなリアルタイムで流れてくるカメラ画像から人間を特定し、かつ年齢などを判断できなければならないケースでは、Raspberry PiTensorFlowの原理的動作は可能だが、実用速度では処理できない。

ここで登場するのが、外付けの高速演算ユニットである。

Intel® Movidius™ Neural Compute Stick

ニューラル スティック Movidius NCS

Movidius Neural Compute Stick(Movidius NCS)はインテルのVPUVision Processing Unit)を搭載したUSB接続の外付け演算ユニットである。価格は70ドルで、見た目はUSBメモリーと変わらない。画像処理基本ライブラリ(フィルター処理などの基本画像処理)をハードウェアアクセラレータで処理でき、SHAVEと呼ばれる高速演算ユニットを12個搭載している。20188月現在で、機械学習バックエンドのライブラリはTensorFlowCaffeに対応している。シンプルに説明すると、画像処理をディープラーニングで行う場合、学習は高性能のマシンで行い、その学習データを非力なエッジコンピュータに送り込み、推論(判断)だけさせる場合に、その推論のための演算を非力なCPUではなく、このユニットを使えば実用速度を得られるとのコンセプトである。

Raspberry Pi単体でカメラから得た画像を画面にリアルタイムで表示し、学習済みのオブジェクト物体を検出し、枠とその確率を提示するというCaffeのサンプルプログラムを動作させると、56秒で一回検出できるかどうかという処理速度になってしまう。オブジェクトが複数ある場合は更に遅くなってしまう。

ところが、Movidius NCP1つ使用すると(なんとRaspberry PiではMovidius NCSを4個まで並列動作させることができる!)下の動画のように、おおよそ1秒ごとに画像の判断ができる。この動画では、デモ用のために検出状態を表示しており、これがオーバーヘッドになって処理が遅くなっている。実用時には検出状態を表示する必要がないため、これよりも高速に処理できる。

こうした機械学習を利用したシステムの応用分野はますます広まっていくだろう。だが、現場には「ネット依存できない」「軽量のマシンで処理させたい」「PCでは設置場所スペースの問題や堅牢性」「メンテナンス性に問題がある」など、エッジでの処理を要求される場面が多い。オープンソースソフトウェアによる機械学習の民主化と、Movidius NCSのようなデバイスは、不可能と思われていたエッジコンピューティングの可能性を大きく飛躍させることになるだろう。

Movidius NCSの技術面の補足

現在のところ、提供されているライブラリではシステムに学習をさせるときには、Movidius NCSを利用することはできない。推論のみに絞られているようだ。また、TensorFlowのすべての機械学習ライブラリに対応しているわけではなく、CNNに特化しているようである。

ちなみに、画像処理ライブラリは大分類で20個のAPI、小分類でいうならば300個のAPI群をハードウェアアクセラレータで処理できることになっている。OpenCVのライブラリのかなりの量をハードウェアで処理できる。しかし、現在のライブラリには、これらのエントリーはサポートされていない。サンプルでもOpenCVを画像の前処理に利用している。一部の記事には、ハードウェアアクセラレーションを使っているので速い、と記載されているが、これは誤りだ。少なくともサンプルレベルではこれらは利用できない。

汎用の行列計算のライブラリなども存在しておらず、TensorFlowCaffeで画像処理を行う以外には応用範囲は狭いものになっている。搭載チップのMyriad2MDKを入手すればこれらを自作することは可能かも知れないが、大量のライセンスを契約しないと入手できないようだ。

もし、numpyscipy(Pythonで利用される数値計算ライブラリ、AI開発では必須であり、デファクトである)などのライブラリにMovidius NCSで処理できるバージョンが開発されたならば、エッジAIの世界はもっとすごいことになると思うのだが、どなたか挑戦されている方はいないのだろうか。