v4.5.6¶
v4.5.6 — це великий реліз, присвячений машинному навчанню. Модуль TensorFlow tf на мові C замінено новим, незалежним від рушія пакетом ml на основі TensorFlow Lite Micro (TFLM), перетворення зображення в тензор перенесено до image.to_ndarray(), а двоядерні плати перейшли на Open-AMP. Є кілька несумісних змін — ознайомтеся з ними нижче, перш ніж оновлювати ML-скрипти.
Основні зміни¶
Новий
mlпакет — старий модульtfпереписано у незалежний від рушія пакетml(ml.Model,ml.preprocessing,ml.utils,ml.apps);tfзалишається як псевдонім.TFLM-бекенд — застарілий
libtfзамінено на основі upstream TensorFlow Lite Micro: ~20% швидший інференс і менші бібліотеки.Open-AMP двоядерний — GIGA та Portenta H7 тепер використовують Open-AMP/RPMsg для міжядерного зв’язку M7/M4 (старий механізм CM4 вилучено).
Вбудований Bluetooth — мікропрограма CYW43 Bluetooth увімкнена на Nicla Vision, Portenta H7 та GIGA.
MicroPython 1.23.0, ulab 6.5.2 (з підтримкою 4-вимірних ndarray).
Несумісна зміна: API машинного навчання суттєво змінився, а каскади Хаара за замовчуванням вимкнено на більшості плат — дивіться розділ про несумісні зміни.
Нові можливості¶
Пакет
ml—ml.Modelзpredict()(roi,callback, список кількох входів), атрибути форми/dtype/масштабу/нульової точки для кожного тензора,ml.preprocessing.Normalization,ml.utils(NMS) таml.apps(чистий PythonMicroSpeech— розпізнавач ключових слів ізlisten()та неблокуючою потоковою передачеюtimeout=-1, а такожdraw_predictions()).Вбудована система моделей — моделі, перелічені у
models/index.txt, вбудовуються умовно залежно від плати (FOMO на всіх ML-платах, аудіомоделі на платах із мікрофонами).image.to_ndarray(dtype, buffer=...)— перетворення зображення на ndarray ulab (за бажанням — на місці).Image()з сирих масивів — нові ключові аргументиshape=,strides=,scale=дають змогу будувати зображення у відтінках сірого/RGB565 із сирих списків пікселів.draw_circle()із згладжуванням.Модуль
sslвморожено до мікропрограми на GIGA, Nicla Vision, Portenta H7, Nano RP2040 Connect, OpenMV 4/4P/PRO/PT, RT1060 та Pico.Аудіо —
audio.init()отримав ключовий аргументsamples=(PDM-зразки на канал);gain_dbтепер застосовується на мікрофонах DFSDM (наприклад, Nicla Vision).Протокол налагодження — нова команда
GET_STATEповертає прапорці run/text/JPEG, геометрію кадру та текст в одному пакеті, зменшуючи кількість звернень до хоста.Приклад Open-AMP vuart для міжядерного зв’язку.
Інші зміни та покращення¶
MicroPython оновлено до 1.23.0; ulab — до 6.5.2 з підтримкою 4-вимірних ndarray.
Швидший інференс — ML-бекенд зберігає стан/пам’ять між викликами (~20% швидше, підтримує LSTM-подібні моделі).
get_similarity()переімплементовано на бекендіdraw_image(ширша підтримка форматів та операцій).morph()та сімейство фільтрівmean()перейшли на розбір ключових аргументів;mask=тепер приймає змінне зображення.Перероблена схема пам’яті — DMA-регіони вирівняні до степеня двійки, блоки GC можна переставляти, підтримка кількох купин; менша фрагментація купини на початку роботи для плат із малим RAM; RT1060 отримує додаткову купину GC.
WiFi (CYW43) тепер деініціалізується під час м’якого скидання; SPI-TV дисплей очищає лише регіон кадрового буфера з кешу для плавніших оновлень.
Виправлення помилок¶
Камера та датчики:
Виправлено випадкову інвалідацію кешу CPU у шляху кадровий буфер/датчик на STM32 та i.MX RT, яка могла пошкоджувати дані зображення.
Виправлено зчитування по I2C теплових датчиків MLX90640/MLX90641 на платах i.MX RT (великі передачі тепер розбиваються на частини).
Машинне навчання:
Виправлено обробку
load_to_fbуml.Model, розмірbytearrayна вході, перевіркиndimndarray та перевірку формату/форми зображення вNormalization.
Зображення / система:
Додано відсутню константу
image.BLACK_BACKGROUNDдля підказки малювання та перевірку довжини буфера зображення/тензора.Виправлено кореневі покажчики GC для FIR та аудіо, які могли дозволяти збирачу звільняти активні буфери.
Приклад Servo Shield тепер використовує
SoftI2C, тому він працює на платах OpenMV RT.
Підтримка апаратного забезпечення та плат¶
Arduino GIGA — підтримка датчика HM01B0 / HM0360; двоядерний Open-AMP.
Bluetooth — мікропрограма CYW43 BT на Nicla Vision, Portenta H7 та GIGA.
Portenta H7 — Open-AMP M7/M4 RPMsg.
OpenMV RT1060 — додаткові блоки купини GC (більше пам’яті для Python).
Несумісні зміни API¶
Видимі для користувача несумісні зміни API між v4.5.5 та v4.5.6. Область охоплення: C-модулі Python у modules/ та бібліотеки Python у scripts/libraries/.
Кожна зміна позначена за рівнем впливу:
major — більшість скриптів, що використовували її, потребують редагування.
minor — вузький API; стосується лише скриптів, що його використовували.
behavior — той самий API, інші результати; перевірте налаштовані скрипти.
tooling — стосується механізмів двоядерності/плат, а не Python API.
Зміни згруповані за рівнем впливу у такому порядку. Якщо вам потрібно лише перенести код, перейдіть до контрольного списку міграції наприкінці. Кожен хеш коміту веде до його diff на GitHub.
Модуль tf замінено пакетом ml (major)¶
C-модуль TensorFlow tf переписано у незалежний від рушія пакет ml (tf збережено як зворотно сумісний псевдонім, але новий код має використовувати ml). Функції рівня модуля tf.load, tf.load_builtin_model та методи detect()/segment()/classify були вилучені — створіть ml.Model та викличте predict(). ml.Model(path) тепер повертає лише модель (без кортежу (labels, model)); мітки є атрибутом model.labels. predict() тепер повертає ulab ndarrays (не кортежі float), підтримує моделі з кількома входами (передайте список), NMS перенесено до ml.utils; нормалізація входу перенесена до ml.preprocessing.Normalization. Старий ml.py тепер є ml.apps.
Коміти: c7228cbb4, 6c212409c, 3e37f46db, 9a186f4e2, 70b89f474, 3f8491cb0, 4506682c2, 8b38f3837
image.unpack() вилучено — використовуйте to_ndarray() (major)¶
Нетривале image.unpack() було вилучено; замість нього перетворюйте зображення на тензор за допомогою image.to_ndarray(dtype, buffer=...) та застосовуйте нормалізацію масштабу/середнього/стандартного відхилення через ml.preprocessing.Normalization, а не через старий вбудований шлях масштабування зображень.
Аргумент scale у Image() із сирим масивом (minor)¶
При побудові Image із сирого масиву пікселів аргумент scale тепер приймає діапазон (min, max) замість (scale, add).
Коміт: 7b79fb4c7
Каскади Хаара вимкнено за замовчуванням на більшості плат (behavior)¶
Для звільнення місця у флеш-пам’яті виявлення облич за каскадами Хаара (find_features() / image.HaarCascade()) тепер вимкнено за замовчуванням на Arduino GIGA, Nicla Vision, Portenta H7, OpenMV 3, OpenMV 4 / 4 Plus / PRO та OpenMV Pure Thermal. Скрипти, що використовують каскади Хаара на цих платах, повинні перезібрати мікропрограму з увімкненою функцією.
Коміт: 6ce27c910
Переривання скрипту та масштабування тензора (behavior)¶
USB-налагоджувач тепер перериває виконуваний скрипт через функцію VM-abort MicroPython замість примусового стрибка PendSV (чистіше, але точка переривання відрізняється). Масштабування входу SCALE_S128_127 виправлено так, щоб воно відображало 0–255 на −128–127 без хибного підсилення — моделі, що покладалися на стару (неправильну) схему масштабування, дадуть інші результати.
Співпроцесор CM4 замінено на Open-AMP (tooling)¶
Застарілий механізм мікропрограми співпроцесора CM4 на GIGA / Nicla Vision / Portenta H7 вилучено і замінено Open-AMP/RPMsg. Двоядерний код потрібно перенести на модель Open-AMP (надається приклад vuart).
Контрольний список міграції¶
Для чистого переходу на v4.5.6 зазвичай потрібно виконати такі дії:
Перенести ML-код на
ml: створитиml.Model(path), викликатиpredict(), зчитатиmodel.labels, очікувати виводиndarrayта перенести нормалізацію доml.preprocessing.Normalization, а NMS — доml.utils(зміна пакета ml).Замінити
image.unpack()наimage.to_ndarray()(вилучення unpack).Оновити будь-який аргумент
scaleуImage()з сирим масивом до діапазону(min, max)(зміна Image scale).Якщо ви використовуєте каскади Хаара на ураженій платі, перезберіть мікропрограму з увімкненою функцією (зміна каскадів Хаара).
Повторно перевірити моделі, що залежали від
SCALE_S128_127(зміна масштабування).Перенести двоядерний код на Open-AMP (зміна CM4).