建構及轉換模型

微控制器的 RAM 和儲存空間有限,因此機器學習模型的大小會受到限制。此外,微控制器專用的 LiteRT 目前僅支援部分運算,因此並非所有模型架構都適用。

本文說明如何轉換 TensorFlow 模型,以便在微控制器上執行。此外,這份文件也列出支援的作業,並提供一些指引,說明如何設計及訓練模型,使其能放入有限的記憶體。

如需建構及轉換模型的端對端可執行範例,請參閱「Hello World」範例。

模型轉換

如要轉換經過訓練的 TensorFlow 模型,以便在微控制器上執行,請使用 LiteRT 轉換工具 Python API。這會將模型轉換為 FlatBuffer,縮減模型大小,並修改模型以使用 LiteRT 運算。

如要盡可能縮減模型大小,建議使用訓練後量化

轉換為 C 陣列

許多微控制器平台不支援原生檔案系統。如要從程式中使用模型,最簡單的方法是將模型納入 C 陣列,並編譯到程式中。

下列 Unix 指令會產生 C 來源檔案,其中包含 LiteRT 模型做為 char 陣列:

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

模型架構和訓練

設計要在微控制器上使用的模型時,請務必考量模型大小、工作負載和所用的作業。

模型大小

模型必須夠小,才能與程式的其餘部分一起裝入目標裝置的記憶體,包括二進位檔和執行階段。

如要建立較小的模型,可以在架構中使用較少且較小的層。不過,小型模型較容易出現欠擬合問題。也就是說,對於許多問題,嘗試使用可容納於記憶體中的最大模型是合理的做法。不過,使用較大的模型也會導致處理器工作負載增加。

工作負載

模型的大小和複雜程度會影響工作負載。大型複雜模型可能會導致工作週期較長,也就是說,裝置的處理器會花費更多時間工作,閒置時間較少。這會增加耗電量和熱輸出,視應用程式而定,這可能會有問題。

作業支援

微控制器適用的 LiteRT 目前僅支援少部分的 TensorFlow 運算,因此可執行的模型架構有限。我們正努力擴大作業支援範圍,包括參考實作項目和特定架構的最佳化。

如要查看支援的作業,請參閱檔案 micro_mutable_ops_resolver.h