v4.5.6

A v4.5.6 a nagy gépi tanulási kiadás. A TensorFlow tf C-modult egy új, motorfüggetlen, TensorFlow Lite Micro (TFLM) alapú ml csomag váltotta fel, a kép→tenzor konverzió átkerült az image.to_ndarray() függvénybe, a kétmagos lapok pedig áttértek az Open-AMP-re. Több visszafelé nem kompatibilis változás is van — olvasd el az alábbiakat, mielőtt frissítenéd az ML-szkripteket.

Kiemelt változások

  • Új ml csomag — a régi tf modul motorfüggetlen ml csomaggá lett átírva (ml.Model, ml.preprocessing, ml.utils, ml.apps); a tf aliasként megmarad.

  • TFLM háttér — az elavult libtf helyét az upstream alapú TensorFlow Lite Micro vette át: ~20%-kal gyorsabb következtetés és kisebb könyvtárak.

  • Open-AMP kétmagos működés — a GIGA és a Portenta H7 mostantól Open-AMP/RPMsg-et használ az M7/M4 magközi kommunikációhoz (a régi CM4 mechanizmus megszűnt).

  • Beépített Bluetooth — a CYW43 Bluetooth firmware engedélyezve a Nicla Vision, a Portenta H7 és a GIGA lapokon.

  • MicroPython 1.23.0, ulab 6.5.2 (4-D ndarray támogatással).

  • Visszafelé nem kompatibilis: az ML API jelentősen megváltozott, és a Haar-kaszkádok a legtöbb lapon alapértelmezetten le vannak tiltva — lásd a visszafelé nem kompatibilis változásokat.

Új funkciók

  • ml csomagml.Model a predict() metódussal (roi, callback, többbemenetű lista), tenzoronkénti alak/dtype/skála/zérópont attribútumok, ml.preprocessing.Normalization, ml.utils (NMS) és ml.apps (egy tisztán Python MicroSpeech kulcsszó-felismerő listen() metódussal és nem blokkoló timeout=-1 streameléssel, valamint draw_predictions() függvénnyel).

  • Beépített modellrendszer — a models/index.txt fájlban felsorolt modellek laponként, feltételesen kerülnek beágyazásra (FOMO minden ML-lapon, hangmodellek a mikrofonnal rendelkező lapokon).

  • image.to_ndarray(dtype, buffer=...) — egy kép átalakítása ulab ndarray-jé (opcionálisan helyben).

  • Image() nyers tömbökből — az új shape=, strides=, scale= kulcsszavas argumentumok szürkeárnyalatos/RGB565 képeket építenek nyers képpontlistákból.

  • Élsimított draw_circle().

  • Az ssl modul firmware-be fagyasztva a GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 és Pico lapokon.

  • Hang — az audio.init() egy samples= kulcsszót kapott (PDM-minták csatornánként); a gain_db mostantól DFSDM mikrofonokon is érvényesül (pl. Nicla Vision).

  • Hibakeresési protokoll — egy új GET_STATE parancs egyetlen csomagban adja vissza a futtatási/szöveg/JPEG jelzőket, a képkocka geometriáját és a szöveget, csökkentve a gazdagéppel folytatott oda-vissza kommunikációt.

  • Open-AMP vuart példa a magközi kommunikációhoz.

Egyéb változások és fejlesztések

  • A MicroPython 1.23.0-ra frissült; az ulab 6.5.2-re, 4-D ndarray támogatással.

  • Gyorsabb következtetés — az ML háttér megőrzi az állandó állapotot/memóriát a hívások között (~20%-kal gyorsabb, LSTM-stílusú modelleket is támogat).

  • A get_similarity() újra lett implementálva a draw_image háttéren (szélesebb formátum-/műveleti támogatás).

  • A morph() és a mean() szűrőcsalád áttért a kulcsszavas argumentumok feldolgozására; a mask= mostantól módosítható képet is elfogad.

  • Memóriaelrendezés átdolgozva — a DMA-régiók 2 hatványaira igazítva, átrendezhető GC-blokkok, több halom; kevesebb korai halomtöredezettség az alacsony RAM-mal rendelkező lapokon; az RT1060 extra GC-halmot kap.

  • A WiFi (CYW43) mostantól szoftveres újraindításkor deinicializálódik; az SPI-TV kijelző csak a framebuffer-régiót öblíti ki a gyorsítótárból a simább frissítések érdekében.

Hibajavítások

Kamera és érzékelők:

  • Javítva a véletlen CPU-gyorsítótár-érvénytelenítés a framebuffer/érzékelő útvonalon STM32 és i.MX RT lapokon, ami a képadatok sérülését okozhatta.

  • Javítva az MLX90640/MLX90641 hőkamerás I2C-olvasások i.MX RT lapokon (a nagy átvitelek mostantól darabokra vannak bontva).

Gépi tanulás:

  • Javítva az ml.Model load_to_fb kezelése, a bemeneti bytearray méretezése, az ndarray ndim ellenőrzései, valamint a Normalization képformátum-/alakellenőrzése.

Kép / rendszer:

  • Hozzáadva a hiányzó image.BLACK_BACKGROUND rajzolási segédkonstans, valamint egy kép-/tenzorpuffer hosszának épelméjűség-ellenőrzése.

  • Javítva a FIR és hang GC gyökérmutatói, amelyek miatt a gyűjtő használatban lévő puffereket szabadíthatott fel.

  • A Servo Shield példa mostantól SoftI2C-t használ, így OpenMV RT lapokon is működik.

