v4.5.6¶
v4.5.6 est la grande version dédiée à l’apprentissage automatique. Le module C TensorFlow tf a été remplacé par un nouveau paquet ml, indépendant du moteur, reposant sur TensorFlow Lite Micro (TFLM) ; la conversion image→tenseur a été déplacée vers image.to_ndarray(), et les cartes bicœur sont passées à Open-AMP. Plusieurs changements incompatibles sont à noter — lisez-les ci-dessous avant de mettre à niveau vos scripts ML.
Points forts¶
Nouveau paquet
ml— l’ancien moduletfa été réécrit en un paquetmlindépendant du moteur (ml.Model,ml.preprocessing,ml.utils,ml.apps) ;tfsubsiste comme alias.Backend TFLM — l’obsolète
libtfa été remplacé par TensorFlow Lite Micro issu de la source amont : inférence ~20 % plus rapide et bibliothèques plus compactes.Bicœur Open-AMP — les GIGA et Portenta H7 utilisent désormais Open-AMP/RPMsg pour la communication inter-cœurs M7/M4 (l’ancien mécanisme CM4 a été supprimé).
Bluetooth intégré — le micrologiciel Bluetooth CYW43 est activé sur Nicla Vision, Portenta H7 et GIGA.
MicroPython 1.23.0, ulab 6.5.2 (avec prise en charge des ndarray 4D).
Incompatibilité : l’API ML a sensiblement changé et les cascades de Haar sont désactivées par défaut sur la plupart des cartes — voir les changements incompatibles.
Nouvelles fonctionnalités¶
Paquet
ml—ml.Modelavecpredict()(roi,callback, liste d’entrées multiples), attributs de forme/dtype/échelle/point-zéro par tenseur,ml.preprocessing.Normalization,ml.utils(NMS) etml.apps(un détecteur de mots-clésMicroSpeechen pur Python aveclisten()et diffusion non bloquante viatimeout=-1, plusdraw_predictions()).Système de modèles intégrés — les modèles répertoriés dans
models/index.txtsont intégrés de manière conditionnelle selon la carte (FOMO sur toutes les cartes ML, modèles audio sur les cartes équipées de microphones).image.to_ndarray(dtype, buffer=...)— convertit une image en un ndarray ulab (éventuellement sur place).Image()à partir de tableaux bruts — les nouveaux arguments nommésshape=,strides=etscale=construisent des images en niveaux de gris/RGB565 à partir de listes de pixels brutes.draw_circle()avec anticrénelage.Module
sslfigé dans le micrologiciel sur GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 et Pico.Audio —
audio.init()a reçu un argument nommésamples=(échantillons PDM par canal) ;gain_dbs’applique désormais sur les microphones DFSDM (par exemple le Nicla Vision).Protocole de débogage — une nouvelle commande
GET_STATErenvoie les indicateurs run/text/JPEG, la géométrie de trame et le texte dans un seul paquet, réduisant les allers-retours avec l’hôte.Exemple vuart Open-AMP pour la communication inter-cœurs.
Autres changements et améliorations¶
MicroPython mis à jour vers 1.23.0 ; ulab vers 6.5.2 avec prise en charge des ndarray 4D.
Inférence plus rapide — le backend ML conserve son état/mémoire de manière persistante entre les invocations (~20 % plus rapide, prend en charge les modèles de type LSTM).
get_similarity()a été réimplémenté sur le backenddraw_image(prise en charge élargie des formats/opérations).morph()et la famille de filtresmean()sont passées à l’analyse par arguments nommés ;mask=accepte désormais une image modifiable.Agencement mémoire repensé — régions DMA alignées sur des puissances de 2, blocs GC réordonnançables, tas multiples ; moins de fragmentation précoce du tas sur les cartes à faible RAM ; le RT1060 gagne un tas GC supplémentaire.
Le WiFi (CYW43) est désormais désinitialisé lors d’une réinitialisation logicielle ; l’affichage SPI-TV ne purge du cache que la région du tampon d’image pour des mises à jour plus fluides.
Corrections de bogues¶
Caméra et capteurs :
Correction d’une invalidation accidentelle du cache CPU dans le chemin tampon d’image/capteur sur STM32 et i.MX RT, qui pouvait corrompre les données d’image.
Correction des lectures thermiques I2C MLX90640/MLX90641 sur les cartes i.MX RT (les transferts volumineux sont désormais fragmentés).
Apprentissage automatique :
Correction dans
ml.Modelde la gestion deload_to_fb, du dimensionnement dubytearrayd’entrée, des vérifications dendimdes ndarray et de la validation de format d’image/forme deNormalization.
Image / système :
Ajout de la constante d’indication de dessin
image.BLACK_BACKGROUNDmanquante et d’une vérification de cohérence de la longueur des tampons image/tenseur.Correction des pointeurs racine GC FIR et audio qui pouvaient amener le collecteur à libérer des tampons en cours d’utilisation.
L’exemple Servo Shield utilise désormais
SoftI2Cpour fonctionner sur les cartes OpenMV RT.
Prise en charge matérielle et des cartes¶
Arduino GIGA — prise en charge des capteurs HM01B0 / HM0360 ; bicœur Open-AMP.
Bluetooth — micrologiciel BT CYW43 sur Nicla Vision, Portenta H7 et GIGA.
Portenta H7 — RPMsg M7/M4 Open-AMP.
OpenMV RT1060 — blocs de tas GC supplémentaires (davantage de mémoire Python).
Changements d’API incompatibles¶
Ruptures d’API visibles par l’utilisateur entre v4.5.5 et v4.5.6. Portée : modules C Python dans modules/ et bibliothèques Python dans scripts/libraries/.
Chaque changement est étiqueté selon son impact :
majeur — la plupart des scripts qui l’utilisaient doivent être modifiés.
mineur — API restreinte ; n’affecte que les scripts qui l’utilisaient.
comportement — même API, résultats différents ; revérifiez les scripts ajustés.
outillage — affecte les mécanismes bicœur / de carte, pas l’API Python.
Les changements sont regroupés par impact dans cet ordre. Si vous souhaitez simplement porter votre code, passez à la liste de contrôle de migration à la fin. Chaque hachage de commit renvoie à son diff sur GitHub.
Module tf remplacé par le paquet ml (majeur)¶
Le module C TensorFlow tf a été réécrit en un paquet ml indépendant du moteur (tf est conservé comme alias rétrocompatible, mais le nouveau code devrait utiliser ml). Les fonctions de niveau module tf.load, tf.load_builtin_model et les méthodes detect()/segment()/de classification ont été supprimées — construisez un ml.Model et appelez predict(). ml.Model(path) ne renvoie désormais que le modèle (plus de tuple (labels, model)) ; les étiquettes sont un attribut model.labels. predict() renvoie désormais des ndarray ulab (et non des tuples de flottants), prend en charge les modèles à entrées multiples (passez une liste), et la NMS a été déplacée vers ml.utils ; la normalisation d’entrée a été déplacée vers ml.preprocessing.Normalization. L’ancien ml.py est désormais ml.apps.
Commits : c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() supprimé — utilisez to_ndarray() (majeur)¶
L’éphémère image.unpack() a été supprimé ; convertissez plutôt une image en tenseur avec image.to_ndarray(dtype, buffer=...), et appliquez la normalisation par échelle/moyenne/écart-type avec ml.preprocessing.Normalization plutôt qu’avec l’ancien chemin de mise à l’échelle d’image intégré.
Argument scale de tableau brut de Image() (mineur)¶
Lors de la construction d’une Image à partir d’un tableau de pixels brut, l’argument scale prend désormais une plage (min, max) au lieu de (scale, add).
Commit : 7b79fb4c7
Cascades de Haar désactivées par défaut sur la plupart des cartes (comportement)¶
Pour libérer de l’espace en mémoire flash, la détection de visage par cascade de Haar (find_features() / image.HaarCascade()) est désormais désactivée par défaut sur Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO et OpenMV Pure Thermal. Les scripts utilisant des cascades de Haar sur ces cartes doivent reconstruire le micrologiciel avec la fonctionnalité activée.
Commit : 6ce27c910
Interruption de script et mise à l’échelle de tenseur (comportement)¶
Le débogueur USB interrompt désormais un script en cours d’exécution via la fonctionnalité d’abandon de VM de MicroPython au lieu d’un saut PendSV forcé (plus propre, mais le point d’interruption diffère). La mise à l’échelle d’entrée SCALE_S128_127 a été corrigée pour mapper 0–255 sur −128–127 sans gain erroné — les modèles reposant sur l’ancienne mise à l’échelle (incorrecte) produiront des résultats différents.
Coprocesseur CM4 remplacé par Open-AMP (outillage)¶
Le mécanisme obsolète de micrologiciel du coprocesseur CM4 sur GIGA / Nicla Vision / Portenta H7 a été supprimé et remplacé par Open-AMP/RPMsg. Le code bicœur doit migrer vers le modèle Open-AMP (un exemple vuart est fourni).
Liste de contrôle de migration¶
Pour un portage propre vers v4.5.6, le travail typique est le suivant :
Portez le code ML vers
ml: construisezml.Model(path), appelezpredict(), lisezmodel.labels, attendez-vous à des sortiesndarray, et déplacez la normalisation versml.preprocessing.Normalizationet la NMS versml.utils(le changement du paquet ml).Remplacez
image.unpack()parimage.to_ndarray()(la suppression de unpack).Mettez à jour tout argument
scalede tableau brut deImage()vers une plage(min, max)(le changement de scale d’Image).Si vous utilisez des cascades de Haar sur une carte concernée, reconstruisez avec la fonctionnalité activée (le changement des cascades de Haar).
Revalidez les modèles qui dépendaient de
SCALE_S128_127(le changement de mise à l’échelle).Migrez le code bicœur vers Open-AMP (le changement CM4).