v4.5.6¶
v4.5.6 är den stora maskininlärningsutgåvan. TensorFlow-C-modulen tf ersattes av ett nytt, motoroberoende ml-paket som bygger på TensorFlow Lite Micro (TFLM), konverteringen från bild till tensor flyttades till image.to_ndarray(), och kort med dubbla kärnor gick över till Open-AMP. Det finns flera brytande ändringar — läs dem nedan innan du uppgraderar dina ML-skript.
Höjdpunkter¶
Nytt
ml-paket — den gamlatf-modulen skrevs om till ett motoroberoendeml-paket (ml.Model,ml.preprocessing,ml.utils,ml.apps);tffinns kvar som ett alias.TFLM-backend — det föråldrade
libtfersattes av uppströmsbaserat TensorFlow Lite Micro: cirka 20 % snabbare inferens och mindre bibliotek.Open-AMP med dubbla kärnor — GIGA och Portenta H7 använder nu Open-AMP/RPMsg för kommunikation mellan M7- och M4-kärnorna (den gamla CM4-mekanismen togs bort).
Inbyggd Bluetooth — CYW43 Bluetooth-firmware aktiverad på Nicla Vision, Portenta H7 och GIGA.
MicroPython 1.23.0, ulab 6.5.2 (med stöd för 4D-ndarray).
Brytande: ML-API:et ändrades avsevärt och Haar-kaskader är inaktiverade som standard på de flesta kort — se de brytande ändringarna.
Nya funktioner¶
ml-paket —ml.Modelmedpredict()(roi,callback, lista med flera indata), attribut per tensor för shape/dtype/scale/zero-point,ml.preprocessing.Normalization,ml.utils(NMS) ochml.apps(en ren Python-baseradMicroSpeech-nyckelordsdetektor medlisten()och icke-blockerandetimeout=-1-strömning, plusdraw_predictions()).System för inbyggda modeller — modeller som listas i
models/index.txtbäddas in villkorligt per kort (FOMO på alla ML-kort, ljudmodeller på kort med mikrofoner).image.to_ndarray(dtype, buffer=...)— konvertera en bild till en ulab-ndarray (eventuellt på plats).Image()från råa arrayer — nya nyckelordsargumentshape=,strides=ochscale=bygger gråskala-/RGB565-bilder från råa pixellistor.Kantutjämnad
draw_circle().ssl-modulen infrusen i firmware på GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 och Pico.Ljud —
audio.init()fick ettsamples=-nyckelord (PDM-sampel per kanal);gain_dbtillämpas nu på DFSDM-mikrofoner (t.ex. Nicla Vision).Felsökningsprotokoll — ett nytt
GET_STATE-kommando returnerar run/text/JPEG-flaggor, bildrutans geometri och text i ett enda paket, vilket minskar antalet rundresor till värddatorn.Open-AMP vuart-exempel för kommunikation mellan kärnor.
Övriga ändringar och förbättringar¶
MicroPython uppdaterad till 1.23.0; ulab till 6.5.2 med stöd för 4D-ndarray.
Snabbare inferens — ML-backenden behåller beständig state/minne mellan anrop (cirka 20 % snabbare, stöder LSTM-liknande modeller).
get_similarity()återimplementerades pådraw_image-backenden (bredare stöd för format/operationer).morph()ochmean()-filterfamiljen gick över till tolkning med nyckelordsargument;mask=accepterar nu en muterbar bild.Minneslayouten omarbetad — DMA-regioner justerade till tvåpotenser, omordningsbara GC-block, flera heapar; mindre tidig heap-fragmentering på kort med lite RAM; RT1060 får extra GC-heap.
WiFi (CYW43) avinitieras nu vid mjuk omstart; SPI-TV-skärmen tömmer endast bildbuffertregionen från cachen för jämnare uppdateringar.
Buggfixar¶
Kamera och sensorer:
Åtgärdade oavsiktlig ogiltigförklaring av CPU-cachen i bildbuffert-/sensorvägen på STM32 och i.MX RT, vilket kunde korrumpera bilddata.
Åtgärdade MLX90640/MLX90641 termiska I2C-läsningar på i.MX RT-kort (stora överföringar delas nu upp i bitar).
Maskininlärning:
Åtgärdade hanteringen av
load_to_fbiml.Model, dimensionering av indata-bytearray, kontroller av ndarray-ndimsamt validering av bildformat/shape iNormalization.
Bild / system:
Lade till den saknade rituppmaningskonstanten
image.BLACK_BACKGROUNDoch en rimlighetskontroll av buffertlängden för bild/tensor.Åtgärdade GC-rotpekare för FIR och ljud som kunde låta samlaren frigöra buffertar som användes.
Servo Shield-exemplet använder nu
SoftI2Cså att det fungerar på OpenMV RT-kort.
Hårdvaru- och kortstöd¶
Arduino GIGA — stöd för HM01B0-/HM0360-sensorer; Open-AMP med dubbla kärnor.
Bluetooth — CYW43 BT-firmware på Nicla Vision, Portenta H7 och GIGA.
Portenta H7 — Open-AMP M7/M4 RPMsg.
OpenMV RT1060 — ytterligare GC-heap-block (mer Python-minne).
Brytande API-ändringar¶
Användarsynliga API-brytningar mellan v4.5.5 och v4.5.6. Omfattning: Python-C-moduler i modules/ och Python-bibliotek i scripts/libraries/.
Varje ändring är märkt med sin påverkan:
major — de flesta skript som använde den behöver redigeras.
minor — smalt API; påverkar endast skript som använde det.
behavior — samma API, olika resultat; kontrollera finjusterade skript igen.
tooling — påverkar mekanismer för dubbla kärnor/kort, inte Python-API:et.
Ändringarna är grupperade efter påverkan i den ordningen. Om du bara vill porta din kod kan du hoppa till migreringschecklistan i slutet. Varje commit-hash länkar till sin diff på GitHub.
tf-modulen ersatt av ml-paketet (major)¶
TensorFlow-C-modulen tf skrevs om till ett motoroberoende ml-paket (tf behålls som ett bakåtkompatibelt alias, men ny kod bör använda ml). Funktionerna på modulnivå tf.load, tf.load_builtin_model och metoderna detect()/segment()/klassificering togs bort — konstruera en ml.Model och anropa predict(). ml.Model(path) returnerar nu bara modellen (ingen (labels, model)-tupel); etiketter finns som attributet model.labels. predict() returnerar nu ulab-ndarrays (inte float-tupler), stöder modeller med flera indata (skicka en lista), och NMS flyttades till ml.utils; indatanormalisering flyttades till ml.preprocessing.Normalization. Den gamla ml.py är nu ml.apps.
Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() borttagen — använd to_ndarray() (major)¶
Den kortlivade image.unpack() togs bort; konvertera istället en bild till en tensor med image.to_ndarray(dtype, buffer=...), och tillämpa scale/mean/stdev-normalisering med ml.preprocessing.Normalization istället för den gamla inbyggda bildskalningsvägen.
Råa-array-argumentet scale i Image() (minor)¶
När en Image konstrueras från en rå pixelarray tar argumentet scale nu ett (min, max)-intervall istället för (scale, add).
Commit: 7b79fb4c7
Haar-kaskader inaktiverade som standard på de flesta kort (behavior)¶
För att frigöra flashutrymme är Haar-kaskadbaserad ansiktsdetektering (find_features() / image.HaarCascade()) nu inaktiverad som standard på Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO och OpenMV Pure Thermal. Skript som använder Haar-kaskader på dessa kort måste bygga om firmware med funktionen aktiverad.
Commit: 6ce27c910
Skriptavbrott och tensorskalning (behavior)¶
USB-felsökaren avbryter nu ett körande skript via MicroPythons VM-abort-funktion istället för ett påtvingat PendSV-hopp (renare, men avbrottspunkten skiljer sig). Indataskalningen SCALE_S128_127 korrigerades till att mappa 0–255 till −128–127 utan en felaktig förstärkning — modeller som förlitar sig på den gamla (felaktiga) skalningen ger andra resultat.
CM4-coprocessorn ersatt av Open-AMP (tooling)¶
Den föråldrade firmware-mekanismen för CM4-coprocessorn på GIGA / Nicla Vision / Portenta H7 togs bort och ersattes av Open-AMP/RPMsg. Kod för dubbla kärnor måste gå över till Open-AMP-modellen (ett vuart-exempel tillhandahålls).
Migreringschecklista¶
För en ren port till v4.5.6 är det typiska arbetet:
Porta ML-kod till
ml: konstrueraml.Model(path), anropapredict(), läsmodel.labels, förvänta digndarray-utdata, och flytta normalisering tillml.preprocessing.Normalizationoch NMS tillml.utils(ml-paketändringen).Ersätt
image.unpack()medimage.to_ndarray()(borttagningen av unpack).Uppdatera eventuella råa-array-
scale-argument iImage()till ett(min, max)-intervall (ändringen av Image-skalningen).Om du använder Haar-kaskader på ett påverkat kort, bygg om med funktionen aktiverad (Haar-kaskadändringen).
Validera om modeller som var beroende av
SCALE_S128_127(skalningsändringen).Flytta kod för dubbla kärnor till Open-AMP (CM4-ändringen).