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 gamla tf-modulen skrevs om till ett motoroberoende ml-paket (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf finns kvar som ett alias.

  • TFLM-backend — det föråldrade libtf ersattes 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-paketml.Model med predict() (roi, callback, lista med flera indata), attribut per tensor för shape/dtype/scale/zero-point, ml.preprocessing.Normalization, ml.utils (NMS) och ml.apps (en ren Python-baserad MicroSpeech-nyckelordsdetektor med listen() och icke-blockerande timeout=-1-strömning, plus draw_predictions()).

  • System för inbyggda modeller — modeller som listas i models/index.txt bä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 nyckelordsargument shape=, strides= och scale= 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.

  • Ljudaudio.init() fick ett samples=-nyckelord (PDM-sampel per kanal); gain_db tillä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() och mean()-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_fb i ml.Model, dimensionering av indata-bytearray, kontroller av ndarray-ndim samt validering av bildformat/shape i Normalization.

Bild / system:

  • Lade till den saknade rituppmaningskonstanten image.BLACK_BACKGROUND och 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 SoftI2C så 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.

Commits: 9848eed12, de0d46fa6

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.

Commits: e758a0f95, a4d97c572

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).

Commits: 3cc57fea4, 93f2d4c41

Migreringschecklista

För en ren port till v4.5.6 är det typiska arbetet:

  1. Porta ML-kod till ml: konstruera ml.Model(path), anropa predict(), läs model.labels, förvänta dig ndarray-utdata, och flytta normalisering till ml.preprocessing.Normalization och NMS till ml.utils (ml-paketändringen).

  2. Ersätt image.unpack() med image.to_ndarray() (borttagningen av unpack).

  3. Uppdatera eventuella råa-array-scale-argument i Image() till ett (min, max)-intervall (ändringen av Image-skalningen).

  4. Om du använder Haar-kaskader på ett påverkat kort, bygg om med funktionen aktiverad (Haar-kaskadändringen).

  5. Validera om modeller som var beroende av SCALE_S128_127 (skalningsändringen).

  6. Flytta kod för dubbla kärnor till Open-AMP (CM4-ändringen).