v4.5.6¶
v4.5.6 是重大的機器學習版本。TensorFlow 的 tf C 模組已被全新的、與引擎無關的 ml 套件取代,後者以 TensorFlow Lite Micro (TFLM) 為基礎;影像→張量的轉換改由 image.to_ndarray() 處理,雙核心開發板則改用 Open-AMP。本版本包含數項破壞性變更——升級 ML 指令碼前請先閱讀以下說明。
重點摘要¶
全新
ml套件——舊有的tf模組已重寫為與引擎無關的ml套件(ml.Model、ml.preprocessing、ml.utils、ml.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()(roi、callback、多輸入清單)、各張量的 shape/dtype/scale/zero-point 屬性、ml.preprocessing.Normalization、ml.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.Model的load_to_fb處理、輸入bytearray大小計算、ndarrayndim檢查,以及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.load、tf.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。
提交: c7228cbb4、6c212409c、3e37f46db、9a186f4e2、70b89f474、3f8491cb0、4506682c2、8b38f3837
image.unpack() 已移除——請使用 to_ndarray() (major)¶
短暫存在的 image.unpack() 已移除;請改用 image.to_ndarray(dtype, buffer=...) 將影像轉換為張量,並使用 ml.preprocessing.Normalization 套用 scale/mean/stdev 正規化,而非舊有的內建影像縮放路徑。
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 而不會產生錯誤增益——依賴舊有(不正確)縮放方式的模型將產生不同的結果。
CM4 共處理器由 Open-AMP 取代 (tooling)¶
GIGA / Nicla Vision / Portenta H7 上已棄用的 CM4 共處理器韌體機制已移除,並由 Open-AMP/RPMsg 取代。雙核心程式碼必須改用 Open-AMP 模型(已提供 vuart 範例)。
遷移檢查清單¶
若要乾淨地移植至 v4.5.6,通常的工作為:
將 ML 程式碼移植至
ml:建構ml.Model(path)、呼叫predict()、讀取model.labels、預期ndarray輸出,並將正規化移至ml.preprocessing.Normalization、NMS 移至ml.utils(ml 套件變更)。以
image.to_ndarray()取代image.unpack()(unpack 移除)。將任何
Image()原始陣列的scale引數更新為(min, max)範圍(Image scale 變更)。若您在受影響的開發板上使用 Haar 級聯分類器,請在啟用該功能的情況下重新建置(Haar 級聯變更)。
重新驗證依賴
SCALE_S128_127的模型(縮放變更)。將雙核心程式碼移至 Open-AMP(CM4 變更)。