エッジAIに使用されているモデルとは?
そもそもどんな目的で使用するかが重要なので、そこを整理。
- 画像認識
ある画像に対してその画像が何を表しているのかを認識するもの。物体検知とかとは違って、画像内のどこに何が移っているかを判断する必要がなく、画像が何を映しているかだけを検知できれば良い。 - 物体検知
画像内のどこに何が映っているかを検知する。 - 音声認識
音声を検知して、分類。何を話しているのか、どのワードを使用しているのかなどを検知する。
使用されるモデルについて
画像認識
- MobileNetV1/V2/V3
Google開発。高精度かつ非常に軽量(スマホ/マイコンでも動作) - EfficientNet-Lite
パラメータ数と精度のバランスが良い。TFLite対応 - SqueezeNet
非常に小型(AlexNetの50分の1)でエッジ実装向き - TinyMLモデル
特にMCUやRaspberry Pi Zero向けに最適化された分類モデル
モデル名 | パラメータ数 | モデルサイズ | 精度(Top-1) | 特徴 |
---|---|---|---|---|
MobileNetV2 | 約3.4M | ~14MB | 約71-72% | スマホ向けに最適化、速度と精度のバランス◎ |
EfficientNet-Lite | 約4-6M | ~20MB | 約75-78% | 高精度で軽量、拡張性あり |
SqueezeNet | 約1.3M | ~5MB | 約57% | 非常に小さい、やや精度は低め |
TinyML(独自) | 数十KB〜 | <1MB | 簡易分類向け | MCU(マイコン)でも動作可能 |
エッジをどこまでと定義するかによるけど、精度を担保しつつやりたいのであれば、EfficientNetくらいは必要かも。
モバイルデバイスだけではなくてラズパイ5やもっと小さいもので動かしたいのであれば、軽量化がもっと必要。
物体検知(Object Detection)
- YOLOv4-Tiny / YOLOv5-Nano
高速・高精度で小型化されたYOLO系。Jetsonなどでリアルタイム動作可能 - SSD-MobileNet
MobileNetと組み合わせた軽量物体検出器。TensorFlow Liteでも動作可能 - NanoDet
超軽量で高速(モバイル向け)。エッジデバイスでの活用事例が多い - CenterNet-Lite
主に人物検知などで使われる、構造簡略化された検出モデル
モデル名 | FPS(Jetson Nano) | モデルサイズ | 特徴 |
---|---|---|---|
YOLOv4-Tiny | 約25-30 FPS | ~20MB | 高速検出、GPU向き |
YOLOv5-Nano | 約30 FPS | ~4-6MB | 精度・速度・サイズのバランス良し |
SSD + MobileNet | 約15-20 FPS | ~6-12MB | TFLite対応、Androidに好適 |
NanoDet | 約30+ FPS | ~2MB | 超小型、ONNX・モバイル向け |
ラズパイ5でAIアクセラレータを載せた状態であればYoloとかも動くらしい。
マイコンだとそもそも物体検知は厳しいかも。だからこそマイコンで物体検知してみたいんだけど、、、
音声認識
- DS-CNN(Depthwise Separable CNN)
TinyML対応の音声認識モデル。超小型デバイスでリアルタイム処理可能 - TCResNet / MobileNet (Audio版)
時間領域に特化した構造で、音声を低コストで処理 - tiny_wake_word(Google)
非常に軽量なキーワード検出(例:「Hey Siri」などのトリガー検出) - Whisper (小型版)
OpenAIの音声認識モデルの軽量版。エッジ対応には最適化が必要
モデル名 | モデルサイズ | キーワード検出精度 | 特徴 |
---|---|---|---|
DS-CNN | 数百KB | 高 | MCUでの音声認識に最適、小型 |
TCResNet | 数MB | 高 | TFLite対応、応答速度速い |
tiny_wake_word | 数百KB | 中〜高 | 単語単位(OK Googleなど)検出用 |
Whisper (small) | ~40MB以上 | 非常に高(多言語) | 高精度、ただし重め、軽量化必要 |
音声認識あまり詳しくないけど、画像よりもかなりモデルサイズが小さい。(モデルによるけど)
いろいろこの辺は実装してみないとわからないかも
まとめ
今回、自分がエッジAIに何を実装しようか迷っているためまとめてみた。
これからの予定を簡単にまとめておきたい。
- ラズパイで画像認識を行う。
(モデルはResnet8かEfficientNetで検討。) - ラズパイで物体検知を行う。
(SSDの予定。中にどのような層を組み込むかは現在未定) - ボトルネックを算出。
(モデルの大きさなのか、計算力なのか、電力なのか) - FPGAで外装したら早くなりそうな部分について検討。
(ないかも。そもそもデータ転送でかなりレイテンシを食ってしまいそう。SPI通信とかでどうにかなるものなのか?レイテンシの隠蔽とかも検討必要かも) - FPGAで実装。機能確認
- ラズパイとFPGAを組み合わせて効果の確認
こんなことを3カ月くらいでやりたいなぁ。多分、ボトルネックとFPGA実装がめっちゃ時間かかりそう。(Verilogもちょっとしかやったことないし。。。)