v4.5.6

v4.5.6 is de grote machine learning-release. De TensorFlow tf C-module is vervangen door een nieuw, engine-onafhankelijk ml-pakket op basis van TensorFlow Lite Micro (TFLM), de conversie van afbeelding naar tensor is verplaatst naar image.to_ndarray(), en dual-core boards zijn overgestapt op Open-AMP. Er zijn verschillende ingrijpende wijzigingen — lees ze hieronder voordat je ML-scripts upgradet.

Hoogtepunten

  • Nieuw ml-pakket — de oude tf-module is herschreven tot een engine-onafhankelijk ml-pakket (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf blijft bestaan als alias.

  • TFLM-backend — de verouderde libtf is vervangen door op upstream gebaseerde TensorFlow Lite Micro: ~20% snellere inferentie en kleinere bibliotheken.

  • Open-AMP dual-core — GIGA en Portenta H7 gebruiken nu Open-AMP/RPMsg voor de communicatie tussen de M7- en M4-kernen (het oude CM4-mechanisme is verwijderd).

  • Ingebouwde Bluetooth — CYW43 Bluetooth-firmware ingeschakeld op Nicla Vision, Portenta H7 en GIGA.

  • MicroPython 1.23.0, ulab 6.5.2 (met ondersteuning voor 4D-ndarray).

  • Ingrijpend: de ML-API is aanzienlijk veranderd en Haar cascades zijn standaard uitgeschakeld op de meeste boards — zie de ingrijpende wijzigingen.

Nieuwe functies

  • ml-pakketml.Model met predict() (roi, callback, lijst met meerdere ingangen), vorm/dtype/scale/zero-point-attributen per tensor, ml.preprocessing.Normalization, ml.utils (NMS) en ml.apps (een pure-Python MicroSpeech keyword spotter met listen() en niet-blokkerende timeout=-1-streaming, plus draw_predictions()).

  • Ingebouwd modelsysteem — modellen die in models/index.txt vermeld staan, worden per board voorwaardelijk ingebed (FOMO op alle ML-boards, audiomodellen op boards met microfoons).

  • image.to_ndarray(dtype, buffer=...) — converteert een afbeelding naar een ulab-ndarray (optioneel in-place).

  • Image() op basis van ruwe arrays — nieuwe shape=-, strides=- en scale=-keyword-argumenten bouwen grijswaarden-/RGB565-afbeeldingen op uit ruwe pixellijsten.

  • Anti-aliased draw_circle().

  • ssl-module ingevroren in de firmware op GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 en Pico.

  • Audioaudio.init() heeft een samples=-keyword gekregen (PDM-samples per kanaal); gain_db werkt nu op DFSDM-microfoons (bijv. Nicla Vision).

  • Debugprotocol — een nieuwe GET_STATE-opdracht geeft run-/tekst-/JPEG-vlaggen, framegeometrie en tekst in één pakket terug, wat het aantal round-trips naar de host vermindert.

  • Open-AMP vuart-voorbeeld voor communicatie tussen kernen.

Overige wijzigingen en verbeteringen

  • MicroPython bijgewerkt naar 1.23.0; ulab naar 6.5.2 met ondersteuning voor 4D-ndarray.

  • Snellere inferentie — de ML-backend houdt persistente status/geheugen aan tussen aanroepen (~20% sneller, ondersteunt LSTM-achtige modellen).

  • get_similarity() is opnieuw geïmplementeerd op de draw_image-backend (bredere ondersteuning voor formaten/bewerkingen).

  • morph() en de mean()-filterfamilie zijn overgestapt op het parsen van keyword-argumenten; mask= accepteert nu een muteerbare afbeelding.

  • Geheugenindeling herzien — DMA-regio’s uitgelijnd op machten van 2, herrangschikbare GC-blokken, meerdere heaps; minder vroege heap-fragmentatie op boards met weinig RAM; RT1060 krijgt extra GC-heap.

  • WiFi (CYW43) wordt nu bij een soft-reset gede-initialiseerd; SPI-TV-display spoelt alleen de framebuffer-regio uit de cache voor soepelere updates.

Bugfixes

Camera en sensoren:

  • Per ongeluk optredende invalidatie van de CPU-cache in het framebuffer-/sensorpad op STM32 en i.MX RT verholpen, wat beeldgegevens kon beschadigen.

  • MLX90640/MLX90641-thermische I2C-uitlezingen op i.MX RT-boards verholpen (grote overdrachten worden nu in stukken opgesplitst).

Machine learning:

  • De afhandeling van load_to_fb in ml.Model, de grootte van de invoer-bytearray, de ndim-controles van de ndarray en de validatie van het beeldformaat/de vorm in Normalization verholpen.

Afbeelding / systeem:

  • De ontbrekende image.BLACK_BACKGROUND-tekenhintconstante en een controle op de bufferlengte van afbeelding/tensor toegevoegd.

  • FIR- en audio-GC-rootpointers verholpen die ervoor konden zorgen dat de collector in gebruik zijnde buffers vrijgaf.

  • Het Servo Shield-voorbeeld gebruikt nu SoftI2C zodat het werkt op OpenMV RT-boards.

Hardware- en boardondersteuning

  • Arduino GIGA — HM01B0-/HM0360-sensorondersteuning; Open-AMP dual-core.

  • Bluetooth — CYW43 BT-firmware op Nicla Vision, Portenta H7 en GIGA.

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

  • OpenMV RT1060 — extra GC-heap-blokken (meer Python-geheugen).

Ingrijpende API-wijzigingen

Voor gebruikers zichtbare API-wijzigingen tussen v4.5.5 en v4.5.6. Reikwijdte: Python C-modules in modules/ en Python-bibliotheken in scripts/libraries/.

Elke wijziging is voorzien van een label voor de impact:

  • major — de meeste scripts die het gebruikten, moeten worden aangepast.

  • minor — beperkte API; treft alleen scripts die het gebruikten.

  • behavior — dezelfde API, andere resultaten; controleer afgestelde scripts opnieuw.

  • tooling — treft dual-core-/boardmechanismen, niet de Python-API.

Wijzigingen zijn in die volgorde gegroepeerd op impact. Als je je code alleen wilt porten, ga dan naar de migratiechecklist aan het einde. Elke commit-hash linkt naar zijn diff op GitHub.

tf-module vervangen door het ml-pakket (major)

De TensorFlow tf C-module is herschreven tot een engine-onafhankelijk ml-pakket (tf blijft behouden als achterwaarts compatibele alias, maar nieuwe code zou ml moeten gebruiken). De functies op moduleniveau tf.load en tf.load_builtin_model en de methoden detect()/segment()/classificatie zijn verwijderd — construeer een ml.Model en roep predict() aan. ml.Model(path) retourneert nu alleen het model (geen (labels, model)-tuple); labels zijn een model.labels-attribuut. predict() retourneert nu ulab-ndarrays (geen float-tuples), ondersteunt modellen met meerdere ingangen (geef een lijst door), en NMS is verplaatst naar ml.utils; invoernormalisatie is verplaatst naar ml.preprocessing.Normalization. De oude ml.py is nu ml.apps.

Commits: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837

image.unpack() verwijderd — gebruik to_ndarray() (major)

Het kortstondige image.unpack() is verwijderd; converteer een afbeelding in plaats daarvan naar een tensor met image.to_ndarray(dtype, buffer=...), en pas scale-/mean-/stdev-normalisatie toe met ml.preprocessing.Normalization in plaats van het oude ingebouwde beeldschaalpad.

Commits: 9848eed12, de0d46fa6

Image() scale-argument voor ruwe arrays (minor)

Bij het construeren van een Image uit een ruwe pixelarray neemt het scale-argument nu een (min, max)-bereik in plaats van (scale, add).

Commit: 7b79fb4c7

Haar cascades standaard uitgeschakeld op de meeste boards (behavior)

Om flashgeheugen vrij te maken is Haar-cascade-gezichtsdetectie (find_features() / image.HaarCascade()) nu standaard uitgeschakeld op Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO en OpenMV Pure Thermal. Scripts die Haar cascades op die boards gebruiken, moeten de firmware opnieuw bouwen met de functie ingeschakeld.

Commit: 6ce27c910

Scriptonderbreking en tensorschaling (behavior)

De USB-debugger onderbreekt een lopend script nu via MicroPython’s VM-abort-functie in plaats van een geforceerde PendSV-sprong (schoner, maar het onderbrekingspunt verschilt). De SCALE_S128_127-invoerschaling is gecorrigeerd zodat 0–255 wordt gemapt naar −128–127 zonder een onterechte versterking — modellen die op de oude (onjuiste) schaling vertrouwen, produceren andere resultaten.

Commits: e758a0f95, a4d97c572

CM4-coprocessor vervangen door Open-AMP (tooling)

Het verouderde mechanisme voor de CM4-coprocessor-firmware op GIGA / Nicla Vision / Portenta H7 is verwijderd en vervangen door Open-AMP/RPMsg. Dual-core-code moet overstappen op het Open-AMP-model (er wordt een vuart-voorbeeld geleverd).

Commits: 3cc57fea4, 93f2d4c41

Migratiechecklist

Voor een schone port naar v4.5.6 bestaat het typische werk uit:

  1. Port ML-code naar ml: construeer ml.Model(path), roep predict() aan, lees model.labels, verwacht ndarray-uitvoer en verplaats normalisatie naar ml.preprocessing.Normalization en NMS naar ml.utils (de wijziging van het ml-pakket).

  2. Vervang image.unpack() door image.to_ndarray() (de verwijdering van unpack).

  3. Werk elk Image() scale-argument voor ruwe arrays bij naar een (min, max)-bereik (de wijziging van Image scale).

  4. Als je Haar cascades op een betrokken board gebruikt, bouw dan opnieuw met de functie ingeschakeld (de wijziging van Haar cascades).

  5. Valideer modellen opnieuw die afhankelijk waren van SCALE_S128_127 (de schalingswijziging).

  6. Verplaats dual-core-code naar Open-AMP (de CM4-wijziging).