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