Hardver- és laptámogatás

  • Arduino GIGA — HM01B0 / HM0360 érzékelő-támogatás; Open-AMP kétmagos működés.

  • Bluetooth — CYW43 BT firmware a Nicla Vision, Portenta H7 és GIGA lapokon.

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

  • OpenMV RT1060 — további GC-halomblokkok (több Python memória).

Visszafelé nem kompatibilis API-változások

Felhasználó számára látható API-törések a v4.5.5 és v4.5.6 között. Hatókör: Python C-modulok a modules/ mappában és Python könyvtárak a scripts/libraries/ mappában.

Minden változás meg van jelölve a hatásával:

  • major — a legtöbb szkriptnek, amely használta, szerkesztésre van szüksége.

  • minor — szűk API; csak az azt használó szkripteket érinti.

  • behavior — azonos API, eltérő eredmények; ellenőrizd újra a finomhangolt szkripteket.

  • tooling — a kétmagos / lapmechanizmusokat érinti, nem a Python API-t.

A változások ebben a sorrendben, hatás szerint vannak csoportosítva. Ha csak portolni szeretnéd a kódodat, ugorj a végén lévő migrációs ellenőrzőlistához. Minden commit-hash a hozzá tartozó diffre mutat a GitHubon.

A tf modult felváltotta az ml csomag (major)

A TensorFlow tf C-modul motorfüggetlen ml csomaggá lett átírva (a tf visszafelé kompatibilis aliasként megmarad, de az új kódnak az ml csomagot kell használnia). A modulszintű tf.load, tf.load_builtin_model függvények, valamint a detect()/segment()/osztályozó metódusok megszűntek — hozz létre egy ml.Model példányt, és hívd meg a predict() metódust. Az ml.Model(path) mostantól csak a modellt adja vissza (nem a (labels, model) rendezett párt); a címkék a model.labels attribútumban érhetők el. A predict() mostantól ulab ndarray-eket ad vissza (nem float rendezett párokat), támogatja a többbemenetű modelleket (adj át egy listát), az NMS pedig átkerült az ml.utils csomagba; a bemeneti normalizálás átkerült az ml.preprocessing.Normalization osztályba. A régi ml.py mostantól az ml.apps.

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

Az image.unpack() megszűnt — használd a to_ndarray() függvényt (major)

A rövid életű image.unpack() megszűnt; alakíts át egy képet tenzorrá az image.to_ndarray(dtype, buffer=...) segítségével, a skála-/átlag-/szórás-normalizálást pedig az ml.preprocessing.Normalization osztállyal alkalmazd a régi beépített kép-skálázási útvonal helyett.

Commitok: 9848eed12, de0d46fa6

Az Image() nyers tömb scale argumentuma (minor)

Amikor egy Image objektumot nyers képponttömbből hozol létre, a scale argumentum mostantól egy (min, max) tartományt vár a (scale, add) helyett.

Commit: 7b79fb4c7

A Haar-kaszkádok a legtöbb lapon alapértelmezetten letiltva (behavior)

A flash memória felszabadítása érdekében a Haar-kaszkádos arcészlelés (find_features() / image.HaarCascade()) mostantól alapértelmezetten le van tiltva az Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO és OpenMV Pure Thermal lapokon. Az ezeken a lapokon Haar-kaszkádokat használó szkriptekhez a firmware-t újra kell fordítani a funkció engedélyezésével.

Commit: 6ce27c910

Szkriptmegszakítás és tenzorskálázás (behavior)

Az USB-hibakereső mostantól a MicroPython VM-megszakítási funkcióján keresztül szakítja meg a futó szkriptet egy kényszerített PendSV-ugrás helyett (tisztább, de a megszakítási pont eltér). A SCALE_S128_127 bemeneti skálázás javítva lett, hogy a 0–255 tartományt −128–127-re képezze le téves erősítés nélkül — a régi (hibás) skálázásra támaszkodó modellek eltérő eredményeket fognak produkálni.

Commitok: e758a0f95, a4d97c572

A CM4 társprocesszort felváltotta az Open-AMP (tooling)

Az elavult CM4 társprocesszor firmware-mechanizmus a GIGA / Nicla Vision / Portenta H7 lapokon megszűnt, helyét az Open-AMP/RPMsg vette át. A kétmagos kódot az Open-AMP modellre kell átállítani (egy vuart példa biztosított).

Commitok: 3cc57fea4, 93f2d4c41

Migrációs ellenőrzőlista

A v4.5.6-ra való tiszta portoláshoz a tipikus teendők:

  1. Portold az ML-kódot az ml csomagra: hozz létre ml.Model(path) példányt, hívd meg a predict() metódust, olvasd a model.labels attribútumot, számíts ndarray kimenetekre, és helyezd át a normalizálást az ml.preprocessing.Normalization osztályba, az NMS-t pedig az ml.utils csomagba (az ml csomag változása).

  2. Cseréld le az image.unpack() hívást az image.to_ndarray() függvényre (az unpack eltávolítása).

  3. Frissítsd az Image() nyers tömb scale argumentumait (min, max) tartományra (az Image scale változása).

  4. Ha Haar-kaszkádokat használsz egy érintett lapon, fordítsd újra a firmware-t a funkció engedélyezésével (a Haar-kaszkád változása).

  5. Validáld újra azokat a modelleket, amelyek a SCALE_S128_127 skálázásra támaszkodtak (a skálázás változása).

  6. Állítsd át a kétmagos kódot Open-AMP-re (a CM4 változása).