1. はじめに
作成するアプリの概要
この Codelab では、TensorFlow Lite For Microcontrollers を使用して Arduino Nano 33 BLE でディープ ラーニング モデルを実行する方法を学びます。ユーザーはマイクロコントローラをデジタル「魔法の杖」に変え、振ってさまざまな呪文を唱えます。ユーザーがワンドを動かすと、人間には理解できない複雑な多次元センサーデータがモデルへの入力として渡され、モデルはいくつかの動きのいずれかが発生した場合にアラートを出すシンプルな分類を出力します。

マイクロコントローラでの ML
機械学習は、Google アシスタントなど、ユーザーの生活をより快適にするインテリジェントなツールを作成するために使用できます。しかし、多くの場合、こうしたエクスペリエンスには、強力なクラウド サーバーやデスクトップなどの多くの計算やリソースが必要になります。しかし、現在では、マイクロコントローラのような小型で低消費電力のハードウェアで機械学習の推論を実行できるようになりました。
マイクロコントローラは非常に一般的で安価であり、必要なエネルギーが非常に少なく、信頼性が高いです。家電製品、自動車、おもちゃなど、あらゆる種類の家庭用デバイスに組み込まれています。実際、毎年約 300 億台のマイクロコントローラ搭載デバイスが製造されています。

機械学習を小型のマイクロコントローラに導入することで、高価なハードウェアや信頼性の高いインターネット接続に依存することなく、日常生活で使用する数十億台のデバイスのインテリジェンスを高めることができます。毎日決まった仕事をこなせるスマート家電、動作の異常と正常を見分けられるインテリジェント工業センサー、子どもが自分で楽しく学習できる魅力的なおもちゃを想像してください。
TensorFlow Lite For Microcontrollers(ソフトウェア)

TensorFlow は、モデルのトレーニングと実行に使用される Google のオープンソースの ML フレームワークです。TensorFlow Lite は、ソフトウェア フレームワークであり、TensorFlow の最適化されたバージョンです。スマートフォンなどの小型で比較的低電力のデバイスで TensorFlow モデルを実行することを目的としています。
TensorFlow Lite For Microcontrollers は、マイクロコントローラなどの小型で低電力のハードウェアで TensorFlow モデルを実行することを目的とした、TensorFlow の最適化バージョンであるソフトウェア フレームワークです。この環境で必要な制約(バイナリ サイズが小さい、オペレーティング システムのサポート、標準の C / C++ ライブラリ、動的メモリ割り当てなどが不要)に準拠しています。
Arduino Nano 33 BLE(ハードウェア)

Arduino は、電子プロジェクトの構築に使用される人気のオープンソース プラットフォームです。次の要素で構成されます。
- この Codelab で使用されている Arduino Nano 33 BLE などの物理的なプログラマブル回路基板(マイクロコントローラであることが多い)。
- Arduino IDE(統合開発環境)。コンピュータ コードを記述して物理ボードにアップロードするために使用されるソフトウェア。
Arduino Nano 33 BLE は、マイクロコントローラ ベースのプラットフォームです。単一の回路基板上の小さなコンピュータです。プロセッサ、メモリ、I/O ハードウェアを備えており、他のデバイスとの間でデジタル信号を送受信できます。コンピュータとは異なり、マイクロコントローラは高性能ではなく、通常はオペレーティング システムを実行しません。代わりに、小さなプロセッサと少ないメモリを備え、デベロッパーが作成したプログラムがハードウェア上で直接実行されます。マイクロコントローラは可能な限りシンプルになるように設計されているため、消費電力が非常に少なくなります。
演習内容
- Arduino Nano 33 BLE マイクロコントローラをセットアップして、デジタル「魔法の杖」に変身させます。
- Arduino IDE をセットアップし、必要なライブラリをインストールする
- プログラムをデバイスにデプロイする
- 魔法の杖を振ってさまざまな呪文を唱え、予測を確認する
必要なもの
- Linux、MacOS、Windows のノートパソコン
- Arduino Nano BLE Sense 33(ヘッダーなし)
- マイクロ USB ケーブル(USB-C ノートパソコンをお使いの場合は、USB-C - マイクロ USB ケーブルを入手してください)
- (省略可)棒(長さ約 30 cm)
- (省略可)粘着テープ
2. Arduino マイクロコントローラをセットアップする
Arduino を開梱する
箱から取り出し、梱包材から取り出します。導電性があるため、そうしないと問題が発生する可能性があります。

ノートパソコンに接続する
- MicroUSB ケーブルをチップのソケットに差し込みます。
- ケーブルのもう一方の端をノートパソコンの USB ソケットに差し込みます。
- Arduino の左下の LED(下の画像の左上)が点灯します。

