Комментарии 23
Спасибо за столь обширный материал. Как по мне, слишком много информации для одной статьи и лучше было бы разбить на несколько меньшего размера со своей отдельной тематикой, тем более что они не пересекаются, и одну общую, как связующее звено.
Пожалуйста). Возможно вы правы. Я уже вынес bluetooth часть в отдельную статью, которую скоро опубликую. Обычно пишу статьи, объединяющие разные тематики. С одной стороны хочется как-либо ужать материал, сделать более доступным, с другой стороны кажется, что материала одной тематики в сжатом виде для статьи будет не достаточно. Видел, что некоторые авторы создают и публикуют серии.
С какой скоростью работает такая модель распознавания?
Очень хороший материал! Просто на редкость интересный и полезный! Особенно в свете того, во что превратился хабр. Спасбо! Буду обязательно опираться на него, в дальнейших своих разработках!
Пожалуйста. Успехов вам в разработке! Можете также посмотреть на https://qengineering.eu/deep-learning-examples-on-raspberry-32-64-os.html ресурс, где выложены примеры готовыми моделями для распознавания изображений для микрокомпьютеров
Благодаря Вашей статье у меня начался болезненный переход к иному восприятию программирования - от линейного и даже асинхронного к машинному обучению. Парадигма программирования чего либо радикально меняется. Я только размышлял, как мне примени ь ПИД- регулятор для контроля параметров температуры и влажности при инкубации а это уже, как оказалось, глубокое прошлое. Конечно, читая статью хотелось "покапризничать", так как проработка обсуждения, доведенная до битов старт-стопа утяжелила изложение, тем не менее прекрасная работа, буду с интересом следить за Вашим творчеством. Еще раз благодарю за то, что зародили во мне новый Интерес - погрузиться в машинное обучение
Все, конечно, намешано в один котел. Хорошо, что вы разобрались в книге "TinyML Cookbook - Second Edition", там как раз описан проект, который вы взяли для статьи (chapter 6). Издания от "Лани" зачастую полны опечаток, а иногда и ошибок. Можно было своими словами добавить пояснений, которые выкинули из книги, тогда у читателя хотя бы картинка сложилась до конца.
Например, названия классов в книге неспроста взяты cirlce, cross, pan. Это дает некоторую логику в движениях при сборе датасета. Как и то, как этот датасет собирать.
Кроме того, вы не добавили 4й класс unknown. Который нужен для случаев, когда плата просто на столе лежит. Собрать его просто - просто запишите показания, когда плата не двигается. Иначе у вас при классификации будет все время выдавать один из классов, хотя плата, возможно, ничего не будет делать. Я тоже делал из этой книги проект на arduino Nano 33 ble с видеокамерой и у меня так было.
Важное пояснение - tensorflow должен быть с keras 2x версий, современный, с keras 3, потребует значительных усилий для правок, включая выпуск новой книги в издательстве "Лань".
xxd утилита конвертации модели на windows работает некорректно, и лучше это делать на linux. xxd -c 60 -i model.tflite > indoor_scene_recognition.h
Непонятно зачем билдить tensorflow на raspberry pi, когда есть готовые wheels. Но, видимо, Q-engineering виднее, они и с vulkan модели запускали в надежде на ускорение.
Спасибо, что упомянули про ESP32-S3, хотя не понятно, как это клеится к общей статье. Тем не менее, данный объект крайне прожорлив по питанию, и, греется как orange pi в ее молодые годы. Тем не менее мобилен, на удивление хорошо передает видеопоток.
Спасибо за комментарий.
В книге TinyML Cookbook жесты cirlce, cross, pad используются для управления просмотра Youtube. Я тоже решил взять эти три жеста, хотя никто не мешает выбрать любые другие. Мне понравилось, что в книге дается простое объяснение разным вопросам. Поэтому я дал ссылку на источники, чтобы читатель смог самостоятельно ознакомится с материалом в случае необходимости. Но я решил реализовать модель с нуля. Пробовал разные структуры сети, начал с LSTM, но остановился на модели, что привел в статье, она простая, быстро обучается на данной выборке, число нейронов можно можно даже уменьшить в два раза.
Четвертый класс есть смысл добавить, я скорее так и сделаю. Но, опять же никто не мешает любому добавить нужный класс, это делается легко. Выбирается нужный жест, делается его запись в файл, в словарь gestures добавляется имя класса, а выход softmax увеличивается на 1.
Надеюсь, издательство "Лань" выпустит издание с keras 3). У меня установлена keras 3.6.0. И модель строил в этой версии. Думаю многое зависит от структуры модели. Есно, после конвертации модель нужно тестировать.
Мне было интересно сбилдить tensorflow C++ на Raspberry pi, это не занимает много времени и ресурсов, и поведение модели похоже как на МК. Ну, как вы заметили, варианты могут быть разные.
ESP32-S3 клеиться прямым образом, он у меня был в наличии, и на нем тестировалась модель. В моем случае этом проекте ESP32-S3 потребляет 0,08 - 0.1 А, средняя температура 38 ℃
Большое спасибо за статью! Как раз только начал ml для МК изучать, так что прям в тему. Осталось только esp32 дождаться и можно как по гайду пробовать, а потом и до остального дойду. Ещё раз спасибо :)
P.S. Жаль, кармы не хватает плюсик поставить, но в закладки добавил.
Отличная разборка материала!
Модели и данные вы как-то иначе собираете и обучаете, нежели тут😃
https://wiki.seeedstudio.com/XIAO-BLE-Sense-TFLite-Getting-Started/
Тоже планирую проверить одну гипотезу и попробовать определять углы ориентации с помощью обученной модели в полете.
Спасибо. Я бегло просмотрел статью по ссылке. Подход там похожий. И модель сети тоже, последний слой - softmax для вычисления вероятностей классов. Используется Arduino среда, думаю, можно адаптировать на разные МК. В приведенных книгах есть примеры для Arduino и Raspberry pi Pico
Параграф с подготовкой данных для обучения хоть и описан хорошо, но мне не все понятно.
Примеры очень и очень непрактичные.
Температуру у нас Роман Менделевич Вильфанд не может предсказать, не то, что искусственный интеллект😐
Надеюсь у вас найдутся силы на новую статью, с меньшей теорией, тем более по MEMS и I2C, и побольше про ML и практическую сторону с результатом.
Можете писать в личку, если надо что-нибудь уточнить. Теорию я на самом деле описал общими словами. По I2C в основном брал материал с первой книги, мне показалось, что там довольно просто и наглядно написано. Не думал, что будет сложно для восприятия. Но на заметку принял. Я в свое время изучал по академическим материалам, там более детально с математикой
Большое спасибо за мтаериал, почитаю на досуге
Спасибо большое за хорошую обзорную статью.
Каким образом получается
Первый Dense-слой: 64 нейрона...
Dropout-слой: Убирает 20% случайных нейронов для уменьшения переобучения.
Второй Dense-слой: 32 нейрона, relu.
? Как рассчитать, что именно так должно быть?
Вот это понятно
Выходной слой: 3 нейрона (по количеству классов), softmax для вероятностного выхода.
и про входную размерность тоже понятно.
Слои чаще всего подбираются на основании практики. Если рассмотреть различные примеры ML-моделей, то в итоге обнаруживаются, что-то вроде шаблонных структур. На Udemy есть неплохие курсы по Tensorflow. GPT может предлагать неплохие идею структуры Можете поэкспериментировать с моделью из этой статьи, изменить в кратности количества нейронов в слоях, убрать Dropout, и т.д., и понаблюдать графики обучения. Основная цель - это минимизация ошибок обучения, и избежания переобучения, т.е, чтобы модель хорошо работала на новых ранее не используемых данных.
Machine learning на ESP32