ワンチップマイコンでTensorFlowが動くという驚きのTensorFlow Lite対応ボードを入手しました。人柱レポートしていきます。
TensorFlow Liteとは
ごぞんじGoogleが世に出した機械学習フレームワークTensorFlowの軽量版です。強力なクラウドサーバやPCではなく、スマホや組込みマイコンですら動くというびっくりな代物です。ほんまかいな?
遠く離れたクラウドサーバに常時接続することなく、エッジデバイス上で機械学習推論を実行できれば、安定で遅延を短く、消費電力を低く、またプライバシー漏洩を抑えることができます。つまり「OK Google」みたいな音声認識をネット接続なしに電池駆動でできるということです。ほんとうに出来たらな。
SparkFun Egdeとは
SparkFunが開発・販売するマイコンボードです。TensorFlow Liteに対応していることを最大のウリにしています。マイコンはAmbiqのApollo3。あんまり聞いたことないマイコンですが、コアはARM Cortex-M4Fです。
日本国内での取り扱いがまだなかったのでSparkFunから直接購入しました。今確認したらMouserで「取寄中」になってます。また、せっかくのBLE搭載ですが技適の表示がないので、たぶん電波吹いちゃダメです。
Apollo3マイコンのスペック
- ARM Cortex-M4F
- 48MHz / TurboSPOT 96MHz ←何それ?
- 超低消費電力 6uA/MHz ←ほんまかいな?
- 1MB Flash / 384KB SRAM
- BLE 5対応 (専用プロセッサ搭載 ←ARMの処理能力を割かれずにすむ)
Cortex-M4Fの高い演算能力と低消費電力の両立という、ちょっと変わったところを狙ったマイコンという印象です。
SparkFun Edgeボードのスペック
- 2個のオンボードマイク ←音声認識に便利。でもなんで2個?
- OV7670カメラコネクタ ←画像認識への期待が高まるが…
- 3軸加速度センサ ST LIS2DH12
- Qwiic connector (4ピンのI2Cのやつ)
- プログラム書き込み用シリアルポート (SparkFun Serial Basic Breakoutが挿せる)
- JTAGコネクタのピンあり (コネクタ未実装)
- GPIO×4, LED×4, ボタン×1
- CR2032ボタン電池ホルダー
- BLE チップアンテナ
- 「Yes」と「No」を検出する音声認識ファームが書き込み済み
- 15ドル!
マイクがオンボードで搭載されていて音声認識がすぐに試せる便利さの反面、マイコンボードとして見ると拡張性が乏しいですね。プログラム書き込みはArduino Pro MiniなどでおなじみのSparkFun Serial Basic Breakout (USBシリアル変換基板)を挿してシリアルポートで書き込むほか、より高度な開発のためにJTAGピンも出ています。
開発環境
お手軽にArduinoでというわけにはいきません。それどころかGUIなIDEがまだ用意されていません。いまどき流行らないコマンドラインツールでの開発となります。「あなたがベテラン技術者ならまるで我が家にいるように感じるでしょう」などと言い訳しています。意味が分かりません。以下のツールを使用します。
- Bash :おなじみのコマンドラインツール。
- Make :おなじみの自動ビルドツール。
- Python3 :開発のためのもろもろのスクリプトがPythonで書かれています。
- GNU Arm Embedded Toolchain :Cコンパイラ。ARM Cortex-R/M用のGCCです。
- Ambiq SDK :Ambiq Apolloマイコン用のSDKです。
- SparkFun Edge BSP :SparkFun Edgeボード用のサポートパッケージです。
UNIX系ツールを使うのでMacやLinuxなら無問題ですが、Windowsでは少し厄介です。SparkFunのページではGit Bash等のツールを使う方法が紹介されていますが、まあ地雷臭しかしませんよね。素直に仮想マシンでLinux使う方が良いと思います。
火入れの儀
書き込み済みの音声認識ファームの動作を確認します。
ボタン電池を挿入すると、ボードが起動し、青いLEDが点滅し始めます。ボード上の機械学習モデルは、マイクから入力される音声から「Yes」と「No」という単語を検出し、LEDで結果を表示します。LEDの色の意味を下表に示します。
検出結果 | LEDの色 |
---|---|
「Yes」 | 黄 |
「No」 | 赤 |
不明な音声 | 緑 |
音声なし | 消灯 |
…のはずなのですが、何十回「Yes、Yes、Yes…」と言い続けてたまに黄色か緑色のLEDがチカっと光るというレベル。「No」は何十回言っても赤色LEDは点灯しません。僕の発音が悪いのか? ほんとに音声認識してるかこれ?
あと、コイン電池ホルダーの接点がなんか汚くてすこぶる接触が悪かったです。フラックスかな。まあ、それは洗浄したら治りましたが。
もうだいぶ心が折れかけてますが、次回は開発環境構築を見ていきます。