ワークフローを理解する

上の図に示すように、Arduino の TFLite インタープリタはモデルで推論を定期的に実行します。モデルは、処理された加速度計データを入力として使用し、最も可能性の高いジェスチャーを示す予測を出力します。さらに、目的の出力が印刷され、右側の LED が点灯します。
3. Arduino IDE をセットアップする
1. Arduino IDE をダウンロードする
プログラムを Arduino マイクロコントローラにデプロイするには、Arduino IDE を使用します。
ダウンロードしたら、アイコンが
のようなアプリケーションをクリックして Arduino IDE をインストールして開きます。
最初のランディング ページは次のように開きます。

2. ボード マネージャーを設定する
- Arduino メニューから
Tools -> Board: "Arduino .." —> Boards Managerを選択します。 "Arduino Nano 33 BLE"を検索してArduino nRF528x Boards (Mbed OS)をインストールします。これにより、Arduino Nano 33 BLE マイクロコントローラが Arduino IDE でサポートされるようになります。
- Arduino メニューから
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"を選択します。

- 最後に、IDE の右下で選択したボードが「Arduino Nano 33 BLE」であることを確認します。

3. ポートを設定する
Arduino メニューから Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE) を選択します。次のように表示されます。

4. ボードの接続を確認する
Arduino メニューから Tools -> Get Board Info を選択します。次のように表示されます。

4. ライブラリをインストールする
1. TensorFlow Arduino ライブラリ
このライブラリには、TensorFlow Lite for Microcontroller のすべての例が含まれています。これには、この Codelab で必要な魔法の杖のソースコードも含まれています。
- Arduino メニューから
Sketch -> Include Library -> Add .ZIP Library...を選択します。 - ダウンロードした TensorFlow Arduino ライブラリ
.zipを追加します。
2. LSM9DS1 Arduino ライブラリ
このライブラリを使用すると、Arduino Nano 33 BLE Sense の LSM9DS1 IMU から加速度計、磁力計、ジャイロスコープの値を読み取ることができます。
- Arduino メニューから
Sketch -> Include -> Manage Libraries...を選択します。 "Arduino_LSM9DS1"を検索してインストールします。
5. サンプルを読み込んでビルドする
1. サンプルを読み込む
Arduino メニューから File -> Examples -> Arduino_TensorFlowLite -> magic_wand を選択して、サンプルコードを読み込みます。

これで、魔法の杖のソースコードが読み込まれます。

2. サンプルをビルドする
スケッチ ウィンドウで Upload ボタンをクリックします。

数分後、書き込みが完了したことを示す赤いテキストが表示されます。アップロード中は右側の LED が点滅し、終了すると消灯します。

6. デモ
現在、魔法の杖は以下に示す 3 つのジェスチャーを検出できます。
- 翼: 左上から「W」の文字を 2 秒間丁寧にトレースします。
- リング: 杖を立てた状態から、時計回りに 1 秒間円を描きます。
- Slope: LED が自分の方を向くように、ワンドを上向きに持って始めます。ワンドを左斜め下に 1 秒間動かし、次に右に水平に 1 秒間動かします。
次の画像は、2 つのジェスチャーを示しています。まず、Slope、次に Wing(デモの参照として使用)。

デモを実行する手順は次のとおりです。
- USB を接続した状態で、Arduino メニューから
Tools -> Serial Monitorを選択します。最初は、出力のない空白の画面が開きます。

- Arduino マイクロコントローラを動かして、上記の各図形を丁寧にトレースし、シリアル モニタがジェスチャーを検出するかどうかを確認します。

- シリアル モニタの出力から、魔法の杖がすべての図形を検出したことがわかります。右側の LED も点灯します。
7. 次のステップ
おつかれさまでした。これで、Arduino マイクロコントローラでジェスチャー認識「魔法の杖」を初めて構築できました。
TensorFlow Lite for Microcontrollers を使用した開発の概要は以上です。マイクロコントローラでのディープ ラーニングというアイデアは新しく、エキサイティングなものです。ぜひ試してみてください。
リファレンス ドキュメント
- 基本的なプログラムの操作に慣れたら、独自のモデルをトレーニングします。
- TensorFlow Lite for Microcontrollers の詳細(ウェブサイト、GitHub)をご覧ください。
- 他の例を試して、サポートされている場合は Arduino で実行してみてください。
- 別の Codelab「TensorFlow Lite と SparkFun Edge を使用したマイクロコントローラ上の AI」を試す
- O'Reilly の書籍『TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers』を参照してください。この書籍では、小型デバイスでの機械学習を紹介し、いくつかの楽しいプロジェクトを説明しています。この Codelab は、この本の第 11 章に基づいています。

今後ともどうぞよろしくお願いいたします。