在 ESP32-S3 上跑 AI 模型:ESP-SR、ESP-DL、TFLite Micro 怎麼選?
在 MCU 上跑 AI 模型(TinyML、Edge AI)已經不是新鮮事。而 ESP32-S3 是目前最容易入手的選擇之一:一顆幾美元的晶片,內建 Wi-Fi 和藍牙,還有能加速神經網路運算的向量指令。
這篇不從零教學,而是整理開始動手前最需要知道的事:S3 能做到什麼程度、該用哪個框架、模型要怎麼塞進去。
ESP32-S3 的 AI 能力從哪裡來
| 項目 | 規格 |
|---|---|
| CPU | 雙核 Xtensa LX7,最高 240 MHz |
| AI 加速 | 向量(SIMD)指令,用於加速神經網路與訊號處理 |
| 內部記憶體 | 512 KB SRAM、384 KB ROM |
| 外部記憶體 | 支援 Octal SPI 的 Flash 與 PSRAM(例如 ESP32-S3-WROOM-2 模組最高 32 MB Flash、16 MB PSRAM) |
要特別注意的是:S3 沒有獨立的 NPU。它的 AI 加速來自 CPU 的向量指令,一次可以對多筆資料做相同的運算,非常適合卷積、矩陣乘法這類工作。但你不會直接寫這些指令,而是透過 Espressif 已經最佳化好的函式庫,例如 ESP-NN、ESP-DSP 和 ESP-DL,間接使用。
這個加速效果有多大?以 Espressif 官方的 TFLite Micro 範例為例,在 ESP32-S3(240 MHz)上執行人物偵測模型:
| 設定 | 單次推論時間 |
|---|---|
| 不使用 ESP-NN 最佳化 | 2,300 ms |
| 使用 ESP-NN 最佳化 | 54 ms |
同一個模型、同一顆晶片,速度差了四十倍以上。有沒有用到最佳化的運算核心,比模型本身的選擇影響更大。
三條路線怎麼選
Espressif 官方提供三套工具,各自適合不同的需求:
| 路線 | 適合 | 你需要做的事 |
|---|---|---|
| ESP-SR | 喚醒詞、語音指令 | 幾乎不用碰模型,直接用官方訓練好的 |
| ESP-DL | 影像辨識、物件偵測、自己的模型 | 把 PyTorch / ONNX 模型量化成 ESP-DL 格式 |
| TFLite Micro | 已經在用 TensorFlow 生態系 | 把模型轉成 int8 的 .tflite |
路線 1:ESP-SR,語音應用的最短路徑
如果你要做的是「說『嗨,樂鑫』就喚醒裝置,再說『打開燈』來控制」這類應用,不需要自己訓練模型。ESP-SR 已經包好了完整的語音處理流程:
- AFE(音訊前端):回音消除、雜訊抑制、語音活動偵測、盲源分離
- WakeNet:喚醒詞偵測
- MultiNet:語音指令辨識,支援中文和英文,最多 300 條指令。最方便的是,新增指令不需要重新訓練模型,直接設定指令文字就好
MultiNet 只支援 S3、P4 等有足夠運算資源的晶片。想做離線語音控制的 IoT 裝置,這是 S3 最成熟的應用。
路線 2:ESP-DL,影像與自訂模型
ESP-DL 是 Espressif 自己的深度學習推論框架,支援 ESP32-S3 與 ESP32-P4,需要 ESP-IDF v5.3 以上。它的流程是:
PyTorch / TensorFlow 模型
│ 匯出
▼
ONNX
│ ESP-PPQ 量化(pip install esp-ppq)
▼
.espdl 模型檔
│ ESP-DL API 載入與推論
▼
ESP32-S3
幾個特點:
- 量化:支援 8-bit(w8a8)、16-bit(w16a16),以及權重 8-bit、激活值 16-bit 的混合量化(w8a16)。精度掉太多的層可以改用 16-bit,速度和精度之間有比較大的調整空間
- 模型格式:
.espdl以 FlatBuffers 為基礎,可以直接用 Netron 開啟檢視 - 官方範例:包括 YOLO11n 物件偵測、貓咪偵測、OCR 等,可以直接拿來改
- 持續最佳化:Espressif 在 2026 年 5 月的更新中表示,MobileNetV2 與 YOLO11 在 ESP32-S3 上提速超過 3 倍;卷積運算也支援雙核心排程
開始轉換自己的模型之前,先查 ESP-DL 的運算子支援清單。模型裡只要有一個不支援的運算子,就得回頭修改模型架構。這一步省不得。
路線 3:TFLite Micro,沿用 TensorFlow 生態系
如果你已經熟悉 TensorFlow,或者想用網路上大量的 TinyML 教學與範例,esp-tflite-micro 是最順的選擇。它把 Google 的 TensorFlow Lite for Microcontrollers 移植到 ESP-IDF,並且預設就會用 ESP-NN 加速,也就是上面那個從 2,300 ms 變成 54 ms 的範例。
用 ESP-IDF 的元件管理器加入專案,或直接從官方範例建立新專案:
idf.py add-dependency "esp-tflite-micro"
# 從範例建立專案:hello_world、micro_speech、person_detection
idf.py create-project-from-example "esp-tflite-micro:person_detection"
在電腦上用 TensorFlow 訓練好模型後,轉成全整數量化的 .tflite:
import tensorflow as tf
def representative_data():
# 提供數百筆真實輸入,讓轉換器估算每一層的數值範圍
for sample in calibration_samples:
yield [sample[None, ...].astype("float32")]
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_data
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.int8
converter.inference_output_type = tf.int8
with open("model.tflite", "wb") as f:
f.write(converter.convert())
representative_data 一定要用真實的資料,而不是隨機數。量化的精度取決於轉換器看到的數值範圍是否接近實際情況。
把模型塞進 MCU 的實務要點
1. 記憶體預算才是真正的限制
在 MCU 上,比起「算得夠不夠快」,更常遇到的問題是「放不放得下」。模型需要的記憶體分成兩部分:
- 權重:模型參數。量化成 int8 後,大小約等於參數數量(每個參數 1 byte)。可以放在 Flash 或 PSRAM
- 中間運算結果:各層的輸入輸出,也就是 TFLite Micro 的 tensor arena。放在內部 SRAM 最快,但 SRAM 總共只有 512 KB,還要分給 Wi-Fi、藍牙和你的應用程式
影像和語音應用幾乎都需要 PSRAM。挑開發板時,選有 8 MB 以上 PSRAM 的版本(例如型號帶 R8 的 ESP32-S3),可以省掉很多麻煩。
2. 一律量化成整數
浮點模型在 S3 上又大又慢。int8 量化能讓模型大小縮小到約四分之一,而且只有整數運算才吃得到向量指令的加速。如果量化後精度下降太多,可以考慮:
- 改用量化感知訓練(QAT),讓模型在訓練時就適應量化誤差。ESP-DL 的 YOLO11n 範例就是用 QAT
- 在 ESP-DL 中把敏感的層改用 16-bit
3. 從小模型開始
MCU 上適合的是專門為邊緣裝置設計的架構,例如 MobileNet、YOLO 的 nano 版本,或者自己設計的小型 CNN。先確認小模型在晶片上跑得動、精度可以接受,再逐步加大,而不是把電腦上的大模型硬塞進去。
輸入解析度也是重要的調整旋鈕:影像從 224×224 降到 96×96,運算量大約少了五倍。
4. 在晶片上量測,不要只看電腦上的結果
量化後的精度、實際推論時間、記憶體峰值,都要在 ESP32-S3 上實際量測。電腦上的 int8 模擬結果,和晶片上的實際表現不一定一致。
S3 適合做什麼、不適合做什麼
適合:
- 離線語音控制:喚醒詞與指令辨識(ESP-SR)
- 低解析度影像:人物偵測、簡單物件偵測、人臉偵測
- 感測器資料:振動異常偵測、手勢辨識、預測性維護
- 對隱私或網路有要求的場景:資料不必上傳雲端
不適合:
- 大型語言模型(LLM):記憶體差了好幾個數量級
- 高解析度、高幀率的即時影像分析
- 需要頻繁更換大型模型的應用
如果需要更強的運算能力,Espressif 的 ESP32-P4 是下一個選擇。ESP-DL 同樣支援它,可以沿用相同的工具鏈。
小結
在 ESP32-S3 上跑 AI,最重要的不是追求最新的模型,而是:
- 選對路線:語音用 ESP-SR,影像或自訂模型用 ESP-DL,TensorFlow 使用者用 TFLite Micro
- 確保用到最佳化的運算核心:有沒有用到最佳化,速度可以差四十倍
- 先算記憶體預算:決定模型大小的,通常是記憶體而不是運算速度
- 一律量化、在晶片上量測
一顆幾美元的 MCU 能在本地完成語音辨識或物件偵測,對 IoT 產品來說,代表更低的延遲、更低的雲端成本,也讓資料不必離開裝置。
資料來源
- Espressif:ESP32-S3 產品頁、ESP32-S3 技術規格書(中文)
- GitHub:espressif/esp-dl、ESP-DL 文件
- GitHub:espressif/esp-tflite-micro
- GitHub:espressif/esp-sr
- CNX Software:ESP32-S3 dual-core WiFi and Bluetooth LE 5 SoC supports AI acceleration for AIoT applications