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 modultfa fost rescris într-un pachetmlindependent de motor (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfrămâne ca alias.Backend TFLM — învechitul
libtfa 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
ml—ml.Modelcupredict()(roi,callback, listă cu intrări multiple), atribute shape/dtype/scale/zero-point per tensor,ml.preprocessing.Normalization,ml.utils(NMS) șiml.apps(un detector de cuvinte-cheieMicroSpeechîn Python pur, culisten()și streaming non-blocanttimeout=-1, plusdraw_predictions()).Sistem de modele integrate — modelele enumerate în
models/index.txtsunt î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-cheieshape=,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.Audio —
audio.init()a primit un cuvânt-cheiesamples=(mostre PDM per canal);gain_dbse aplică acum pe microfoanele DFSDM (de exemplu Nicla Vision).Protocol de depanare — o nouă comandă
GET_STATEreturnează 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-uldraw_image(suport mai larg pentru formate/operații).morph()și familia de filtremean()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înml.Model, dimensionareabytearrayde intrare, verificărilendimale ndarray și validarea formatului/formei imaginii înNormalization.
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.
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.
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).
Listă de verificare pentru migrare¶
Pentru o portare curată la v4.5.6, lucrul tipic este:
Portați codul ML la
ml: construițiml.Model(path), apelațipredict(), citițimodel.labels, așteptați-vă la ieșirindarrayși mutați normalizarea laml.preprocessing.Normalizationși NMS laml.utils(modificarea pachetului ml).Înlocuiți
image.unpack()cuimage.to_ndarray()(eliminarea unpack).Actualizați orice argument
scaledin matricea brutăImage()la un interval(min, max)(modificarea scalei Image).Dacă folosiți cascade Haar pe o placă afectată, recompilați cu funcția activată (modificarea cascadei Haar).
Revalidați modelele care depindeau de
SCALE_S128_127(modificarea scalării).Mutați codul cu nucleu dublu la Open-AMP (modificarea CM4).