微控制器的 RAM 和儲存空間有限,因此對機器學習模型的大小設有限制。此外,TensorFlow Lite for Microcontrollers 目前支援部分作業,因此並非所有模型架構都能提供。
本文件說明如何轉換 TensorFlow 模型,以便在微控制器上執行。其中也會概述支援的作業,並提供一些指引,讓您瞭解如何設計及訓練模型,以因應有限的記憶體容量。
如需建構及轉換模型的端對端範例,請參閱 Hello World 範例。
模型轉換
如要將經過訓練的 TensorFlow 模型轉換為在微控制器上執行,建議您使用 TensorFlow Lite 轉換工具 Python API。這項操作會將模型轉換為 FlatBuffer
、縮減模型大小,並修改模型以使用 TensorFlow Lite 作業。
如要取得最小的模型大小,請考慮使用訓練後的量化。
轉換為 C 陣列
許多微控制器平台都不支援原生檔案系統。如要在程式中使用模型,最簡單的方法是將其納入為 C 陣列,然後編譯至程式中。
下列 Unix 指令會產生 C 來源檔案,其中包含以 char
陣列顯示的 TensorFlow Lite 模型:
xxd -i converted_model.tflite > model_data.cc
輸出結果會與下列內容相似:
unsigned char converted_model_tflite[] = {
0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
// <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;
產生檔案後,您可以將其納入程式中。如要提高嵌入平台上的記憶體效率,請務必將陣列宣告變更為 const
。
如需在程式中加入及使用模型的範例,請參閱 Hello World 範例中的 hello_world_test.cc
。
模型架構和訓練
設計用於微控制器的模型時,請務必考量要使用的模型大小、工作負載和作業。
模型大小
模型必須夠小,才能與程式的其餘部分 (包括二進位檔和執行階段) 一起放置在目標裝置的記憶體中。
如要建立較小的模型,您可以在架構中使用較少與較小的層。不過,小型模型較可能出現配適不足的情況。這表示在有許多問題的情況下,建議您嘗試使用記憶體中最大的模型。不過,使用較大的模型也會增加處理器工作負載。
工作負載
模型的大小和複雜性會對工作負載產生影響。複雜的大型模型可能會導致任務週期較高,也就是裝置處理器在工作上花費的時間較多,閒置時間也較少。這會增加耗電量和熱源輸出,這可能是因應用程式本身的問題而存在問題。
作業支援
TensorFlow Lite for Microcontrollers 目前支援一部分的 TensorFlow 運算,這會影響可執行的模型架構。我們正在努力擴大作業支援範圍,包括參考實作和特定架構最佳化。
您可以在 micro_mutable_ops_resolver.h
檔案中查看支援的作業