低コストモジュールおよびMicroPythonを使用して、AIベースのビジョン/ヒアリングデバイスを迅速に構築
DigiKeyの北米担当編集者の提供
2019-08-01
スマートコネクト製品の需要の高まりに対応するため、機械学習(ML)などの人工知能(AI)を用いた方法に開発者の注目がますます集まっています。ただし、ハードウェアの選択の難しさに直面することもしばしばあります。設計はコスト効率の良い汎用プロセッサをベースにすることができますが、それでは複雑なアルゴリズムに対する性能が十分ではありません。また、高性能な専用ソリューションを使用することもできますが、設計コストや複雑さが増してしまいます。
しかし、現在ではこの他の選択肢も登場しています。この記事では、Seeed Technologyが提供するよりシンプルでコスト効率の良い代替オプションについて説明します。このオプションにより、開発者はなじみのあるMicroPythonプログラミング言語を使用して、AIベースの高性能ソリューションを展開できます。
機械学習アプローチ
機械学習アルゴリズムの成功は、幅広いアプリケーションにおいて物体検出および音声認識のより効果的なアプローチを探していた開発者の注目を集めました。これらのアルゴリズムの中でも、畳み込みニューラルネットワーク(CNN)は、マシンビジョン/ヒアリングアプリケーションに必要な高精度の認識を実証しました。その結果、CNNおよび同様のディープニューラルネットワーク(DNN)は、パーソナル電子機器、ウェアラブル、およびモノのインターネット(IoT)の設計においてますます応用されるようになりました。
CNNの推論要件があまり厳しくないアプリケーションでは、開発者は、単一命令多重データ処理(SIMD)アーキテクチャおよびデジタル信号処理(DSP)拡張機能を備えた汎用プロセッサ上で実行されるニューラルネットワークソフトウェアライブラリを使用して、実績のあるソリューションを実装できます(「Raspberry Piによる機械学習アプリケーションの構築」を参照)。
要件がより厳しい場合は、機械学習アルゴリズムの加速化に対応した高性能DSPブロックを組み込むフィールドプログラマブルゲートアレイ(FPGA)を使用して、CNNベースの高性能設計を構築できます(「FPGAを使用した機械学習による高性能組み込みビジョンアプリケーションの構築」を参照)。
一般的に、プロセッサベースの機械学習設計の実装はFPGAベースの機械学習設計の実装よりもシンプルですが、CNNモデルの数学的な複雑さにより、プロセッサベースのソリューションの推論が減速する傾向があります。FPGAベースのソリューションは主な処理段階のハードウェア実装を使用して推論性能を高速化できますが、開発要件によって、最適化されたソリューションを迅速に実装するのが難しくなる場合があります。
Seeed TechnologyのSipeed MAIX-I 114991684モジュールにより、開発者は、スマート製品やエッジコンピューティングデバイスにおいて高性能CNN推論ソリューションの展開を高速化できる代替ソリューションを活用できます。
高性能CNN処理モジュール
MAIX-1モジュールは、高性能デュアルコアプロセッサ、Espressif SystemsのESP8285 Wi-Fiマイクロコントローラ、WinbondのW25Q128FW 128メガビット(Mbit)シリアルフラッシュメモリ、電圧レギュレータ、およびIPEXアンテナコネクタを組み合わせたものです。ワイヤレスバージョンであるSipeedのMAIX-I 114991695モジュールには、ESP8285マイクロコントローラが搭載されていません。このデュアルコアプロセッサは、幅広いアプリケーションワークロードを加速化するよう設計されており、浮動小数点ユニット(FPU)、CNNモデル用アクセラレータ、オーディオ処理、暗号、および高速フーリエ変換(FFT)計算を備えた64ビットRISC-Vプロセッサのペアを内蔵しています(図1)。
図1:Seeed TechnologyのMAIX-Iモジュールは、ワイヤレスマイクロコントローラ、フラッシュメモリ、DC電圧レギュレータ、およびIPEXアンテナコネクタを、畳み込みニューラルネットワーク(CNN)処理などの機能を実現する高性能デュアルコアプロセッサおよびアクセラレータと組み合わせたものです。(画像提供:Seeed Technology)
このデュアルコアプロセッサは、8Mバイトのスタティックランダムアクセスメモリ(SRAM)および128Kビットのワンタイムプログラマブル(OTP)メモリに加えて、液晶ディスプレイ(LCD)ポートやビデオカメラ用デジタルビデオポート(DVP)などの幅広い一連のインターフェースを内蔵しています。プロセッサのフィールドプログラマブルIOアレイ(FPIOA)マルチプレクサを使用して、使用可能な48の汎用IO(GPIO)ポートに255の内部機能をマッピングできます。
プロセッサのアクセラレータと内蔵機能は、一般的なスマート製品設計の広範な要件に対応しています。たとえば、オーディオプロセッサユニット(APU)は、最大8個のマイクロフォンをサポートし、独自の専用512ポイントFFTアクセラレータを内蔵しています。これらのAPU機能を使用するだけで、開発者はマイクロフォンアレイを効率的に使用して、スマート製品の音声インターフェースで使用されるオーディオビームフォーミングの指向性ピックアップを実装できます。キーフレーズウェイクアップなどの音声インターフェース機能を実現する場合は、APUからの事前処理済みオーディオ出力を使用して、プロセッサの内蔵CNNアクセラレータを駆動できます。
CNNアクセラレータ
Sipeed MAIX-Iモジュールのすべての機能の中で最も際立っているのは、モジュールのデュアルコアプロセッサに内蔵されたCNNアクセラレータです。「KPU」(カーネル処理ユニット)と呼ばれるニューラルネットワークプロセッサは、CNNの基礎となる個々のカーネル機能の処理を高速化するよう設計されており、CNNモデルの個々のレイヤを構成する畳み込み機能、バッチ正規化機能、アクティブ化機能、およびプーリングカーネル機能をハードウェアに実装します(「すぐに入手可能なハードウェアおよびソフトウェアを使用して機械学習を開始する」を参照)。
これらの機能により、CNNを使用して音声インターフェースで音声アクティベーションフレーズを認識したり、ビジョンベースのアプリケーションで物体を検出/分類したりする低電力設計を実装できます。実際、KPUはプロセッサの内蔵SRAMを使用して、5.9Mバイトの固定小数点CNN推論モデル、または11.8Mバイトの事前に量子化された浮動小数点モデルによるリアルタイムの推論を実行できます。たとえば、マシンビジョンアプリケーションでは、KPUはスマート製品の顔/物体検出で使用される比較的小さな画像フレームを使用して、毎秒30フレーム以上で推論を実行します。非リアルタイムのアプリケーションでは、外部フラッシュを使用して、フラッシュ容量の制限内でモデルサイズを処理することが可能です。
内部では、KPUは先入れ先出し(FIFO)バッファを使用して推論モデルを実行し、一般的なCNNモデルの各レイヤを連続的に処理します(図2、上部)。各レイヤにおいて、KPUはオンチップSRAMまた外部フラッシュからモデルのパラメータおよびデータを読み込み、関連する加速化されたカーネル機能を使用してそのレイヤのカーネル機能を実行します(図2、下部)。このレイヤの処理パイプラインに組み込まれたコールバックメカニズムにより、KPUハードウェアが各処理シーケンスを完了するたびに独自のルーチンを実行できます。
図2:推論実行時、KPUタスク全体(上部)は複数レイヤで構成されています。各レイヤは適切なカーネル機能(下部)の実行を必要とします。(画像提供:Seeed Technology)
開発プラットフォーム
KPUは、専用ハードウェア内で実行されるCNNアルゴリズムの複雑さを概念化します。Seeedはハードウェア製品とソフトウェアパッケージの組み合わせを提供することにより、CNNベースの開発の複雑さを軽減してくれます。MAIX-Iモジュールに加えて、機能が向上したSeeedのボードレベル製品を使用することにより、MAIX-Iベースの設計を迅速に評価および開発できます。
Seeed 110991188開発キットは、ベースボードに搭載されたMAIX-Iモジュールを、2.4インチLCDおよびSeeed 114991881 OV2640フィッシュアイカメラとベースレベルで組み合わせたものです。Seeed 110991189キットは、MAIX-Iモジュールの非Wi-Fiバージョンと同様の機能を提供します。
プロトタイプ開発向けのSeeed 102991150 Bit評価ボードは、ブレッドボード専用に設計されたボードにMAIX-Iモジュールを搭載しています。Seeed Technologyの110991190 MAIX-I Bitキットは、Bit評価ボード、2.4インチディスプレイ、OV2640カメラ、およびBitボードをブレッドボードに接続するためのヘッダのペアを組み合わせたものです。
さらに複雑なアプリケーション開発向けのSeeed 110991191 Sipeed MAIX Goボードキットは、MAIX-IモジュールをSTMicroelectronics STM32F103C8マイクロコントローラ、カメラ、I2Sマイクロフォン、スピーカ、リチウム電池管理、MicroSDスロット、および複数のインターフェースコネクタと組み合わせたものです(図3)。付属の2.8インチLCDをボード背面に接続すると、AI駆動デジタルビデオシステム用のプラットフォームとしてこのキットを効果的に使用できます。
図3:Seeed Technology MAIXボード シリーズの1つであるSipeed MAIX Goボードは、MAIX-IモジュールをSTMicroelectronicsのSTM32F103C8マイクロコントローラ、カメラ、ディスプレイ、および複数のインターフェースと組み合わせて、物体認識用のスタンドアロンイメージングシステムを提供します。(画像提供:Seeed Technology)
このボードは、多くのスマート製品要件に対応したスタンドアロンソリューションとなります。また、MicroPythonをサポートすることで、使いやすくなっています。Seeed SipeedボードとMicroPythonを組み合わせることで、AIベースのスマート製品の開発においてよりシンプルなアプローチを活用できます。
MicroPythonを使用した迅速な開発
MicroPythonは、リソースに制約のあるマイクロコントローラ向けにPythonプログラミング言語の最適化されたサブセットを提供するために作成されました。MicroPythonがハードウェアアクセスを直接サポートすることにより、組み込みシステムのソフトウェア開発において、Pythonベースの開発が比較的シンプルになります。
Cライブラリの代わりに、開発者はなじみのあるPythonインポートメカニズムを使用して必要なライブラリをロードできます。たとえば、MicroPythonマシンモジュールをインポートするだけで、マイクロコントローラのI2Cインターフェースやタイマなどにアクセスできます。イメージセンサを使用する設計の場合、センサモジュールをインポートしてsensor.snapshot()
を呼び出すことで、画像をキャプチャできます。これにより、イメージセンサからフレームが返されます。
SeeedのMaixPyプロジェクトではMicroPythonが拡張され、MAIX-Iモジュールの中核および関連する開発ボードでデュアルコアK210プロセッサをサポートしています。MAIX-IモジュールのK210プロセッサで実行されるMaixPy MicroPythonインタプリタは、MicroPythonの機能およびMaixPy KPUモジュールなどの専用MaixPyモジュールを使用します。これにより、プロセッサのKPU機能がカプセル化されます。
開発者は、MaixPyやKPUモジュールを使用して、CNN推論を簡単に展開することができます。実際、SeeedのMaixHubモデルライブラリは、開発者がMAIX-Iモジュールを開始するのに役立つ多くの学習済みCNNモデルを提供しています。これらのモデルをダウンロードするには、MAIXボードでID生成ユーティリティを実行して、マシンIDを利用できるようにする必要があります。
たとえば、LCDが接続されたSeeed Sipeed MAIX Goキットを使用すると、顔検出の学習済みモデルをロードできます。このモデルを使用した推論の実行に必要なのは、数行のPythonコードだけです(リスト1)。
コピー
import sensor
import image
import lcd
import KPU as kpu
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000
# task = kpu.load("/sd/face.kmodel")
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
if code:
for i in code:
print(i)
a = img.draw_rectangle(i.rect())
a = lcd.display(img)
a = kpu.deinit(task)
リスト1:開発者は数行のMicroPythonコードだけで、フラッシュ常駐型ニューラルネットワークモデルを使用した推論を実装できます。(コード提供:Seeed Technology)
この学習済みモデルは、Yolo(you only look once)モデルと呼ばれるタイプのCNNを実装しており、以前のCNNアルゴリズムの基礎となっていた一連のスライディングウィンドウを使用するのではなく、学習および推論中に画像全体を使用することにより推論を高速化します。Yoloのさらなる最適化は、MaixHubモデルライブラリで提供される「Tiny Yolo2」モデルで具体化されています。結果として、MAIX Goでリアルタイム顔検出を可能にする高性能モデルが実現しました(図4)。
図4:Sipeeed MAIX Goボードを使用することにより、開発者は専用の学習済みCNN推論モデルを使用して構築されたリアルタイム顔検出を迅速に検証できます。(画像提供:Seeed Technology)
もちろん、推論は複雑なDNNモデル開発プロセスの導入段階にすぎません。この例が単純に見えるため、効果的なモデルの実装に関連した課題が隠れてしまう可能性があります。
カスタムモデルを開発するには、十分な大きさのモデル学習用サンプルセットを取得する必要があります。学習において、開発者はTensorFlowなどのディープラーニングフレームワークを使用してモデルを設定し、学習データを使用して学習を実行します。
これらの手順は一見負担が大きいように思えますが、MAIX-Iエコシステムのおかげで推論の展開は比較的簡単になります。
Seeedは、開発者がTensorFlow、Keras、Darknetで開発されたモデルをKPUの専用kmodel形式に変換するためのコンバータを提供しています。MaixHubモデルライブラリからダウンロードした学習済みモデルと同様に、開発者はカスタムモデルをMAIX-Iモジュールにアップロードして、前述のMicroPythonを使用してその性能を評価できます。
また、Seeedは、Cプログラミング言語でカスタムソフトウェアアプリケーションを作成するためのソフトウェア開発キット(SDK)も提供しています。別々のSDKが、スタンドアロンCアプリケーション、またはRTOSリアルタイムオペレーティングシステムに構築されたCアプリケーションをサポートしています。
まとめ
スマート製品向けの画像および音声ベースインターフェースの急速な普及により、リソースに制約のあるスマート製品の設計において、機械学習アルゴリズムの使用に対する関心がますます高まっています。以前は、実装が簡単で、リアルタイムの機械学習機能を備えるほどの高性能なソリューションとなる有力な選択肢はほとんどありませんでした。
この記事で見てきたように、Seeed Technologyが提供するMAIX-Iモジュールと関連ボードを使用することで、開発者はハードウェアプラットフォーム上で推論モデルを迅速に展開できます。これにより、オーディオ/ビデオストリーミングデータから音声および物体をリアルタイムで認識できます。

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。