v4.5.6

v4.5.6 este marea versiune dedicată învățării automate. Modulul C TensorFlow tf a fost înlocuit de un nou pachet ml, independent de motor, bazat pe TensorFlow Lite Micro (TFLM), conversia imagine→tensor a fost mutată în image.to_ndarray(), iar plăcile cu nucleu dublu au trecut la Open-AMP. Există mai multe modificări incompatibile — citiți-le mai jos înainte de a actualiza scripturile ML.

Aspecte importante

  • Pachetul nou ml — vechiul modul tf a fost rescris într-un pachet ml independent de motor (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf rămâne ca alias.

  • Backend TFLM — învechitul libtf a fost înlocuit de TensorFlow Lite Micro bazat pe sursa originală: inferență cu ~20% mai rapidă și biblioteci mai mici.

  • Nucleu dublu Open-AMP — GIGA și Portenta H7 folosesc acum Open-AMP/RPMsg pentru comunicarea între nucleele M7/M4 (vechiul mecanism CM4 a fost eliminat).

  • Bluetooth integrat — firmware-ul Bluetooth CYW43 activat pe Nicla Vision, Portenta H7 și GIGA.

  • MicroPython 1.23.0, ulab 6.5.2 (cu suport pentru ndarray 4-D).

  • Incompatibil: API-ul ML s-a schimbat substanțial, iar cascadele Haar sunt dezactivate implicit pe majoritatea plăcilor — consultați modificările incompatibile.

Caracteristici noi

  • Pachetul mlml.Model cu predict() (roi, callback, listă cu intrări multiple), atribute shape/dtype/scale/zero-point per tensor, ml.preprocessing.Normalization, ml.utils (NMS) și ml.apps (un detector de cuvinte-cheie MicroSpeech în Python pur, cu listen() și streaming non-blocant timeout=-1, plus draw_predictions()).

  • Sistem de modele integrate — modelele enumerate în models/index.txt sunt încorporate condiționat în funcție de placă (FOMO pe toate plăcile ML, modele audio pe plăcile cu microfoane).

  • image.to_ndarray(dtype, buffer=...) — convertește o imagine într-un ndarray ulab (opțional pe loc).

  • Image() din matrice brute — noile argumente cuvânt-cheie shape=, strides=, scale= construiesc imagini în tonuri de gri/RGB565 din liste de pixeli bruți.

  • draw_circle() cu anticrenelare.

  • Modulul ssl înghețat în firmware pe GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 și Pico.

  • Audioaudio.init() a primit un cuvânt-cheie samples= (mostre PDM per canal); gain_db se aplică acum pe microfoanele DFSDM (de exemplu Nicla Vision).

  • Protocol de depanare — o nouă comandă GET_STATE returnează indicatorii run/text/JPEG, geometria cadrului și textul într-un singur pachet, reducând schimburile de mesaje cu gazda.

  • Exemplu vuart Open-AMP pentru comunicarea între nuclee.

Alte modificări și îmbunătățiri

  • MicroPython actualizat la 1.23.0; ulab la 6.5.2 cu suport pentru ndarray 4-D.

  • Inferență mai rapidă — backend-ul ML păstrează starea/memoria persistentă între apeluri (~20% mai rapid, suportă modele de tip LSTM).

  • get_similarity() a fost reimplementat pe backend-ul draw_image (suport mai larg pentru formate/operații).

  • morph() și familia de filtre mean() au trecut la parsarea argumentelor cuvânt-cheie; mask= acceptă acum o imagine modificabilă.

  • Aranjamentul memoriei a fost refăcut — regiunile DMA aliniate la puteri ale lui 2, blocuri GC reordonabile, mai multe heap-uri; mai puțină fragmentare timpurie a heap-ului pe plăcile cu RAM redus; RT1060 câștigă un heap GC suplimentar.

  • WiFi (CYW43) este acum deinițializat la resetarea software; afișajul SPI-TV golește din cache doar regiunea framebuffer-ului, pentru actualizări mai fluide.

Remedieri de erori

Cameră și senzori:

  • Remediată invalidarea accidentală a cache-ului CPU pe traseul framebuffer/senzor pe STM32 și i.MX RT, care putea corupe datele imaginii.

  • Remediate citirile termice I2C MLX90640/MLX90641 pe plăcile i.MX RT (transferurile mari sunt acum împărțite în fragmente).

Învățare automată:

  • Remediate gestionarea load_to_fb în ml.Model, dimensionarea bytearray de intrare, verificările ndim ale ndarray și validarea formatului/formei imaginii în Normalization.

Imagine / sistem:

  • Adăugate constanta lipsă de indiciu de desenare image.BLACK_BACKGROUND și o verificare de validare a lungimii tamponului imagine/tensor.

  • Remediați pointerii rădăcină GC pentru FIR și audio, care puteau permite colectorului să elibereze tampoane în uz.

  • Exemplul Servo Shield folosește acum SoftI2C, astfel încât funcționează pe plăcile OpenMV RT.

Suport hardware și plăci

  • Arduino GIGA — suport pentru senzorii HM01B0 / HM0360; nucleu dublu Open-AMP.

  • Bluetooth — firmware BT CYW43 pe Nicla Vision, Portenta H7 și GIGA.

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

  • OpenMV RT1060 — blocuri suplimentare de heap GC (mai multă memorie Python).

Modificări incompatibile ale API-ului

Întreruperi de API vizibile pentru utilizator între v4.5.5 și v4.5.6. Domeniu: module C Python din modules/ și biblioteci Python din scripts/libraries/.

Fiecare modificare este etichetată cu impactul său:

  • major — majoritatea scripturilor care l-au folosit necesită modificări.

  • minor — API restrâns; afectează doar scripturile care l-au folosit.

  • comportament — același API, rezultate diferite; reverificați scripturile reglate.

  • instrumente — afectează mecanismele de nucleu dublu / plăci, nu API-ul Python.

Modificările sunt grupate după impact în această ordine. Dacă doriți doar să portați codul, săriți la lista de verificare pentru migrare de la final. Fiecare hash de commit se leagă de diff-ul său de pe GitHub.

Modulul tf înlocuit de pachetul ml (major)

Modulul C TensorFlow tf a fost rescris într-un pachet ml independent de motor (tf este păstrat ca alias retrocompatibil, dar codul nou ar trebui să folosească ml). Funcțiile la nivel de modul tf.load, tf.load_builtin_model și metodele detect()/segment()/de clasificare au fost eliminate — construiți un ml.Model și apelați predict(). ml.Model(path) returnează acum doar modelul (nu un tuplu (labels, model)); etichetele sunt un atribut model.labels. predict() returnează acum ndarray-uri ulab (nu tupluri de float), suportă modele cu intrări multiple (transmiteți o listă), iar NMS a fost mutat în ml.utils; normalizarea intrării a fost mutată în ml.preprocessing.Normalization. Vechiul ml.py este acum ml.apps.

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

image.unpack() eliminat — folosiți to_ndarray() (major)

Funcția image.unpack(), cu viață scurtă, a fost eliminată; convertiți o imagine într-un tensor cu image.to_ndarray(dtype, buffer=...) și aplicați normalizarea scale/mean/stdev cu ml.preprocessing.Normalization în locul vechiului traseu integrat de scalare a imaginii.

Commit-uri: 9848eed12, de0d46fa6

Argumentul scale din matricea brută Image() (minor)

La construirea unui Image dintr-o matrice de pixeli brută, argumentul scale acceptă acum un interval (min, max) în loc de (scale, add).

Commit: 7b79fb4c7

Cascadele Haar dezactivate implicit pe majoritatea plăcilor (comportament)

Pentru a elibera spațiu în memoria flash, detectarea feței cu cascade Haar (find_features() / image.HaarCascade()) este acum dezactivată implicit pe Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO și OpenMV Pure Thermal. Scripturile care folosesc cascade Haar pe acele plăci trebuie să recompileze firmware-ul cu funcția activată.

Commit: 6ce27c910

Întreruperea scriptului și scalarea tensorilor (comportament)

Depanatorul USB întrerupe acum un script în execuție prin funcția VM-abort din MicroPython în loc de un salt PendSV forțat (mai curat, dar punctul de întrerupere diferă). Scalarea de intrare SCALE_S128_127 a fost corectată pentru a mapa 0–255 la −128–127 fără o amplificare eronată — modelele care se bazează pe vechea scalare (incorectă) vor produce rezultate diferite.

Commit-uri: e758a0f95, a4d97c572

Coprocesorul CM4 înlocuit de Open-AMP (instrumente)

Mecanismul învechit de firmware al coprocesorului CM4 pe GIGA / Nicla Vision / Portenta H7 a fost eliminat și înlocuit de Open-AMP/RPMsg. Codul cu nucleu dublu trebuie mutat la modelul Open-AMP (este furnizat un exemplu vuart).

Commit-uri: 3cc57fea4, 93f2d4c41

Listă de verificare pentru migrare

Pentru o portare curată la v4.5.6, lucrul tipic este:

  1. Portați codul ML la ml: construiți ml.Model(path), apelați predict(), citiți model.labels, așteptați-vă la ieșiri ndarray și mutați normalizarea la ml.preprocessing.Normalization și NMS la ml.utils (modificarea pachetului ml).

  2. Înlocuiți image.unpack() cu image.to_ndarray() (eliminarea unpack).

  3. Actualizați orice argument scale din matricea brută Image() la un interval (min, max) (modificarea scalei Image).

  4. Dacă folosiți cascade Haar pe o placă afectată, recompilați cu funcția activată (modificarea cascadei Haar).

  5. Revalidați modelele care depindeau de SCALE_S128_127 (modificarea scalării).

  6. Mutați codul cu nucleu dublu la Open-AMP (modificarea CM4).