v4.5.6¶
v4.5.6 ist das große Machine-Learning-Release. Das TensorFlow-C-Modul tf wurde durch ein neues, engine-unabhängiges ml-Paket auf Basis von TensorFlow Lite Micro (TFLM) ersetzt, die Bild→Tensor-Konvertierung wurde nach image.to_ndarray() verschoben, und Dual-Core-Boards wurden auf Open-AMP umgestellt. Es gibt mehrere Breaking Changes — lesen Sie sie weiter unten, bevor Sie ML-Skripte aktualisieren.
Höhepunkte¶
Neues
ml-Paket — das altetf-Modul wurde in ein engine-unabhängigesml-Paket umgeschrieben (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfbleibt als Alias erhalten.TFLM-Backend — das veraltete
libtfwurde durch das Upstream-basierte TensorFlow Lite Micro ersetzt: ~20 % schnellere Inferenz und kleinere Bibliotheken.Open-AMP Dual-Core — GIGA und Portenta H7 nutzen jetzt Open-AMP/RPMsg für die M7/M4-Kommunikation zwischen den Kernen (der alte CM4-Mechanismus wurde entfernt).
Onboard-Bluetooth — CYW43-Bluetooth-Firmware auf Nicla Vision, Portenta H7 und GIGA aktiviert.
MicroPython 1.23.0, ulab 6.5.2 (mit Unterstützung für 4-D-ndarrays).
Breaking: die ML-API hat sich erheblich geändert und Haar-Kaskaden sind auf den meisten Boards standardmäßig deaktiviert — siehe die Breaking Changes.
Neue Funktionen¶
ml-Paket —ml.Modelmitpredict()(roi,callback, Liste mehrerer Eingaben), Pro-Tensor-Attributen für Shape/dtype/Scale/Zero-Point,ml.preprocessing.Normalization,ml.utils(NMS) undml.apps(ein reiner Python-MicroSpeech-Keyword-Spotter mitlisten()und nicht-blockierendemtimeout=-1-Streaming sowiedraw_predictions()).Integriertes Modellsystem — in
models/index.txtaufgeführte Modelle werden je nach Board bedingt eingebettet (FOMO auf allen ML-Boards, Audiomodelle auf Boards mit Mikrofonen).image.to_ndarray(dtype, buffer=...)— konvertiert ein Bild in ein ulab-ndarray (optional in-place).Image()aus rohen Arrays — neue Keyword-Argumenteshape=,strides=undscale=erzeugen Graustufen-/RGB565-Bilder aus rohen Pixellisten.Kantenglättendes
draw_circle().ssl-Modul in die Firmware eingefroren auf GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 und Pico.Audio —
audio.init()erhielt einsamples=-Keyword (PDM-Samples pro Kanal);gain_dbwirkt jetzt auch auf DFSDM-Mikrofonen (z. B. Nicla Vision).Debug-Protokoll — ein neuer
GET_STATE-Befehl liefert Run-/Text-/JPEG-Flags, Frame-Geometrie und Text in einem einzigen Paket und reduziert so die Host-Roundtrips.Open-AMP-vuart-Beispiel für die Kommunikation zwischen den Kernen.
Weitere Änderungen und Verbesserungen¶
MicroPython auf 1.23.0 aktualisiert; ulab auf 6.5.2 mit Unterstützung für 4-D-ndarrays.
Schnellere Inferenz — das ML-Backend behält persistenten Status/Speicher über Aufrufe hinweg bei (~20 % schneller, unterstützt LSTM-artige Modelle).
get_similarity()wurde auf demdraw_image-Backend neu implementiert (breitere Format-/Operationsunterstützung).morph()und diemean()-Filterfamilie wurden auf Keyword-Argument-Parsing umgestellt;mask=akzeptiert jetzt ein veränderbares Bild.Speicherlayout überarbeitet — DMA-Bereiche an Zweierpotenzen ausgerichtet, umordbare GC-Blöcke, mehrere Heaps; weniger frühe Heap-Fragmentierung auf Boards mit wenig RAM; RT1060 erhält zusätzlichen GC-Heap.
WLAN (CYW43) wird jetzt beim Soft-Reset deinitialisiert; das SPI-TV-Display leert nur den Framebuffer-Bereich aus dem Cache für flüssigere Aktualisierungen.
Fehlerbehebungen¶
Kamera und Sensoren:
Behebung einer versehentlichen CPU-Cache-Invalidierung im Framebuffer-/Sensor-Pfad auf STM32 und i.MX RT, die Bilddaten beschädigen konnte.
Behebung der MLX90640/MLX90641-Thermal-I2C-Reads auf i.MX-RT-Boards (große Übertragungen werden jetzt in Blöcke aufgeteilt).
Maschinelles Lernen:
Behebung der
ml.Model-Behandlung vonload_to_fb, der Größenbestimmung des Eingabe-bytearray, der ndarray-ndim-Prüfungen und derNormalization-Bildformat-/Shape-Validierung.
Bild / System:
Hinzufügen der fehlenden
image.BLACK_BACKGROUND-Zeichenhinweis-Konstante und einer Plausibilitätsprüfung der Bild-/Tensor-Pufferlänge.Behebung von FIR- und Audio-GC-Root-Pointern, die den Collector im Gebrauch befindliche Puffer freigeben lassen konnten.
Das Servo-Shield-Beispiel verwendet jetzt
SoftI2C, damit es auf OpenMV-RT-Boards funktioniert.
Hardware- und Board-Unterstützung¶
Arduino GIGA — HM01B0-/HM0360-Sensorunterstützung; Open-AMP Dual-Core.
Bluetooth — CYW43-BT-Firmware auf Nicla Vision, Portenta H7 und GIGA.
Portenta H7 — Open-AMP M7/M4 RPMsg.
OpenMV RT1060 — zusätzliche GC-Heap-Blöcke (mehr Python-Speicher).
Breaking-API-Änderungen¶
Für Benutzer sichtbare API-Brüche zwischen v4.5.5 und v4.5.6. Umfang: Python-C-Module in modules/ und Python-Bibliotheken in scripts/libraries/.
Jede Änderung ist mit ihrer Auswirkung gekennzeichnet:
major — die meisten Skripte, die es verwendet haben, müssen angepasst werden.
minor — schmale API; betrifft nur Skripte, die es verwendet haben.
behavior — gleiche API, andere Ergebnisse; getunte Skripte erneut prüfen.
tooling — betrifft Dual-Core-/Board-Mechanismen, nicht die Python-API.
Die Änderungen sind in dieser Reihenfolge nach Auswirkung gruppiert. Wenn Sie nur Ihren Code portieren möchten, springen Sie zur Migrations-Checkliste am Ende. Jeder Commit-Hash verlinkt auf seinen Diff auf GitHub.
tf-Modul durch das ml-Paket ersetzt (major)¶
Das TensorFlow-C-Modul tf wurde in ein engine-unabhängiges ml-Paket umgeschrieben (tf bleibt als abwärtskompatibler Alias erhalten, aber neuer Code sollte ml verwenden). Die modulebene-Funktionen tf.load, tf.load_builtin_model und die Methoden detect()/segment()/Klassifizierung wurden entfernt — erstellen Sie ein ml.Model und rufen Sie predict() auf. ml.Model(path) gibt jetzt nur noch das Modell zurück (kein (labels, model)-Tupel); Labels sind ein model.labels-Attribut. predict() gibt jetzt ulab-ndarrays zurück (keine Float-Tupel), unterstützt Modelle mit mehreren Eingaben (Liste übergeben), und NMS wurde nach ml.utils verschoben; die Eingabenormalisierung wurde nach ml.preprocessing.Normalization verschoben. Das alte ml.py ist jetzt ml.apps.
Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() entfernt — verwenden Sie to_ndarray() (major)¶
Das kurzlebige image.unpack() wurde entfernt; konvertieren Sie ein Bild stattdessen mit image.to_ndarray(dtype, buffer=...) in einen Tensor und wenden Sie Scale-/Mean-/Stdev-Normalisierung mit ml.preprocessing.Normalization an, statt des alten eingebauten Bildskalierungspfads.
Image()-Roh-Array-scale-Argument (minor)¶
Beim Erstellen eines Image aus einem rohen Pixel-Array nimmt das scale-Argument jetzt einen (min, max)-Bereich statt (scale, add).
Commit: 7b79fb4c7
Haar-Kaskaden auf den meisten Boards standardmäßig deaktiviert (behavior)¶
Um Flash-Speicher freizugeben, ist die Haar-Kaskaden-Gesichtserkennung (find_features() / image.HaarCascade()) jetzt standardmäßig auf Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO und OpenMV Pure Thermal deaktiviert. Skripte, die auf diesen Boards Haar-Kaskaden verwenden, müssen die Firmware mit aktivierter Funktion neu bauen.
Commit: 6ce27c910
Skriptunterbrechung und Tensor-Skalierung (behavior)¶
Der USB-Debugger unterbricht ein laufendes Skript jetzt über die VM-Abort-Funktion von MicroPython statt über einen erzwungenen PendSV-Sprung (sauberer, aber der Unterbrechungspunkt unterscheidet sich). Die SCALE_S128_127-Eingabeskalierung wurde korrigiert, sodass 0–255 ohne fehlerhafte Verstärkung auf −128–127 abgebildet werden — Modelle, die auf der alten (fehlerhaften) Skalierung beruhen, liefern andere Ergebnisse.
CM4-Koprozessor durch Open-AMP ersetzt (tooling)¶
Der veraltete CM4-Koprozessor-Firmware-Mechanismus auf GIGA / Nicla Vision / Portenta H7 wurde entfernt und durch Open-AMP/RPMsg ersetzt. Dual-Core-Code muss auf das Open-AMP-Modell umgestellt werden (ein vuart-Beispiel ist beigefügt).
Migrations-Checkliste¶
Für eine saubere Portierung auf v4.5.6 ist typischerweise folgende Arbeit nötig:
ML-Code auf
mlportieren:ml.Model(path)erstellen,predict()aufrufen,model.labelslesen,ndarray-Ausgaben erwarten und die Normalisierung nachml.preprocessing.Normalizationsowie NMS nachml.utilsverschieben (die Änderung am ml-Paket).image.unpack()durchimage.to_ndarray()ersetzen (die Entfernung von unpack).Jedes
Image()-Roh-Array-scale-Argument auf einen(min, max)-Bereich aktualisieren (die Image-Scale-Änderung).Wenn Sie Haar-Kaskaden auf einem betroffenen Board verwenden, mit aktivierter Funktion neu bauen (die Haar-Kaskaden-Änderung).
Modelle, die von
SCALE_S128_127abhingen, erneut validieren (die Skalierungsänderung).Dual-Core-Code auf Open-AMP umstellen (die CM4-Änderung).