はじめに
今回はNXP社から提供されている機械学習ソフトウェア開発環境「eIQ」を使って、機械学習を行ってみたいと思います。ツールのダウンロードからセットアップ、サンプルプロジェクトの動かし方まで紹介していますので、是非お手元でも試してみてください。
eIQについて
NXPのeIQ機械学習ソフトウェア開発環境は、NXPのマイコン/プロセッサ上で機械学習アルゴリズムを動作させるための開発ツールです。現在はi.MX RTクロスオーバーMCUとi.MX 8Mアプリケーション・プロセッサ・ファミリをサポートしています。eIQ機械学習ソフトウェアには「eIQ Toolkit」という機械学習のワークフロー・ツールと各種推論エンジンに対応した最適化されたライブラリ、ニューラルネットワーク・コンパイラなどが含まれます。このソフトウェアはオープンソースと独自の技術を組み合わせており、ユーザがシステムレベルのアプリケーションを容易に開発できるよう、NXPのMCUXpresso SDKとYocto開発環境に統合されています。
なお、車載向けには eIQ Automotive AI Enablement を参照ください。
機械学習の実行に必要なセットアップ
必要なハードウェア
eIQ Toolkitを動かすには以下のハードウェアが必要です。
- ネットワーク接続(ターゲットボードとの接続に利用)
DHCPによってIPアドレスが配布される環境 - ネットワークケーブル
ツール、ソフトウェアのダウンロード
eIQ Toolkit
eIQ Toolkitを以下のリンクから入手します。
eIQ Toolkit
MCUXpresso SDK
MCUXpreso SDKを以下のリンクから入手します。
MCUXpresso SDK
① “RT1170”を検索します
② RT1170関連のSDKの一覧が出てくるので、”MIMXRT1170-EVK”を選択します。
③ “Build MCUXpresso SDK v2.10.0”を押します
④ Build SDK for MIMXRT1170-EVK画面が表示されるので、eIQをチェックします
※この時、CMSIS DSP Libraryも自動的に選択されます
⑤ Download SDKを押します
eIQ Toolkitのインストール
eIQ Toolkitのインストールを行います。eIQ Toolkitのインストールパッケージを実行するとインストーラが起動します。
「Next」を選択して次の画面に進みます。
ライセンスを確認した後、「I accept…」を選択し、「Next」を押して次の画面に進みます。
必要であればインストールフォルダを変更し「Next」を押して次の画面に進みます。
ここで「Install」を押すと、「ユーザーアカウント制御」による確認が行われた後に、インストールが開始します。
MCUXpresso SDKの登録
このInstalled SDKのところに、MCUXpresso SDKでダウンロードしたファイルをドラッグアンドドロップすると、SDKを登録するかが聞かれてセットアップされます。
ターゲットボードとネットワークの接続
ターゲットボードとネットワークケーブルは、1G ENET端子に接続します。
機械学習ソフトウェアを使ってみよう
eIQ Toolkitのメイン画面
eIQ Toolkitを起動すると次の画面が表示されます。
各ボタンの動作は次の通りです。
- 「CREATE PROJECT」:プロジェクト生成
- 「OPEN PROJECT」:プロジェクト読み込み
- 「MODEL TOOL」:モデル変換ツールを実行
- 「COMMAND LINE」:コマンドプロンプトを開く(コマンドライン上から直接利用)
今回利用するサンプルプロジェクトの概要
画像の認識と分類を行います
- モデル:Mobilenet-cnn
- 入力画像サイズ:128×128
- 出力形式:ラベル番号
- ラベル
- Burrito_plate
- ChickenSandwich
- ChipsAndSalsa
- HotdogAndFries
- MeatballSandwich
- MeatballSpaghetti
- PizzaSlice
- PotatesAndCheken
eIQ Toolkitでのプロジェクトオープン
まず、サンプルプロジェクトを開きましょう。「OPEN PROJECT」ボタンを押すと、次のようにファイル選択画面が表示されます。
デフォルトのインストールフォルダだと、以下の位置にサンプルプロジェクトファイルがあるので開きます。
C:¥nxp¥eIQ_Toolkit_v1.0.5¥workspace¥projects¥fooddataset.eiqp
(<install folder>¥workspace¥projects¥fooddataset.eiqp)
データセット表示画面
プロジェクトファイルを開くと、”Data Set Cursor”画面が表示されます。この画面は学習用のラベルと、ラベルに対応付けられたイメージファイルの一覧が表示されています。
まずは既存のデータセットのままで進めるので、「SELECT MODEL」で次に進めます。
トレーニング
次にトレーニング画面が表示されます。
この画面ではトレーニングの種別を選択します。項目の意味は次の通りです。
- Classification: 分類
- Detection: 検出
ここでは、Classification(分類)を選択しましょう。
次にトレーニングの最適化設定画面が表示されます。
この画面ではトレーニングの最適化方向を選択します。項目の意味は次の通りです。
- Performance: パフォーマンス(速度)
- Balanced: バランス型(PerformanceとAccuracyの中間)
- Accuracy: 精度
ここでは、 Performance(速度)を選択しましょう。
次にトレーニングの最適化ターゲット画面が表示されます。
この画面ではトレーニングの最適化ターゲットを選択します。項目の意味は次の通りです。
- MCU: マイコン(Microcontroller)
- CPU: 中央演算処理装置(Central Processing Unit)
- GPU: Graphical Processing Unit(GPU)
- NPU: Neural Processing Unit(NPU)
ここでは、MCUを選択しましょう。
次にTrainer画面が表示されます。
この画面の意味は次の通りです。
- TRAINER SETTINGS: Trainerの設定
- Weight initialization: 重みづけの初期化タイプ(imagenet: imagenet学習済みのデータ、Random: ランダム値、File: ファイル参照)
- Input Size: 入力のイメージサイズ
- Learning Rate: 学習率
- Batch Size: 入力のバッチサイズ
- Epochs To Train: 学習のエポック数(設定したエポックを超えたら停止)
- Enable QAT: Quantivation Aware Traing(量子化に配慮したトレーニング)を実施
- MODEL PARAMETERS: モデルのパラメータ
- Alpha: α数
- Optimizer: 学習最適化アルゴリズム
- EVALUATION SETTINGS: 学習設定
- Enable Evaluation: 学習有効化
- Epochs Per Evaluation: 学習のエポック数
- MODEL PERFORMANCE: モデルのパフォーマンス
※学習時の各種情報が表示されます - MODEL STATISTICS
※学習時の学習状態が表示されます
続けて、以下の設定を行いましょう。
- Input Sizeを”128,128,128,3”に変更
- Learning Rateを”0.01”に変更
- Epochs To Train: を一番右(∞)に設定
この後、左下にある黄色の”START TRAINING”ボタンを押しましょう。
トレーニングを実行してみよう
トレーニングを開始すると、進行中のトレーニング状況が表示され、しばらくすると自動的にトレーニングが中断します。
トレーニングを続行する場合は「CONTINUE TRAING」ボタンを、トレーニングパラメータを変更する場合は「SELECT MODEL」で戻ります。ここでは、「VALIDATE」へ進みます。
検証(Validate)
PCでの検証
検証(Validate)画面は以下の通りです。
この画面の操作は次の通りです
- VALIDATION TARGET: 検証ターゲットを設定(MCU等の実機での検証を行う場合)
- VALUDATE: 検証開始
まずは、eIQ Toolkit単独での検証を行うため、「VALIDATE」ボタンを押しましょう。
検証が完了すると以下のように検証結果が表示されます。
縦軸がActual(実績)、横軸がPredicted(予測結果)です。実測と予測結果がすべて一致する場合、左上から右下の項目は全部緑色に表示されますが、実測と予測結果が不一致した項目は赤色で表示されています。マウスポインタを合わせるとツールチップで実際にどれくらい誤判定したのかを確認することができます。
ターゲット(MCU)での検証
次に、ターゲット上での検証を行いましょう。
MCUXpressoでのDeepViewRTの実行環境構築
MCUXpressoを開き、Import samples from SDKを選択します。
“Board and/or Device selection page”でevkmimxrt1170を選択します。
“eiq_examples”-”deepviewrt_modelrunner”をチェックします
[Project]-[BuildAll]を実行すると、コンパイルが完了します。
ボードのセットアップ
- まず、PCとボードをUSBケーブルで接続します
- 次にディップスイッチ(SW1)の設定を確認します
ターミナルソフトを立ち上げてシリアルポートに接続しよう
ターミナルソフト(Tera Term等)を起動し、以下の設定にします。
- ボーレート(通信速度):115200bps
- データ長:8bit
- パリティビット:パリティ無し
デバッグ実行を開始すると以下のようにボードのIPアドレスが表示されるので、このアドレスをメモしておきます。
eIQ Toolkitからのターゲット実行
eIQ Toolkitの検証(Validate)画面で”VALIDATION TARGET”を押します。
Remote Devices画面が開くので、Add New DeviceでNameに適切な名前を、Hostnameに<IPアドレス>:10818を入力してOKを押します。
VALIDATEボタンを押すと、ターゲットでの検証結果が表示されます。
また、MODEL TOOLを実行すると、モデル画面の各ブロック上に実行速度が表示されます。特に赤色が強いブロックが時間がかかっている部分です。
配置(Deploy)
この画面では学習結果をターゲットで実行可能なデータに保存します。
- Export File Type: 保存するファイルのタイプを指定します
- Export Quantized Model: 量子化モデルを保存します
ここでは、デフォルトのまま黄色のボタン「EXPORT MODEL」を押します。
ボタンを押すと「名前を付けて保存」ダイアログが表示されるので、ファイル名を指定します。
ここで保存したファイルを利用することにより、機械学習を活用したシステムソフトウェアを効率的に開発することができます。
参考リンク
eIQ Toolkitについて興味がある方は以下のサイトを訪れてみてください
eIQ ML Software Toolkit
DeepView-RT
まとめ
eIQを使うことで、とても簡単にマイコンで機械学習を行うことができました。お手元にボードがあれば、是非同じ手順で試してみてくださいね。次回もお楽しみに!
i.MX RT1170 EVK
i.MX RT1170 EVKは、高性能なソリューションを高集積基板で提供します。低コストで優れたEMC性能を実現するスルーホール設計の6層PCBで構成され、主要なコンポーネントとインターフェースを搭載しています。
最新情報をメーカーサイトで見る
組み込みLinux導入/開発支援サービス
組込みLinuxによりお客様の装置開発に新たな価値を提供します。
富士通コンピュータテクノロジーズ
こちらも是非
“もっと見る” マルチコア|i.MX RT1170編
GUI Guiderを使って質の高いGUIをササッと作ってみよう
今回はNXP社から提供されている開発ツールの一つである「Gui-Guider」を使用して、質の高いGUI(グラフィカルユーザーインタフェース)を簡単に作成してみたいと思います。簡単なインタフェースであれば、コーディングを行うことなくGUIを作成することもできます。
デュアルコアマイコン「i.MX RT1170 EVK」を動かしてみよう
今回APSでは、初めての方でも簡単にマルチコア技術を体感いただける講座として、NXPセミコンダクターズ社のデュアルコア搭載マイコン「i.MX RT1170」を実際に動かすデモをご紹介します。