v4.5.6¶
v4.5.6 je velké vydání zaměřené na strojové učení. C modul tf pro TensorFlow byl nahrazen novým balíčkem ml, který je nezávislý na výpočetním jádře a postaven na TensorFlow Lite Micro (TFLM), převod obraz→tenzor se přesunul do image.to_ndarray() a dvoujádrové desky přešly na Open-AMP. Obsahuje několik zásadních změn — před aktualizací ML skriptů si je přečtěte níže.
Hlavní novinky¶
Nový balíček
ml— starý modultfbyl přepsán do balíčkumlnezávislého na výpočetním jádře (ml.Model,ml.preprocessing,ml.utils,ml.apps);tfzůstává zachován jako alias.Backend TFLM — zastaralá
libtfbyla nahrazena upstreamovým TensorFlow Lite Micro: ~20% rychlejší inference a menší knihovny.Dvoujádrové Open-AMP — GIGA a Portenta H7 nyní používají Open-AMP/RPMsg pro komunikaci mezi jádry M7/M4 (starý mechanismus CM4 byl odstraněn).
Vestavěný Bluetooth — firmware Bluetooth CYW43 povolen na Nicla Vision, Portenta H7 a GIGA.
MicroPython 1.23.0, ulab 6.5.2 (s podporou 4-D ndarray).
Zásadní změna: ML API se podstatně změnilo a Haar kaskády jsou na většině desek ve výchozím nastavení vypnuté — viz zásadní změny.
Nové funkce¶
Balíček
ml—ml.Models metodoupredict()(roi,callback, seznam více vstupů), atributy shape/dtype/scale/zero-point pro jednotlivé tenzory,ml.preprocessing.Normalization,ml.utils(NMS) aml.apps(čistě pythonovský detektor klíčových slovMicroSpeechs metodoulisten()a neblokujícím streamovánímtimeout=-1, plusdraw_predictions()).Systém vestavěných modelů — modely uvedené v
models/index.txtjsou podmíněně vloženy podle desky (FOMO na všech ML deskách, audio modely na deskách s mikrofony).image.to_ndarray(dtype, buffer=...)— převede obraz na ulab ndarray (volitelně na místě).Image()z raw polí — nové klíčové argumentyshape=,strides=,scale=sestaví obrazy ve stupních šedi / RGB565 z raw seznamů pixelů.Vyhlazené
draw_circle().Modul
sslzamražen do firmwaru na GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 a Pico.Audio —
audio.init()získalo klíčový argumentsamples=(počet PDM vzorků na kanál);gain_dbse nyní uplatňuje na mikrofonech DFSDM (např. Nicla Vision).Ladicí protokol — nový příkaz
GET_STATEvrací příznaky run/text/JPEG, geometrii snímku a text v jediném paketu, čímž omezuje obousměrnou komunikaci s hostitelem.Příklad vuart pro Open-AMP pro komunikaci mezi jádry.
Další změny a vylepšení¶
MicroPython aktualizován na 1.23.0; ulab na 6.5.2 s podporou 4-D ndarray.
Rychlejší inference — ML backend si mezi voláními uchovává trvalý stav/paměť (~20% rychlejší, podporuje modely typu LSTM).
get_similarity()byla znovu implementována na backendudraw_image(širší podpora formátů/operací).morph()a rodina filtrůmean()přešly na zpracování pomocí klíčových argumentů;mask=nyní přijímá měnitelný obraz.Přepracované rozvržení paměti — DMA oblasti zarovnané na mocniny 2, přeskupitelné GC bloky, více hald; menší časná fragmentace haldy na deskách s malou RAM; RT1060 získává navíc GC haldu.
WiFi (CYW43) je nyní při měkkém resetu deinicializováno; SPI-TV displej proplachuje z cache pouze oblast framebufferu pro plynulejší aktualizace.
Opravy chyb¶
Kamera a senzory:
Opravena náhodná invalidace CPU cache v cestě framebuffer/senzor na STM32 a i.MX RT, která mohla poškodit obrazová data.
Opravena teplotní I2C čtení MLX90640/MLX90641 na deskách i.MX RT (velké přenosy jsou nyní rozděleny do bloků).
Strojové učení:
Opraveno zpracování
load_to_fbvml.Model, dimenzování vstupníhobytearray, kontrolyndimu ndarray a validace formátu/tvaru obrazu vNormalization.
Obraz / systém:
Přidána chybějící konstanta nápovědy pro kreslení
image.BLACK_BACKGROUNDa kontrola délky bufferu obrazu/tenzoru.Opraveny GC root ukazatele FIR a audia, které mohly umožnit sběrači uvolnit používané buffery.
Příklad Servo Shield nyní používá
SoftI2C, takže funguje na deskách OpenMV RT.
Hardware a podpora desek¶
Arduino GIGA — podpora senzorů HM01B0 / HM0360; dvoujádrové Open-AMP.
Bluetooth — firmware CYW43 BT na Nicla Vision, Portenta H7 a GIGA.
Portenta H7 — Open-AMP M7/M4 RPMsg.
OpenMV RT1060 — další GC bloky haldy (více paměti pro Python).
Zásadní změny API¶
Změny API viditelné pro uživatele mezi v4.5.5 a v4.5.6. Rozsah: pythonovské C moduly v modules/ a pythonovské knihovny v scripts/libraries/.
Každá změna je označena svým dopadem:
major — většina skriptů, které ji používaly, vyžaduje úpravy.
minor — úzké API; ovlivňuje pouze skripty, které ho používaly.
behavior — stejné API, jiné výsledky; znovu zkontrolujte vyladěné skripty.
tooling — ovlivňuje mechanismy dvoujádrových / deskových řešení, nikoli Python API.
Změny jsou seskupeny podle dopadu v tomto pořadí. Pokud chcete pouze přenést svůj kód, přejděte na kontrolní seznam migrace na konci. Každý hash commitu odkazuje na svůj diff na GitHubu.
Modul tf nahrazen balíčkem ml (major)¶
C modul tf pro TensorFlow byl přepsán do balíčku ml nezávislého na výpočetním jádře (tf je zachován jako zpětně kompatibilní alias, ale nový kód by měl používat ml). Funkce na úrovni modulu tf.load, tf.load_builtin_model a metody detect()/segment()/klasifikace byly odstraněny — vytvořte ml.Model a zavolejte predict(). ml.Model(path) nyní vrací pouze model (žádnou n-tici (labels, model)); štítky jsou atributem model.labels. predict() nyní vrací ulab ndarray (nikoli n-tice float), podporuje modely s více vstupy (předejte seznam) a NMS se přesunulo do ml.utils; normalizace vstupu se přesunula do ml.preprocessing.Normalization. Starý ml.py je nyní ml.apps.
Commity: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() odstraněno — použijte to_ndarray() (major)¶
Krátce existující image.unpack() bylo odstraněno; místo toho převeďte obraz na tenzor pomocí image.to_ndarray(dtype, buffer=...) a normalizaci scale/mean/ stdev proveďte pomocí ml.preprocessing.Normalization namísto staré vestavěné cesty škálování obrazu.
Argument scale u Image() z raw pole (minor)¶
Při vytváření Image z raw pole pixelů argument scale nyní přijímá rozsah (min, max) namísto (scale, add).
Commit: 7b79fb4c7
Haar kaskády na většině desek ve výchozím nastavení vypnuté (behavior)¶
Pro uvolnění místa ve flash paměti je detekce obličejů pomocí Haar kaskád (find_features() / image.HaarCascade()) nyní ve výchozím nastavení vypnutá na Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO a OpenMV Pure Thermal. Skripty používající Haar kaskády na těchto deskách musí znovu sestavit firmware s touto funkcí zapnutou.
Commit: 6ce27c910
Přerušení skriptu a škálování tenzorů (behavior)¶
USB debugger nyní přerušuje běžící skript pomocí funkce VM-abort v MicroPythonu namísto vynuceného skoku PendSV (čistší, ale bod přerušení se liší). Vstupní škálování SCALE_S128_127 bylo opraveno tak, aby mapovalo 0–255 na −128–127 bez chybného zisku — modely spoléhající na staré (nesprávné) škálování budou produkovat jiné výsledky.
Koprocesor CM4 nahrazen Open-AMP (tooling)¶
Zastaralý mechanismus firmwaru koprocesoru CM4 na GIGA / Nicla Vision / Portenta H7 byl odstraněn a nahrazen Open-AMP/RPMsg. Dvoujádrový kód musí přejít na model Open-AMP (je k dispozici příklad vuart).
Kontrolní seznam migrace¶
Pro čistý přechod na v4.5.6 je typická práce následující:
Přeneste ML kód na
ml: vytvořteml.Model(path), zavolejtepredict(), čtětemodel.labels, očekávejte výstupyndarraya přesuňte normalizaci naml.preprocessing.Normalizationa NMS naml.utils(změna balíčku ml).Nahraďte
image.unpack()zaimage.to_ndarray()(odstranění unpack).Aktualizujte jakýkoli argument
scaleuImage()z raw pole na rozsah(min, max)(změna Image scale).Pokud používáte Haar kaskády na postižené desce, znovu sestavte firmware s touto funkcí zapnutou (změna Haar kaskád).
Znovu ověřte modely, které závisely na
SCALE_S128_127(změna škálování).Přesuňte dvoujádrový kód na Open-AMP (změna CM4).