v4.5.6¶
v4.5.6 to duże wydanie poświęcone uczeniu maszynowemu. Moduł C tf dla TensorFlow został zastąpiony nowym, niezależnym od silnika pakietem ml opartym na TensorFlow Lite Micro (TFLM), konwersja obraz→tensor została przeniesiona do image.to_ndarray(), a płytki dwurdzeniowe przeszły na Open-AMP. Wprowadzono kilka zmian łamiących zgodność — przeczytaj je poniżej przed aktualizacją skryptów ML.
Najważniejsze zmiany¶
Nowy pakiet
ml— stary modułtfzostał przepisany na niezależny od silnika pakietml(ml.Model,ml.preprocessing,ml.utils,ml.apps);tfpozostaje jako alias.Backend TFLM — przestarzała biblioteka
libtfzostała zastąpiona przez TensorFlow Lite Micro oparty na wersji upstream: ~20% szybsze wnioskowanie i mniejsze biblioteki.Open-AMP dwurdzeniowy — GIGA i Portenta H7 używają teraz Open-AMP/RPMsg do komunikacji międzyrdzeniowej M7/M4 (stary mechanizm CM4 został usunięty).
Wbudowany Bluetooth — oprogramowanie układowe Bluetooth CYW43 włączone na Nicla Vision, Portenta H7 i GIGA.
MicroPython 1.23.0, ulab 6.5.2 (z obsługą 4-wymiarowych ndarray).
Zmiana łamiąca zgodność: API ML zmieniło się znacząco, a kaskady Haara są domyślnie wyłączone na większości płytek — zobacz zmiany łamiące zgodność.
Nowe funkcje¶
Pakiet
ml—ml.Modelzpredict()(roi,callback, lista wielu wejść), atrybutami kształtu/dtype/scale/zero-point dla każdego tensora,ml.preprocessing.Normalization,ml.utils(NMS) orazml.apps(napisany w czystym Pythonie detektor słów kluczowychMicroSpeechzlisten()i nieblokującym strumieniowaniemtimeout=-1, a takżedraw_predictions()).System modeli wbudowanych — modele wymienione w
models/index.txtsą warunkowo osadzane w zależności od płytki (FOMO na wszystkich płytkach ML, modele audio na płytkach z mikrofonami).image.to_ndarray(dtype, buffer=...)— konwertuje obraz na ndarray biblioteki ulab (opcjonalnie w miejscu).Image()z surowych tablic — nowe argumenty słowneshape=,strides=,scale=budują obrazy w skali szarości / RGB565 z surowych list pikseli.Wygładzane
draw_circle().Moduł
sslwbudowany w oprogramowanie układowe na GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 i Pico.Audio —
audio.init()zyskało argument słownysamples=(próbki PDM na kanał);gain_dbdziała teraz na mikrofonach DFSDM (np. Nicla Vision).Protokół debugowania — nowe polecenie
GET_STATEzwraca w jednym pakiecie flagi run/text/JPEG, geometrię ramki i tekst, ograniczając liczbę zapytań do hosta.Przykład vuart dla Open-AMP do komunikacji międzyrdzeniowej.
Inne zmiany i usprawnienia¶
MicroPython zaktualizowany do 1.23.0; ulab do 6.5.2 z obsługą 4-wymiarowych ndarray.
Szybsze wnioskowanie — backend ML utrzymuje trwały stan/pamięć pomiędzy wywołaniami (~20% szybciej, obsługuje modele typu LSTM).
get_similarity()zostało zaimplementowane od nowa na backendziedraw_image(szersza obsługa formatów/operacji).morph()oraz rodzina filtrówmean()przeszły na parsowanie argumentów słownych;mask=akceptuje teraz mutowalny obraz.Przeprojektowany układ pamięci — regiony DMA wyrównane do potęgi 2, bloki GC z możliwością zmiany kolejności, wiele stert; mniejsza wczesna fragmentacja sterty na płytkach z małą ilością RAM; RT1060 zyskuje dodatkową stertę GC.
WiFi (CYW43) jest teraz deinicjalizowane przy miękkim resecie; wyświetlacz SPI-TV opróżnia z pamięci podręcznej tylko region bufora ramki dla płynniejszych aktualizacji.
Poprawki błędów¶
Kamera i sensory:
Naprawiono przypadkowe unieważnianie pamięci podręcznej CPU w ścieżce bufora ramki/sensora na STM32 i i.MX RT, które mogło uszkadzać dane obrazu.
Naprawiono odczyty termiczne I2C MLX90640/MLX90641 na płytkach i.MX RT (duże transfery są teraz dzielone na fragmenty).
Uczenie maszynowe:
Naprawiono obsługę
load_to_fbwml.Model, ustalanie rozmiaru wejściowejbytearray, sprawdzaniendimw ndarray oraz walidację formatu/kształtu obrazu wNormalization.
Obraz / system:
Dodano brakującą stałą podpowiedzi rysowania
image.BLACK_BACKGROUNDoraz kontrolę poprawności długości bufora obrazu/tensora.Naprawiono wskaźniki korzeni GC dla FIR i audio, które mogły pozwolić kolektorowi zwolnić używane bufory.
Przykład Servo Shield używa teraz
SoftI2C, dzięki czemu działa na płytkach OpenMV RT.
Sprzęt i obsługa płytek¶
Arduino GIGA — obsługa sensorów HM01B0 / HM0360; dwurdzeniowy Open-AMP.
Bluetooth — oprogramowanie układowe BT CYW43 na Nicla Vision, Portenta H7 i GIGA.
Portenta H7 — RPMsg M7/M4 przez Open-AMP.
OpenMV RT1060 — dodatkowe bloki sterty GC (więcej pamięci dla Pythona).
Zmiany API łamiące zgodność¶
Widoczne dla użytkownika zmiany API łamiące zgodność pomiędzy v4.5.5 a v4.5.6. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.
Każda zmiana jest oznaczona swoim wpływem:
duży — większość skryptów, które tego używały, wymaga zmian.
mały — wąskie API; dotyczy tylko skryptów, które tego używały.
zachowanie — to samo API, inne wyniki; ponownie sprawdź dostrojone skrypty.
narzędzia — dotyczy mechanizmów dwurdzeniowych / płytkowych, a nie API Pythona.
Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz tylko przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy skrót commita prowadzi do jego diffa na GitHubie.
Moduł tf zastąpiony pakietem ml (duży)¶
Moduł C tf dla TensorFlow został przepisany na niezależny od silnika pakiet ml (tf jest zachowany jako wstecznie kompatybilny alias, ale nowy kod powinien używać ml). Funkcje na poziomie modułu tf.load, tf.load_builtin_model oraz metody detect()/segment()/klasyfikacji zostały usunięte — utwórz ml.Model i wywołaj predict(). ml.Model(path) zwraca teraz tylko model (bez krotki (labels, model)); etykiety są atrybutem model.labels. predict() zwraca teraz ndarraye biblioteki ulab (a nie krotki float), obsługuje modele wielowejściowe (przekaż listę), a NMS przeniesiono do ml.utils; normalizacja wejścia została przeniesiona do ml.preprocessing.Normalization. Stary ml.py to teraz ml.apps.
Commity: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() usunięte — użyj to_ndarray() (duży)¶
Krótko istniejące image.unpack() zostało usunięte; zamiast tego konwertuj obraz na tensor za pomocą image.to_ndarray(dtype, buffer=...) i stosuj normalizację scale/mean/stdev za pomocą ml.preprocessing.Normalization, a nie starej wbudowanej ścieżki skalowania obrazu.
Argument scale surowej tablicy w Image() (mały)¶
Podczas tworzenia Image z surowej tablicy pikseli argument scale przyjmuje teraz zakres (min, max) zamiast (scale, add).
Commit: 7b79fb4c7
Kaskady Haara domyślnie wyłączone na większości płytek (zachowanie)¶
Aby zwolnić miejsce w pamięci flash, wykrywanie twarzy oparte na kaskadach Haara (find_features() / image.HaarCascade()) jest teraz domyślnie wyłączone na Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO oraz OpenMV Pure Thermal. Skrypty używające kaskad Haara na tych płytkach muszą ponownie zbudować oprogramowanie układowe z włączoną tą funkcją.
Commit: 6ce27c910
Przerywanie skryptu i skalowanie tensora (zachowanie)¶
Debuger USB przerywa teraz działający skrypt za pomocą funkcji VM-abort MicroPythona zamiast wymuszonego skoku PendSV (czystsze rozwiązanie, ale punkt przerwania jest inny). Skalowanie wejścia SCALE_S128_127 zostało poprawione tak, aby mapować 0–255 na −128–127 bez błędnego wzmocnienia — modele opierające się na starym (błędnym) skalowaniu dadzą inne wyniki.
Koprocesor CM4 zastąpiony przez Open-AMP (narzędzia)¶
Przestarzały mechanizm oprogramowania układowego koprocesora CM4 na GIGA / Nicla Vision / Portenta H7 został usunięty i zastąpiony przez Open-AMP/RPMsg. Kod dwurdzeniowy musi przejść na model Open-AMP (dostarczono przykład vuart).
Lista kontrolna migracji¶
Dla czystego przeniesienia na v4.5.6 typowa praca to:
Przenieś kod ML na
ml: utwórzml.Model(path), wywołajpredict(), odczytajmodel.labels, oczekuj wyjść typundarrayoraz przenieś normalizację doml.preprocessing.Normalization, a NMS doml.utils(zmiana pakietu ml).Zastąp
image.unpack()przezimage.to_ndarray()(usunięcie unpack).Zaktualizuj wszelkie argumenty
scalesurowej tablicy wImage()na zakres(min, max)(zmiana skali Image).Jeśli używasz kaskad Haara na płytce, której to dotyczy, zbuduj ponownie oprogramowanie z włączoną tą funkcją (zmiana kaskad Haara).
Zwaliduj ponownie modele, które zależały od
SCALE_S128_127(zmiana skalowania).Przenieś kod dwurdzeniowy na Open-AMP (zmiana CM4).