これまで本初心者講座では、ソニー社製のシングルボードコンピュータ「SPRESENSE」の優れた演算能力を活用することにより、様々なアプリケーションを実現できることを紹介してきました。今回はさらなるSPRESENSEの魅力として、SPRESENSE SDKの提供するAI、ディープニューラルネットワーク(DNN)実行機能である「DNNRT機能」について紹介します。SPRESENSEのDNNRT機能を活用することにより、PC上で生成した推論モデルに基づいて、SPRESENSE上のでデータ分析を実現。スマート・デバイスを構築することができます。
本初心者講座では、はじめてSPRESENSEの開発環境に触れる方はもちろん、はじめてDNNに取り組む方も安心して技術を学んでいただけるよう、サンプルアプリケーションの開発・解説から、アプリケーションの変更方法、実際の環境データを解析する方法までを全4回に渡って紹介していきます。是非、記事を片手にDNNの開発をご体験ください。
目次
超低消費電力×マルチコア|SPRESENSEが拓くエッジAIの世界
IoTサービスを支えるスマート・エッジ。ウェアラブルデバイスといった民生用製品をはじめ、Industrial IoT(IIoT)として高度な産業設備を監視・制御する産業用製品まで、あらゆるデバイスが登場しています。これらのデバイスに共通して求められることは、わずかな電力や乾電池などの限られた電力の中で長時間稼働できる電源に対応できる優れた超低消費電力特性と、心拍数、モーション(加速度の変化)、周囲を撮影した画像データなどエッジにて採取した環境情報を解析できる演算能力です。さらに近年は演算性能(スペック)だけでなく、データ分析の技法として人気の高いディープニューラルネットワークを簡単に実装できる開発環境の整備、演算性能を如何に簡単に活用できるかといった特長も求められています。
これらの特長をすべて備えたハードウェア・プラットフォームがSPRESENSEです。SPRESENSEは、Arm社が組み込み用のニューラルネットワークの実行フレームワークとして提唱する「CMSIS-NN」に対応したCortex-M4を6コア搭載するハードウェアであり、エッジで収集した情報をスマートに解析することができます。さらにSPRESENSEは開発環境「SPRESENSE SDK」は、DNNの推論モデルを簡単に制御可能な「DNNRT機能」を提供しています。
DNN Runtime|SPRESENSE SDK開発ガイド
SPRESENSE×Neural Network ConsoleではじめるDNN開発
それでは早速、SPRESENSE上で動作するDNNの開発方法を学んでいきましょう。開発の要点を握るのは、SPRESENSEの開発環境「SPRESENSE SDK」とソニー社製のDNN開発環境「Neural Network Console」です。Neural Network Consoleはソニー社が提供するDNNの開発環境です。GUIを使って簡単にネットワークを設計できる他、ネットワークの学習(Train)や評価(Evaluate)も数回のクリックのみで実行できる扱いやすさが大きな魅力です。
Neural Network Console|Windows版とクラウド版
Neural Network Console開発環境には、2種類「Windows版」と「クラウド版」があります。Windows PCをお持ちの方は、PC上にNeural Network Console開発環境をダウンロードして、手元のコンピューティングリソースを使った設計・学習・検証が可能です。また、手元に開発用PCがない場合は、クラウド版を利用することによりブラウザのみでDNNを開発することができます(従量課金制)。
Neural Network Console(Windows版)
SPRESENSE×Neural Network Consoleの連携方法
SPRESENSE×Neural Network ConsoleによるDNNの開発方法を図1に示します。本開発環境では、Neural Network Consoleがデータをどのような演算やパラメータにより分析するかを定義した「推論モデル」を生成。SPRESENSEが推論モデルを実行することによりデータを分析することができます。
本開発では、まず、Neural Network Consoleを起動し、データをどのように分析するかを定めた「モデル」と、モデルがデータを分析する際に参照するパラメータを調整(学習)するための「学習用データ」、調整したパラメータを保持したモデルの正しさを検証するための「検証用データ」を入手します(図1左)。これらの情報を取得した後、Neural Network Consoleは入手したモデルと学習用データを使い「学習(Train)」を実行します。学習後は、検証用データにより動作を確認。最後に、モデルとパラメータがセットになった「推論モデル」をエクスポートし、SPRESENSEの開発環境へ格納します。
上記操作により、SPRESENSE上での推論に必要な情報が全て揃います。以降は、SPRESENSEのセンシング機能や撮影機能を使って情報を採取。採取した情報を推論モデルにより解析することで、スマート・エッジを実現できます(図1右)。
DNNにより画像認識を実現する「dnnrt_lenet」用の推論モデル生成方法
それでは、SPRESENSE上でDNNにより画像認識する「dnnrt_lenet」用の推論データを、Neural Network Consoleにより生成する方法を紹介します。dnnrt_lenetは、画像に含まれている手書き文字を認識し、0〜9のいずれである確率が高いかを出力するプログラムです(図2)。
Neural Network ConsoleにはWindows版とクラウド版がありますが、本記事ではWindows版による開発手順を紹介します。Neural Network Consoleの入手からインストール、モデルの取得、学習、検証、推論モデルのエクスポートまでの手順を以下の動画にまとめました。ご覧ください。
Neural Network Console(Windows版)のダウンロードはこちら
ニューラルネットワークのモデルを入手・開発する
Neural Network ConsoleをWindows PCへインストールし、起動するとサンプルモデルの一覧が表示されます。また、さらに多くのモデルがNeural Network ConsoleのWEBサイトで公開されています。今回は、Neural Network ConsoleのWEBサイトで公開されている画像認識用のDNNモデル「MNIST.LeNet」を利用します。Neural Network Consoleのウィンドウ左にある「More Sample Projects」をクリックしWEBサイトを開き「Image recognition」の中にある「image_recognition.MNIST.LeNet」を選択、ダウンロードします。ダウンロード後、Neural Network Consoleのウィンドウ左上にある「Open Project」からダウンロードしたファイルを選択することにより、モデルをロードすることができます。Neural Network ConsoleのWEBサイトにて配布されているMNIST.LeNetのネットワークは28px x 28px x 1(輝度)の画像を入力データとして、入力画像に0〜9のいずれの数字が書かれているかの確率を算出するネットワークです(図3)。
データセットによりニューラルネットワークの学習を行う(Train)
モデルのプロジェクトを開くと「学習と検証に使うデータセットをダウンロードするか」を確認する画面が表示されます。「はい」をクリックし、学習用データ・検証用データをダウンロードします。Neural Network Consoleの各プロジェクトは、モデルだけでなく、モデルを扱うために必要なデータがセットになっているため、モデルに対応する学習データを探し回ることなく、スムーズに開発を始めることができます。もちろん、自身の準備したデータを使った学習も可能です。
Neural Network Consoleのウィンドウ右上にある「Train(Run)」をクリックすると、モデル内で扱うパラメータの調整を行う「学習」が開始されます。学習では、ダウンロードした学習用データの一部を切り出した10セットのデータを使った10回のパラメータ調整が実行されます。図4が学習結果を示すグラフです。学習の回数を重ねるごとに、パラメータが正答に近くなり、パラメータの調整幅が小さくなり(青線実線:COST)、入力に対して期待する出力値の乖離が小さくなり(橙色実線:TRAINING ERROR)、入力から出力を導くことができなかった頻度が改善されます(橙色破線:VALIDATION ERROR)。このグラフのことを学習曲線と呼びます。学習曲線が十分に収束していない場合は、十分に学習ができていない可能性がありますので、学習回数を増やす、学習用データを見直す必要がありますが、これらの設定はGUIから簡単に変更可能です。
学習が完了したニューラルネットワークを評価する(Evaluate)
学習が完了した後は検証用データを使って、入力に対して期待する出力を得られるかを評価します。Neural Network Consoleのウィンドウ右上にある「Evaluate(Run)」をクリックすると評価が開始されます。評価結果は図5のように表形式で出力されます。各行が検証結果で、図5の1行目には入力「7が書かれた画像」に対する出力「7」が得られたことが示されています。
推論モデルを生成する
以上で推論モデルを生成する準備が整いましたので、最後に「ACTION」から「Export」「NNB(NNabla C Runtime file format)」をクリックし、SPRESENSEのDNNRT機能に対応する推論モデル「model.nnb」を生成します。
SPRESENSE SDKのDNNRT機能を使って推論モデルを実行する
最後に、推論モデル「model.nnb」をSPRESENSE上で実行する方法を紹介します。
SPRESENSE SDKのDNNRT機能が提供するAPIとその役割
SPRESENSE SDKに同梱されたサンプルプログラム「dnnrt_lenet」を例に、SPRESENSEで推論モデルを実行する方法を解説します。dnnrt_lenetサンプルアプリケーションは、PGM画像に書かれている文字を認識し、画像に書かれた数字が0〜9である確率を表示するプログラムです。SPRESENSE SDKの「SDKコンフィグ」にて「Examples/dnnrt_lenet」を選択することにより有効化できます。dnnrt_lenetサンプルアプリケーションのソースコードは「spresense/examples/dnnrt_lenet」フォルダに格納されています。各ファイルの役割は下記の通りです。
ファイル名 | 役割 |
---|---|
dnnrt_lenet_main.c | SPRESENSE SDKの提供するDNNRT機能を使って推論を実行し、結果を表示する。 |
loader_nnb.c | 推論モデルをメモリ上に展開する。 |
pnm_util.c | PGM形式の画像をメモリ上に展開する。 |
図6にフローチャートを示します。
dnn_initialize
DNNRT機能全体を初期化します。引数でDNNRT機能が利用するCPU数を指定することができます(dnnrt_lenetでは1)。SPRESENSE上ですべての推論処理が終了した後は、dnn_finalize
を使うことによりDNNRT機能を停止可能です。
dnn_runtime_initialize
メモリ上に展開された推論モデルを実行する準備するAPIです。dnnrt_lenetでは、loader_nnb.cによりメモリ上に展開されたmodel.nnbを推論モデルとして指定しています。利用が終わった推論モデルはdnn_runtime_finalize
で解放することができます。
dnn_runtime_forward
入力バッファとして指定した内容を、推論モデルにより解析します。dnnrt_lenetではfloat型、28×28の配列を入力として指定しています。推論モデルのすべての処理はdnn_runtime_forward
関数中で完結することから、モデルの構成によらず1つの関数を実行するだけで推論が可能です。
dnn_runtime_output_buffer
推論結果が格納されているバッファを取得します。dnnrt_lenetでは0〜9の確率(float型)が含まれた10要素の配列の先頭アドレスを取得できます(図7)。
まとめ
本記事では、DNNを簡単に開発できるNeural Network Consoleを使って、SPRESENSE上で動作する推論モデルを生成。SPRESENSE上で推論モデルを実行する方法を紹介しました。
次回は、産業分野を中心に多くのIoTサービスに求められている波形データを分析するニューラルネットワークを例に、SPRESENSEのDNNRT機能を使って波形を解析する方法について解説します。
こちらも是非
“もっと見る” マルチコア|SPRESENSE編
SPRESENSE×Neural Network Console:第4回|推論モデルを最適化し、エッジAIによるオリジナルの音声識別システムを構築する
今回の初心者講座では、SPRESENSEの「ハイレゾオーディオ入力」と「DNNRT機能」により「Neural Network Console」で生成したディープニューラルネットワーク(DNN)の推論モデルを統合。エッジ単体で完結するオリジナルの音声識別システムを構築する技法を解説いたします。
SPRESENSE×Neural Network Console:第3回|オーディオ解析に必要な学習用データを採取し、PC上で学習・推論を実行する
今回の初心者講座では、SPRESENSEに搭載されたハイレゾオーディオ入力を活用し、環境音を録音し、ディープニューラルネットワークによる音声分類に不可欠な学習用データと検証用データを生成する方法について解説します。また、PC上で動作するNeural Network Consoleによって生成した推論モデルをエッジ・デバイスへ統合するために解決すべき課題を紹介します。
SPRESENSE×Neural Network Console:第2回|異常検知に活用できるニューラルネットワークで波形の扱い方を学ぶ
SPRESENSEのDNNRT機能が扱うことのできるデータは画像だけでなく、産業分野を中心に人気が高まっている「異常検知・故障予知」に活用できる加速度センサーや大気圧センサーなどから収集した波形データも解析することができます。さらにSPRESENSEに内蔵されたハイレゾオーディオ録音機能も周辺環境を可聴域の波形データとして記録することができる優れたセンサーとして利用可能です。そこで、今回の初心者講座では、まず簡単な波形データの解析方法を例に、DNNRT機能から波形データを扱うシステムの構築方法について解説。DNNRT機能を活用した製品開発に必要となる技術を紹介いたします。