v4.5.6¶
v4.5.6 è la grande release dedicata al machine learning. Il modulo C TensorFlow tf è stato sostituito da un nuovo pacchetto ml indipendente dal motore e basato su TensorFlow Lite Micro (TFLM), la conversione immagine→tensore è stata spostata in image.to_ndarray() e le schede dual-core sono passate a Open-AMP. Sono presenti diverse modifiche che rompono la compatibilità — leggile qui sotto prima di aggiornare gli script ML.
In evidenza¶
Nuovo pacchetto
ml— il vecchio modulotfè stato riscritto in un pacchettomlindipendente dal motore (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfrimane come alias.Backend TFLM — l’obsoleto
libtfè stato sostituito da TensorFlow Lite Micro basato sull’upstream: inferenza più veloce di circa il 20% e librerie più piccole.Dual-core Open-AMP — GIGA e Portenta H7 ora usano Open-AMP/RPMsg per la comunicazione inter-core M7/M4 (il vecchio meccanismo CM4 è stato rimosso).
Bluetooth integrato — firmware Bluetooth CYW43 abilitato su Nicla Vision, Portenta H7 e GIGA.
MicroPython 1.23.0, ulab 6.5.2 (con supporto per ndarray a 4 dimensioni).
Compatibilità: l’API ML è cambiata in modo sostanziale e le cascate Haar sono disabilitate per impostazione predefinita sulla maggior parte delle schede — vedi le modifiche che rompono la compatibilità.
Nuove funzionalità¶
Pacchetto
ml—ml.Modelconpredict()(roi,callback, lista multi-input), attributi shape/dtype/scale/zero-point per tensore,ml.preprocessing.Normalization,ml.utils(NMS) eml.apps(un keyword spotterMicroSpeechin puro Python conlisten()e streaming non bloccantetimeout=-1, oltre adraw_predictions()).Sistema di modelli integrati — i modelli elencati in
models/index.txtvengono incorporati condizionalmente per ciascuna scheda (FOMO su tutte le schede ML, modelli audio sulle schede con microfono).image.to_ndarray(dtype, buffer=...)— converte un’immagine in un ndarray ulab (opzionalmente in place).Image()da array grezzi — i nuovi argomenti keywordshape=,strides=,scale=costruiscono immagini in scala di grigi/RGB565 a partire da liste di pixel grezzi.draw_circle()con anti-aliasing.Modulo
sslcongelato nel firmware su GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 e Pico.Audio —
audio.init()ha acquisito un keywordsamples=(campioni PDM per canale);gain_dbora si applica ai microfoni DFSDM (ad es. Nicla Vision).Protocollo di debug — un nuovo comando
GET_STATErestituisce i flag run/text/JPEG, la geometria del frame e il testo in un singolo pacchetto, riducendo i round-trip verso l’host.Esempio vuart Open-AMP per la comunicazione inter-core.
Altre modifiche e miglioramenti¶
MicroPython aggiornato a 1.23.0; ulab a 6.5.2 con supporto per ndarray a 4 dimensioni.
Inferenza più veloce — il backend ML mantiene stato/memoria persistenti tra le invocazioni (circa il 20% più veloce, supporta modelli in stile LSTM).
get_similarity()è stata reimplementata sul backenddraw_image(supporto più ampio di formati/operazioni).morph()e la famiglia di filtrimean()sono passate al parsing con argomenti keyword;mask=ora accetta un’immagine mutabile.Layout della memoria rielaborato — regioni DMA allineate a potenze di 2, blocchi GC riordinabili, heap multipli; minore frammentazione precoce dell’heap sulle schede con poca RAM; RT1060 ottiene un heap GC aggiuntivo.
Il WiFi (CYW43) viene ora deinizializzato al soft-reset; il display SPI-TV svuota dalla cache solo la regione del framebuffer per aggiornamenti più fluidi.
Correzioni di bug¶
Camera e sensori:
Corretta un’accidentale invalidazione della cache della CPU nel percorso framebuffer/sensore su STM32 e i.MX RT, che poteva corrompere i dati dell’immagine.
Corrette le letture termiche I2C MLX90640/MLX90641 sulle schede i.MX RT (i trasferimenti grandi vengono ora suddivisi in blocchi).
Machine learning:
Corretta la gestione di
load_to_fbinml.Model, il dimensionamento delbytearraydi input, i controllindimdell’ndarray e la validazione di formato/forma dell’immagine inNormalization.
Immagine / sistema:
Aggiunta la costante draw-hint
image.BLACK_BACKGROUNDmancante e un controllo di coerenza sulla lunghezza del buffer immagine/tensore.Corretti i puntatori GC root di FIR e audio che potevano permettere al collector di liberare buffer in uso.
L’esempio Servo Shield ora usa
SoftI2Cin modo da funzionare sulle schede OpenMV RT.
Hardware e supporto schede¶
Arduino GIGA — supporto per i sensori HM01B0 / HM0360; dual-core Open-AMP.
Bluetooth — firmware BT CYW43 su Nicla Vision, Portenta H7 e GIGA.
Portenta H7 — RPMsg M7/M4 Open-AMP.
OpenMV RT1060 — blocchi heap GC aggiuntivi (più memoria Python).
Modifiche all’API che rompono la compatibilità¶
Modifiche all’API visibili all’utente tra la v4.5.5 e la v4.5.6. Ambito: i moduli C Python in modules/ e le librerie Python in scripts/libraries/.
Ogni modifica è contrassegnata con il suo impatto:
major — la maggior parte degli script che la usavano necessita di modifiche.
minor — API ristretta; riguarda solo gli script che la usavano.
behavior — stessa API, risultati diversi; ricontrolla gli script ottimizzati.
tooling — riguarda i meccanismi dual-core / di scheda, non l’API Python.
Le modifiche sono raggruppate per impatto in quest’ordine. Se vuoi solo portare il tuo codice, salta alla checklist di migrazione in fondo. Ogni hash di commit rimanda al relativo diff su GitHub.
Modulo tf sostituito dal pacchetto ml (major)¶
Il modulo C TensorFlow tf è stato riscritto in un pacchetto ml indipendente dal motore (tf viene mantenuto come alias retrocompatibile, ma il nuovo codice dovrebbe usare ml). Le funzioni a livello di modulo tf.load, tf.load_builtin_model e i metodi detect()/segment()/di classificazione sono stati rimossi — costruisci un ml.Model e chiama predict(). ml.Model(path) ora restituisce solo il modello (nessuna tupla (labels, model)); le etichette sono un attributo model.labels. predict() ora restituisce ndarray ulab (non tuple di float), supporta modelli multi-input (passa una lista) e l’NMS è stato spostato in ml.utils; la normalizzazione dell’input è stata spostata in ml.preprocessing.Normalization. Il vecchio ml.py è ora ml.apps.
Commit: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() rimossa — usa to_ndarray() (major)¶
L’effimera image.unpack() è stata rimossa; converti invece un’immagine in un tensore con image.to_ndarray(dtype, buffer=...) e applica la normalizzazione scale/mean/stdev con ml.preprocessing.Normalization anziché il vecchio percorso integrato di scaling dell’immagine.
Argomento scale di Image() da array grezzo (minor)¶
Quando si costruisce un Image da un array di pixel grezzi, l’argomento scale ora accetta un intervallo (min, max) invece di (scale, add).
Commit: 7b79fb4c7
Cascate Haar disabilitate per impostazione predefinita sulla maggior parte delle schede (behavior)¶
Per liberare spazio in flash, il rilevamento di volti tramite cascate Haar (find_features() / image.HaarCascade()) è ora disabilitato per impostazione predefinita su Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO e OpenMV Pure Thermal. Gli script che usano cascate Haar su quelle schede devono ricompilare il firmware con la funzionalità abilitata.
Commit: 6ce27c910
Interruzione dello script e scaling dei tensori (behavior)¶
Il debugger USB ora interrompe uno script in esecuzione tramite la funzione di VM-abort di MicroPython anziché un salto PendSV forzato (più pulito, ma il punto di interruzione è diverso). Lo scaling di input SCALE_S128_127 è stato corretto in modo da mappare 0–255 su −128–127 senza un guadagno erroneo — i modelli che si basavano sul vecchio scaling (errato) produrranno risultati diversi.
Coprocessore CM4 sostituito da Open-AMP (tooling)¶
Il meccanismo deprecato del firmware del coprocessore CM4 su GIGA / Nicla Vision / Portenta H7 è stato rimosso e sostituito da Open-AMP/RPMsg. Il codice dual-core deve passare al modello Open-AMP (viene fornito un esempio vuart).
Checklist di migrazione¶
Per un porting pulito alla v4.5.6 il lavoro tipico è:
Porta il codice ML a
ml: costruisciml.Model(path), chiamapredict(), leggimodel.labels, aspettati outputndarraye sposta la normalizzazione inml.preprocessing.Normalizatione l’NMS inml.utils(la modifica del pacchetto ml).Sostituisci
image.unpack()conimage.to_ndarray()(la rimozione di unpack).Aggiorna ogni argomento
scalediImage()da array grezzo a un intervallo(min, max)(la modifica dello scale di Image).Se usi cascate Haar su una scheda interessata, ricompila con la funzionalità abilitata (la modifica delle cascate Haar).
Rivalida i modelli che dipendevano da
SCALE_S128_127(la modifica dello scaling).Sposta il codice dual-core su Open-AMP (la modifica CM4).