v4.5.6

v4.5.6 是重大的機器學習版本。TensorFlow 的 tf C 模組已被全新的、與引擎無關的 ml 套件取代,後者以 TensorFlow Lite Micro (TFLM) 為基礎;影像→張量的轉換改由 image.to_ndarray() 處理,雙核心開發板則改用 Open-AMP。本版本包含數項破壞性變更——升級 ML 指令碼前請先閱讀以下說明。

重點摘要

  • 全新 ml 套件——舊有的 tf 模組已重寫為與引擎無關的 ml 套件(ml.Modelml.preprocessingml.utilsml.apps);tf 仍保留作為別名。

  • TFLM 後端——已淘汰的 libtf 改用基於上游的 TensorFlow Lite Micro:推論速度提升約 20%,函式庫也更小。

  • Open-AMP 雙核心——GIGA 與 Portenta H7 現在使用 Open-AMP/RPMsg 進行 M7/M4 核心間通訊(舊有的 CM4 機制已移除)。

  • 內建藍牙——已在 Nicla Vision、Portenta H7 與 GIGA 上啟用 CYW43 藍牙韌體。

  • MicroPython 1.23.0、ulab 6.5.2(支援 4 維 ndarray)。

  • 破壞性變更:ML API 有大幅變動,且大多數開發板預設停用 Haar 級聯分類器——請參閱破壞性變更說明。

新功能

  • ml 套件——ml.Model 具備 predict()roicallback、多輸入清單)、各張量的 shape/dtype/scale/zero-point 屬性、ml.preprocessing.Normalizationml.utils(NMS),以及 ml.apps(純 Python 的 MicroSpeech 關鍵字辨識器,具備 listen() 與非阻塞式 timeout=-1 串流,外加 draw_predictions())。

  • 內建模型系統——列於 models/index.txt 中的模型會依各開發板有條件地嵌入(所有 ML 開發板皆內建 FOMO,具備麥克風的開發板則內建音訊模型)。

  • image.to_ndarray(dtype, buffer=...)——將影像轉換為 ulab ndarray(可選擇原地轉換)。

  • 從原始陣列建立 Image()——新增 shape=strides=scale= 關鍵字引數,可從原始像素清單建立灰階/RGB565 影像。

  • 具抗鋸齒效果的 draw_circle()

  • ssl 模組已凍結至 GIGA、Nicla Vision、Portenta H7、Nano RP2040 Connect、OpenMV 4/4P/PRO/PT、RT1060 與 Pico 的韌體中。

  • 音訊——audio.init() 新增 samples= 關鍵字(每聲道的 PDM 取樣數);gain_db 現在可套用於 DFSDM 麥克風(例如 Nicla Vision)。

  • 除錯協定——新增 GET_STATE 命令,可在單一封包中回傳執行/文字/JPEG 旗標、影格幾何資訊與文字,減少與主機端的往返次數。

  • Open-AMP vuart 範例,用於核心間通訊。

其他變更與改進

  • MicroPython 已更新至 1.23.0;ulab 更新至 6.5.2,並支援 4 維 ndarray。

  • 更快的推論——ML 後端會在多次呼叫間保留持久狀態/記憶體(約快 20%,並支援 LSTM 類型的模型)。

  • get_similarity() 已在 draw_image 後端上重新實作(支援更廣泛的格式/運算)。

  • morph()mean() 濾波器系列已改為關鍵字引數解析;mask= 現在可接受可變影像。

  • 記憶體配置已重新設計——DMA 區域以 2 的次方對齊、可重新排序的 GC 區塊、多個堆積;在低 RAM 開發板上可減少早期堆積碎片化;RT1060 獲得額外的 GC 堆積。

  • WiFi (CYW43) 現在會在軟重置時取消初始化;SPI-TV 顯示器僅從快取中清除影格緩衝區區域,以獲得更流暢的更新。

錯誤修正

相機與感測器:

  • 修正在 STM32 與 i.MX RT 上影格緩衝區/感測器路徑中意外的 CPU 快取失效問題,此問題可能損毀影像資料。

  • 修正 i.MX RT 開發板上 MLX90640/MLX90641 熱感 I2C 讀取問題(大型傳輸現在會分塊處理)。

機器學習:

  • 修正 ml.Modelload_to_fb 處理、輸入 bytearray 大小計算、ndarray ndim 檢查,以及 Normalization 的影像格式/形狀驗證。

影像 / 系統:

  • 新增遺漏的 image.BLACK_BACKGROUND 繪製提示常數,以及影像/張量緩衝區長度的健全性檢查。

  • 修正可能讓回收器釋放使用中緩衝區的 FIR 與音訊 GC 根指標問題。

  • Servo Shield 範例現在使用 SoftI2C,因此可在 OpenMV RT 開發板上運作。

