概要
TinyML(タイニーML)とは、マイクロコントローラ(MCU)やその他の極めてリソースが限られた組み込みデバイス上で機械学習の推論を実行する技術・研究分野の総称です。「Tiny(超小型)」と「ML(Machine Learning:機械学習)」を組み合わせた造語で、数十KB〜数MBのRAMしか持たないマイコン上でAI推論を実現することを目標とします。
TinyMLの特徴は次のとおりです。
| 特性 | 典型的な値 |
|---|---|
| 対象デバイスのRAM | 16KB〜512KB |
| フラッシュ容量 | 64KB〜4MB |
| 消費電力 | 数μW〜数十mW |
| 推論遅延 | 数ms〜数百ms |
| モデルサイズ | 数KB〜数百KB |
| 動作電源 | バッテリー・エナジーハーベスティング |
従来のエッジAIがRaspberry PiやNVIDIA Jetsonなどの比較的高性能なデバイスを対象にしていたのに対し、TinyMLはArduino NanoやSTM32マイコン、さらにはCortex-M0+のような8ビット/32ビットマイコンをターゲットとします。
歴史・背景
TinyMLという用語は2018〜2019年頃からコミュニティで使われ始めました。GoogleのエンジニアであるPete WardenとDaniel Situnayakeが2019年に出版した書籍「TinyML: Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers」(O’Reilly Media)が初の体系的教科書となり、分野が急速に注目されました。
TinyMLの発展背景:
マイコンは年間数百億個が出荷されており、その多くがセンサー読み取りと簡単な制御にしか使われていません。これらのデバイスにAI推論能力を付加することで、製造コストを変えずに機器をインテリジェント化できるという大きな市場機会があります。
MCUの世界出荷数 ≈ 300億個/年(2023年推定)
うちTinyML対応可能 ≈ 50〜100億個/年
潜在市場 ≈ 数兆円規模(2025年以降)
主要マイルストーン:
- 2019年:TensorFlow Lite Micro(TFLite Micro)公式リリース
- 2019年:TinyML Foundation設立
- 2020年:Edge Impulseがクラウドベースのend-to-end TinyML開発環境を提供開始
- 2021年:Arduino NanoにTFLite Microが標準搭載
- 2022年:Arm Cortex-M55 + Ethos-U55 NPUの普及でTinyMLの性能が10倍向上
- 2023年:STM32N6など専用NPU内蔵マイコンが登場
技術仕様
対応ハードウェアとリソース要件
┌─────────────────────────────────────────────────────────┐
│ TinyML対応デバイス階層 │
├──────────────────┬──────────┬──────────┬───────────────┤
│ デバイス例 │ RAM │ Flash │ 動作周波数 │
├──────────────────┼──────────┼──────────┼───────────────┤
│ Arduino Nano33 │ 256KB │ 1MB │ 64MHz │
│ Raspberry Pico │ 264KB │ 2MB │ 133MHz │
│ STM32F4シリーズ │ 192KB │ 1MB │ 168MHz │
│ STM32H7シリーズ │ 1MB │ 2MB │ 480MHz │
│ nRF52840 │ 256KB │ 1MB │ 64MHz │
│ ESP32 │ 520KB │ 4MB+ │ 240MHz │
│ Cortex-M55+ │ 数MB │ 数MB │ 800MHz+ │
│ NPU │ │ │ │
└──────────────────┴──────────┴──────────┴───────────────┘
TFLite Microのメモリ構成
TinyMLの実装では、RAMをどう使うかが最重要です。TFLite Microでは「テンソルアリーナ」と呼ばれる静的メモリプールを使用します。
┌─────────────────────────────────────┐ ← テンソルアリーナ(静的確保)
│ テンソルメタデータ │
├─────────────────────────────────────┤
│ 中間テンソルバッファ │
│ (レイヤー間で再利用される) │
├─────────────────────────────────────┤
│ 入力テンソル │
├─────────────────────────────────────┤
│ 出力テンソル │
└─────────────────────────────────────┘
↑
malloc不使用(ヒープなし環境対応)
サポートされる演算子
TFLite Microは全演算子ではなく、組み込みで必要な主要演算子のみを選択的に登録します。
// 必要な演算子だけを登録(バイナリサイズを最小化)
tflite::MicroMutableOpResolver<10> resolver;
resolver.AddConv2D();
resolver.AddDepthwiseConv2D();
resolver.AddFullyConnected();
resolver.AddMaxPool2D();
resolver.AddAveragePool2D();
resolver.AddReshape();
resolver.AddSoftmax();
resolver.AddRelu();
resolver.AddAdd();
resolver.AddMul();
動作原理
TinyML開発フロー
① データ収集
センサー(加速度・マイク・カメラ)でデータ収集
↓
② データ前処理・ラベリング
Edge Impulse / Python スクリプト
↓
③ モデル設計・学習(クラウドまたはPC)
TensorFlow / PyTorch / Keras
↓
④ モデル変換・最適化
TFLite変換 → 量子化(INT8)→ C配列化
↓
⑤ マイコンへのデプロイ
Arduino IDE / PlatformIO / STM32CubeIDE
↓
⑥ デバイス上で推論実行
モデルのC配列への変換
TFLite Microでは、モデルをフラッシュメモリに書き込むためにC配列形式に変換します。
# TFLiteモデルをC配列に変換
xxd -i model.tflite > model_data.cc
# 生成されるファイルの例(model_data.cc)
// model_data.cc(自動生成)
const unsigned char g_model_data[] = {
0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33,
// ... 数KB〜数百KBのバイナリデータ ...
};
const unsigned int g_model_data_len = 12345;
メモリ使用量の見積もり
# モデルのメモリ要件を推定するスクリプト
import tensorflow as tf
def estimate_tflite_memory(tflite_path):
interpreter = tf.lite.Interpreter(tflite_path)
interpreter.allocate_tensors()
# 各テンソルのサイズを合計
total_tensor_size = 0
max_tensor_size = 0
for tensor in interpreter.get_tensor_details():
size = 1
for dim in tensor['shape']:
size *= dim
size *= tensor['dtype'].itemsize
total_tensor_size += size
max_tensor_size = max(max_tensor_size, size)
print(f"推定テンソルアリーナ: {total_tensor_size // 1024}KB")
print(f"モデルファイルサイズ: "
f"{len(open(tflite_path,'rb').read()) // 1024}KB")
用途・ユースケース
音声・オーディオ処理
ウェイクワード検出はTinyMLの代表的な用途です。スマートスピーカーのウェイクワード検出は常時動作する必要があり、数十mWの消費電力で動作するTinyMLが最適です。
マイク入力 → MFCC特徴量抽出 → DS-CNN推論 → "起動ワード検出!"
↑
数十KBのRAMで動作可能
モーション・振動解析
加速度センサーやジャイロセンサーのデータから動作を認識します。
| 用途 | センサー | モデルタイプ |
|---|---|---|
| 手書き文字認識 | 加速度計 | LSTM / 1D-CNN |
| 転倒検知 | 加速度計 | SVM / 小型DNN |
| 機器振動監視 | 加速度計 | オートエンコーダ |
| 歩行解析 | IMU | CNN |
画像・ビジョン
小型カメラモジュール(例:OV2640)を使った超軽量ビジョンAIも実用化されています。
VGA画像(640×480)
↓ ダウンサンプリング
96×96 グレースケール
↓ MobileNet Nano推論
クラス分類(数十ms)
環境センシング
温度・湿度・CO2・VOCセンサーのデータから環境異常を検知します。バッテリー動作で数年間稼働するため、TinyMLの低消費電力特性が活きます。
実装・開発のポイント
Edge Impulseを使った開発
Edge Impulseはブラウザベースのend-to-end TinyML開発プラットフォームで、データ収集から学習・デプロイまでを統合します。
# CLIインストール
npm install -g edge-impulse-cli
# デバイスをEdge Impulseに接続
edge-impulse-daemon
# プロジェクトのArduinoライブラリとしてエクスポート
# → Arduino IDE でそのまま使用可能
消費電力の最適化
// マイコンでの省電力推論パターン
void low_power_inference_loop(void) {
while (1) {
// スリープ(センサー割り込みを待つ)
__WFI(); // Wait For Interrupt (ARM Cortex-M)
if (sensor_triggered) {
// センサーデータ読み取り
read_sensor_data(input_buffer);
// 推論実行
interpreter->Invoke();
// 結果に基づくアクション
float score = output->data.f[0];
if (score > THRESHOLD) {
trigger_action();
}
sensor_triggered = false;
}
}
}
モデル最適化チェックリスト
TinyML開発で精度とリソースのバランスを取るために確認すべき点を示します。
-
モデルアーキテクチャの選択
- MobileNetV1/V2(画像分類)
- DS-CNN(音声)
- 1D-CNN(時系列)
- ポイントワイズ・デプスワイズ畳み込みを活用
-
量子化の適用
- まずはダイナミックレンジ量子化(最も簡単)
- 次にINT8完全量子化(最も高速)
-
モデルプルーニング
- 重みのスパース化で20〜50%の削減
-
知識蒸留(Knowledge Distillation)
- 大きい教師モデルの知識を小さい生徒モデルに転移
他技術との比較
| 比較軸 | TinyML | 通常のエッジAI | クラウドAI |
|---|---|---|---|
| 対象デバイス | MCU(RAM数十KB) | SBC・GPU搭載デバイス | サーバー |
| RAM要件 | 〜1MB | 数GB | 無制限 |
| 消費電力 | μW〜mW | 数W〜数十W | kW級 |
| 遅延 | 数ms〜数百ms | 1〜100ms | 10ms〜秒 |
| モデル精度 | 低〜中 | 中〜高 | 最高 |
| デバイス単価 | 数十〜数百円 | 数千〜数万円 | (クラウド従量課金) |
TinyMLはエッジAIの中でも特に制約の厳しいデバイスを対象とし、量子化・プルーニング・TensorFlow Liteなどの技術と密接に連携します。ARM Cortex-Mマイコンがメインターゲットとなる点が、他のエッジAI技術との大きな違いです。