こんにちは。本日はSTM32マイコン体験実習組み込みAI編 ニューラルネットワーク実装編のプレゼンテーションをご覧いただき、ありがとうございます。組み込みAIを実現するためには、学習用データの収集、学習用データのラベリング、 ニューラルネットワークモデルの学習、マイコン用コードへの変換及び圧縮、そして水論モデルの実行という5つのステップを踏む必要があります。本プレゼンテーションでは、この中からマイコン用コードへの変換及び圧縮について解説していきます。なお、本実習を進める際、事前に本体験実習のデータ収集、学習編が終了している必要があります。本プレゼンテーションでは、データ収集、学習編が完了していることを前提に進めていきますのでご了承ください。ここで、本実習のプログラム構成について説明いたします。本実習は、全部で8つのパートに分かれております。1つ目のAI解説と、2つ目のツール解説は座学の内容になります。3つ目のツール動作確認、4つ目のデータ収集、学習、5つ目のニューラルネットワーク実装は、実機を用いた半ズオンの実習となります。6つ目の設計のヒントと、7つ目のパイソンスクリプトは、再び座学となります。本実習にて使用する統合開発環境が、IAR社のEWARMになりますが、EWARMの代わりに、弊社のSTM32 Cube IDEをご使用になる場合に、8つ目のパートのSTM32 Cube IDEもご覧いただく必要があります。こちらも実習形式となります。以上がSTM32マイコン体験実習、組み込みAI編のプログラム構成になります。本プレゼンテーションは、5つ目のニューラルネットワーク実装のパートとなります。本実習の目的は、学習前と学習後の推論実行の精度の向上を実感していただくことではなく、組み込みAIの開発に必要な開発手順を習得していただくことが主な目的となっています。ここでは、本体験実習のデータ収集学習編で再学習したニューラルネットワークモデルを評価ボード上のマイコンに実装します。組み込みAI開発環境STM32 Cube AIを使用して、再学習済みモデルの分析、検証、圧縮を行い、統合開発環境向けのプロジェクトファイルを生成します。その後、ツールの動作確認で使用したサンプルプロジェクトにネットワークモデルのデータをインポートしてターゲットに実装します。では、まず最初にSTM32 Cube MXを起動してアクセス2ボードセレクターを選択します。次に、左上のパートナンバーサーチランにBL475E IoT01A1と入力しますと、検索結果として右側のボードリストにボードが一つ表示されます。ここで注意が必要なのですが、今回使用するボードはBL475E IoT01A1というまつびが1で終わるボードを使用しますが、まつびが2で終わるボードもありますので、間違って選択しないようにご注意ください。今回使用するボードは、まつびが1のボードになります。最後に、該当のボードをダブルクリックしますと、ペリフェラルをデフォルトの状態に初期化するかどうか聞かれますので、Yesを選択してください。プロジェクトの初期化設定画面が表示されます。ここで、組み込みAIのライブラリーを追加します。画面上中央にあるSoftware PaxよりSelect Componentsを選択します。そうしますと、右のような画面が表示されますので、左側のSoftware Component Class欄にて、Artificial Intelligenceのチェックボックスにチェックを入れます。右側のXCube AIを展開して、XCube AIのCoreのチェックボックスにチェックを入れます。また、アプリケーションのプルダウンメニューより、バリデーションを選択します。最後に、右下のOKボタンを選択します。次に、左側のリストからSoftware Paxを展開し、XCube AIを選択します。XCube AIの設定画面が表示されましたら、コンフィギュレーション欄のAd Networkを選択します。モデルの設定画面が表示されますので、モデルインプツランのモデル名をネットワークからHAR IGNに変更します。また、その下のモデルの種類は、プルダウンメニューよりケラスを選択します。モデルの指定欄にて、ブラウズを開いて、データ収集学習編で生成した再学習したニューラルネットワークモデルHAR IGN.h5というファイドを指定します。こちらのファイルは、FPAI Sensing1のフォルダーの中のUtilities, AI Resources, Training Scripts,HAR, Resultsのフォルダーに保存されています。ここで、マイコン上での検証を有効化するために、プラットフォームセッティングスタブにて、コムポート設定をUSRとアシンクルナス、ファウンドソリューションをUSRと1に設定します。次に、画面上側にあるWindowメニューより、Outputのチェックボックスにチェックを入れて、ログが表示されるようにします。画面下側のOutputタブを選択して、コンソール画面を表示します。本実習のツール解説編で、入力されたモデルのレイヤー構成、モデルの規模、メモリ使用料などが参出される分析機能について紹介しましたが、Analyzeボタンがその機能に相当します。こちらを選択しますと、ボタン左側に分析結果の情報が表示されます。また、元のモデルと変換後のモデルに同じデータを入力した場合、出力結果にどれくらいの差異があるかを確認する検証機能についても紹介しましたが、PC上で検証を行う場合の機能がバリデートオンデスクトップのボタンになります。こちらを選択しますと、コンソール画面に検証の結果が表示されます。以上の設定が完了しましたら、設定内容を反映した再学習済みのモデルを含んだプロジェクトファイルを生成します。プロジェクトマネージャータブを選択し、プロジェクトネーム欄に、プロジェクト名、ロケーション欄に保存場所を設定します。最後に、画面右上のGenerateコードボタンをクリックしてコードを生成します。ポップアップ画面が出ましたら、クローズを選択します。スールの動作確認編で使用したサンプルプロジェクトに、生成しましたプロジェクトファイルのネットワークモデルのデータをインポートしてターゲットに実装します。先ほど、生成したプロジェクトファイルのフォルダー内に、ヘッダーファイルが入っているINCという名前のフォルダーと、ソースファイルが入っているSRCという名前のフォルダーがあります。SRCフォルダーの中に、HAR-IGN.Cというファイルと、HAR-IGN-DATA.Cというファイルがあります。同じように、INCフォルダーの中に、HAR-IGN.Hというファイルと、HAR-IGN-DATA.Hというファイルがあります。ここで、これらのファイル4点が見当たらない場合、もしかしたら、ネットワーク.C、ネットワークデータ.C、ネットワーク.H、ネットワークデータ.Hという名前の4つのファイルがあるかもしれません。その場合、STM32CubeMXの設定時にモデル名を設定する箇所があったのですが、そちらの名前がHAR-IGNという名前に変更されておらず、デフォルトの名前であるネットワークのままになっていることが原因と考えられますので、再度モデル名を設定してから作業を進めていただければと思います。次に、これらの4つのファイルを既存のサンプルプロジェクトへ上書きします。コピー先はそれぞれ画面に示すフォルダーになります。2つのヘッダーファイルはINCフォルダーへ。2つのソースファイルはSRCフォルダーへコピーしてください。コピーできましたら、コピー先のフォルダー内で、コピーされた4つのファイルの日付が先ほどプロジェクトを生成した時の日付になっているかどうかをご確認ください。最後に、ツールの動作確認編で使用したサンプルプロジェクトを統合開発環境で開き、ビルドを実行します。プロジェクトメニューよりすべてを再ビルドを選んでください。次に、今ビルドして生成されたコードをターゲットマイコンにダウンロードしてデバッカーを起動します。プロジェクトメニューよりダウンロードしてデバッグを選んでください。プログラムがダウンロードされてデバッカーが起動しましたら、白い丸のアイコンをクリックしてプログラムを実行してください。スマートフォンアプリのSTBLEセンサーを起動してデバイスの接続を開始します。接続が完了し、下側にアイコンがいくつか表示されましたら、その中からアクティビティでコクニッションを選択して動作確認してみてください。現在動いているニューラルネットワークモデルは先ほど再学習した結果のネットワークモデルになります。ツールの動作確認時の挙動とほとんど変わらないと思いますが、本実習の目的は、学習前と学習後の推論実行の精度の向上を実感していただくことではなく、組み込みAIの開発に必要な開発手順を習得していただくことが主な目的となっています。組み込みAIを実現するためには、学習用データの収集、学習用データのラベリング、ニューラルネットワークモデルの学習、マイコン用コードへの変換及び圧縮、そして推論モデルの実行という5つのステップを踏む必要がありますが、本実習を通して、これら5つのステップを体験し、理解を深めていただけたら、本体験実習の目的は達成となります。以上で本プレゼンテーションを終わります。プレゼンテーション最後までご覧いただきましてありがとうございました。