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ý modul tf byl přepsán do balíčku ml nezávislého na výpočetním jádře (ml.Model, ml.preprocessing, ml.utils, ml.apps); tf zůstává zachován jako alias.

  • Backend TFLM — zastaralá libtf byla 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 mlml.Model s metodou predict() (roi, callback, seznam více vstupů), atributy shape/dtype/scale/zero-point pro jednotlivé tenzory, ml.preprocessing.Normalization, ml.utils (NMS) a ml.apps (čistě pythonovský detektor klíčových slov MicroSpeech s metodou listen() a neblokujícím streamováním timeout=-1, plus draw_predictions()).

  • Systém vestavěných modelů — modely uvedené v models/index.txt jsou 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é argumenty shape=, strides=, scale= sestaví obrazy ve stupních šedi / RGB565 z raw seznamů pixelů.

  • Vyhlazené draw_circle().

  • Modul ssl zamražen do firmwaru na GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 a Pico.

  • Audioaudio.init() získalo klíčový argument samples= (počet PDM vzorků na kanál); gain_db se nyní uplatňuje na mikrofonech DFSDM (např. Nicla Vision).

  • Ladicí protokol — nový příkaz GET_STATE vrací 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 backendu draw_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_fb v ml.Model, dimenzování vstupního bytearray, kontroly ndim u ndarray a validace formátu/tvaru obrazu v Normalization.

Obraz / systém:

  • Přidána chybějící konstanta nápovědy pro kreslení image.BLACK_BACKGROUND a 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.

Commity: 9848eed12, de0d46fa6

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.

Commity: e758a0f95, a4d97c572

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).

Commity: 3cc57fea4, 93f2d4c41

Kontrolní seznam migrace

Pro čistý přechod na v4.5.6 je typická práce následující:

  1. Přeneste ML kód na ml: vytvořte ml.Model(path), zavolejte predict(), čtěte model.labels, očekávejte výstupy ndarray a přesuňte normalizaci na ml.preprocessing.Normalization a NMS na ml.utils (změna balíčku ml).

  2. Nahraďte image.unpack() za image.to_ndarray() (odstranění unpack).

  3. Aktualizujte jakýkoli argument scale u Image() z raw pole na rozsah (min, max) (změna Image scale).

  4. Pokud používáte Haar kaskády na postižené desce, znovu sestavte firmware s touto funkcí zapnutou (změna Haar kaskád).

  5. Znovu ověřte modely, které závisely na SCALE_S128_127 (změna škálování).

  6. Přesuňte dvoujádrový kód na Open-AMP (změna CM4).