硬體與開發板支援

  • Arduino GIGA——HM01B0 / HM0360 感測器支援;Open-AMP 雙核心。

  • 藍牙——Nicla Vision、Portenta H7 與 GIGA 上的 CYW43 BT 韌體。

  • Portenta H7——Open-AMP M7/M4 RPMsg。

  • OpenMV RT1060——額外的 GC 堆積區塊(更多 Python 記憶體)。

破壞性 API 變更

v4.5.5 與 v4.5.6 之間的使用者可見 API 破壞性變更。範圍:modules/ 中的 Python C 模組與 scripts/libraries/ 中的 Python 函式庫。

每項變更皆標註其影響程度:

  • major(重大)——大多數使用到它的指令碼都需要修改。

  • minor(次要)——API 範圍狹窄;僅影響使用到它的指令碼。

  • behavior(行為)——API 相同但結果不同;請重新檢查經過調校的指令碼。

  • tooling(工具鏈)——影響雙核心/開發板機制,而非 Python API。

變更依影響程度按該順序分組。若您只想移植程式碼,請直接跳至結尾的 遷移檢查清單。每個提交雜湊皆連結至其在 GitHub 上的差異。

tf 模組由 ml 套件取代 (major)

TensorFlow 的 tf C 模組已重寫為與引擎無關的 ml 套件(tf 仍保留作為向後相容的別名,但新程式碼應使用 ml)。模組層級的 tf.loadtf.load_builtin_model 函式以及 detect()/segment()/分類方法皆已移除——請建構 ml.Model 並呼叫 predict()ml.Model(path) 現在只回傳模型(不再回傳 (labels, model) 元組);標籤改為 model.labels 屬性。predict() 現在回傳 ulab ndarray(而非浮點數元組),支援多輸入模型(傳入清單),NMS 已移至 ml.utils;輸入正規化則移至 ml.preprocessing.Normalization。舊有的 ml.py 現在是 ml.apps

提交: c7228cbb46c212409c3e37f46db9a186f4e270b89f4743f8491cb04506682c28b38f3837

image.unpack() 已移除——請使用 to_ndarray() (major)

短暫存在的 image.unpack() 已移除;請改用 image.to_ndarray(dtype, buffer=...) 將影像轉換為張量,並使用 ml.preprocessing.Normalization 套用 scale/mean/stdev 正規化,而非舊有的內建影像縮放路徑。

提交: 9848eed12de0d46fa6

Image() 原始陣列的 scale 引數 (minor)

從原始像素陣列建構 Image 時,scale 引數現在接受 (min, max) 範圍,而非 (scale, add)

提交: 7b79fb4c7

大多數開發板預設停用 Haar 級聯分類器 (behavior)

為了釋放快閃記憶體空間,Haar 級聯人臉偵測(find_features() / image.HaarCascade())現在在 Arduino GIGA、Nicla Vision、Portenta H7、OpenMV 3、OpenMV 4 / 4 Plus / PRO 與 OpenMV Pure Thermal 上預設停用。在這些開發板上使用 Haar 級聯分類器的指令碼,必須在啟用該功能的情況下重新建置韌體。

提交: 6ce27c910

指令碼中斷與張量縮放 (behavior)

USB 除錯器現在透過 MicroPython 的 VM-abort 功能來中斷執行中的指令碼,而非強制 PendSV 跳轉(更乾淨,但中斷點有所不同)。SCALE_S128_127 輸入縮放已修正,可將 0–255 對應至 −128–127 而不會產生錯誤增益——依賴舊有(不正確)縮放方式的模型將產生不同的結果。

提交: e758a0f95a4d97c572

CM4 共處理器由 Open-AMP 取代 (tooling)

GIGA / Nicla Vision / Portenta H7 上已棄用的 CM4 共處理器韌體機制已移除,並由 Open-AMP/RPMsg 取代。雙核心程式碼必須改用 Open-AMP 模型(已提供 vuart 範例)。

提交: 3cc57fea493f2d4c41

遷移檢查清單

若要乾淨地移植至 v4.5.6,通常的工作為:

  1. 將 ML 程式碼移植至 ml:建構 ml.Model(path)、呼叫 predict()、讀取 model.labels、預期 ndarray 輸出,並將正規化移至 ml.preprocessing.Normalization、NMS 移至 ml.utilsml 套件變更)。

  2. image.to_ndarray() 取代 image.unpack()unpack 移除)。

  3. 將任何 Image() 原始陣列的 scale 引數更新為 (min, max) 範圍(Image scale 變更)。

  4. 若您在受影響的開發板上使用 Haar 級聯分類器,請在啟用該功能的情況下重新建置(Haar 級聯變更)。

  5. 重新驗證依賴 SCALE_S128_127 的模型(縮放變更)。

  6. 將雙核心程式碼移至 Open-AMP(CM4 變更)。