TensorFlow是一個用於機器學習和人工智慧的免費的開源軟體庫,用於各種機器學習與數據處理任務,特別是深度神經網絡的訓練和推理。TensorFlow是由Google Brain團隊開發,最初主要用於Google內部的研究和生產,如語音識別、Gmail、相冊和搜索等。TensorFlow最初版本於2015年11月9日在Apache 2.0開源許可證下發布。
2017年5月,Google宣布了一個專門用於移動開發的軟體棧TensorFlow Lite,是針對移動設備和邊緣設備的輕量級解決方案。TensorFlow Lite 可以在 Android、iOS、Edge TPU 和 Raspberry Pi 等移動設備和嵌入式設備上進行推斷。
2019年5月,Google的Tensor Flow Lite Micro與ARM的uTensor宣布合併。uTensor可以將機器學習模型轉換為可讀和獨立的C++源文件,簡化了與任何嵌入式項目的集成,特別是為低功耗、資源受限的嵌入式設備而設計,支持廣泛的基於Arm Cortex-M內核的微控制器。
TensorFlow 平台及其生態系統
TensorFlow 是一個端到端的機器學習開源平台。由工具、庫和社區資源組成的全面、靈活的生態系統,使研究人員能夠推動機器學習最新技術的發展,開發人員能夠輕鬆構建和部署由機器學習驅動的應用。
針對不同的應用,TensorFlow提供了3種類型的庫:
-
TensorFlow (library) 是可以幫助開發和訓練機器學習模型的核心開源庫。
-
TensorFlow Lite 是用於在移動、微處理器和其他邊緣設備上部署模型的庫。
-
TensorFlow Lite Micro (TFLM) 是在DSP、微控制器和其他嵌入式目標上運行機器學習模型的庫,具有較小的內存占用和極低的功耗。
其中,TensorFlow Lite Micro 是 TensorFlow Lite 的一個移植版本,主要面向微控制器(MCU)、DSP(digital signal processors)和其他存儲資源受限的設備部署的機器學習模型。
TensorFlow Lite Micro可以直接在微控制器(MCU)上運行,不需要操作系統支持,也不需要任何標準 C/C++ 庫和動態內存分配。核心運行時(core runtime)在 Arm Cortex M3 上運行時僅需16KB字節的存儲空間。即使運行語音關鍵字檢測模型,也只需 22KB 字節的存儲空間。
利用TensorFlow生態系統的模型優化工具,並另有嵌入式專用的離線和在線優化工具,以減少模型和框架的內存占用。TensorFlow Lite Micro提供了工具、CI以及如何將其集成到各種嵌入式開發環境中的例子。
TensorFlow Lite Micro 支持的平台
適用於微控制器的 TensorFlow Lite Micro 用 C++ 11 編寫而成,需要使用 32 位平台。針對基於 Arm Cortex-M 系列架構的眾多處理器,它已經過了廣泛的測試,並已移植到其他架構(包括 ESP32)。
TensorFlow Lite Micro功能和組件:
-
C++ API,其運行時(runtime)在 Cortex M3 上僅需 16KB
-
使用標準的 TensorFlow Lite FlatBuffer 架構(schema)
-
為 Arduino、Keil 和 Mbed 等較為流行的嵌入式開發平台預生成的項目文件
-
針對多個嵌入式平台優化
-
演示口語熱詞檢測的示例代碼
支持的開發板包括:
-
Arduino Nano 33 BLE Sense - 基於 Nordic nRF52840 微控制器,Arm Cortex-M4內核,頻率64MHz,運行在 Arm® Mbed™ OS 上
-
SparkFun Edge - 基於Ambiq Micro Apollo3 Blue微控制器,ARM Cortex-M4F內核,頻率48MHz
-
STM32F746 Discovery kit - STMicroelectronics STM32F746NG微控制器,Arm® Cortex®-M7內核,頻率216MHz
-
Adafruit EdgeBadge - 基於Microchip ATSAMD51J19微控制器,ARM Cortex-M4F內核,頻率120MHz
-
Adafruit TensorFlow Lite for Microcontrollers Kit - 基於Microchip ATSAMD51J19微控制器,ARM Cortex-M4F內核,頻率120MHz
-
Adafruit Circuit Playground Bluefruit - 基於 Nordic nRF52840 微控制器,Arm Cortex-M4內核,頻率64MHz
-
Espressif ESP32-DevKitC - 基於樂鑫的ESP32微控制, Xtensa® 32-bit LX6內核, 主頻達 240 MHz
-
Espressif ESP-EYE - 基於樂鑫的ESP32-S3 SoC,Xtensa® 32 位 LX7內核,主頻達 240 MHz
-
Wio Terminal:ATSAMD51 - 基於Microchip ATSAMD51P19微控制器,ARM Cortex-M4F內核,頻率 120MHz
-
Himax WE-I Plus EVB Endpoint AI 開發板 - 基於奇景光電 HX6537-A處理器,Synopsys ARC® EM9D內核,頻率達400MHz
-
Synopsys DesignWare ARC EM 軟體開發平台 - ARC EM處理器和子系統
-
Sony Spresense - Sony 多核微處理器,基於ARM® Cortex®-M4F,頻率達156MHz
社區支持的TFLM例程:
-
Arduino
-
Coral Dev Board Micro - NXP RT1176 microcontroller, dual-core MCU with Cortex M7 and M4
-
Espressif Systems Dev Boards
-
Renesas Boards - Renesas Advanced (RA) 32-bit microcontrollers (MCUs) ,Arm® Cortex®-M33,up to 240MHz(RA8), 60MHz(RA2)
-
Silicon Labs Dev Kits - EFR32xG24 Dev Kit, ARM® Cortex®-M33, 78 MHz
-
Sparkfun Edge
-
Texas Instruments Dev Boards
社區支持的內核:
-
Cortex-M
-
Hexagon
-
RISC-V
-
Xtensa
TensorFlow Lite Micro 的工作流程
若要在微控制器上部署並運行 TensorFlow 模型,必須執行以下步驟:
-
訓練模型:
-
生成小型 TensorFlow 模型,該模型適合您的目標設備並包含支持的操作。
-
使用 TensorFlow Lite 轉換器轉換為 TensorFlow Lite 模型。
-
使用標準工具轉換為 C 語言字節數組,以將其存儲在設備上的只讀程序內存中。
-
-
使用 C++ 庫在設備上進行推斷並處理結果。
TensorFlow Lite Micro 的限制
適用於微控制器的 TensorFlow Lite 專為滿足微控制器開發的特定限制條件而設計。如果您使用的是更強大的設備(例如 Raspberry Pi 等嵌入式 Linux 設備),那麼標準 TensorFlow Lite 框架可能更易於集成。
應考慮以下限制:
-
支持的 TensorFlow 操作有限
-
支持的設備有限
-
需要手動管理內存的低階 C++ API
-
不支持設備端訓練