Как стать автором
Обновить

Комментарии 23

Спасибо за столь обширный материал. Как по мне, слишком много информации для одной статьи и лучше было бы разбить на несколько меньшего размера со своей отдельной тематикой, тем более что они не пересекаются, и одну общую, как связующее звено.

Пожалуйста). Возможно вы правы. Я уже вынес bluetooth часть в отдельную статью, которую скоро опубликую. Обычно пишу статьи, объединяющие разные тематики. С одной стороны хочется как-либо ужать материал, сделать более доступным, с другой стороны кажется, что материала одной тематики в сжатом виде для статьи будет не достаточно. Видел, что некоторые авторы создают и публикуют серии.

С какой скоростью работает такая модель распознавания?

В моих экспериментах вероятности вычисляются буквально сразу после получения данных за 2.5 секунды

Очень хороший материал! Просто на редкость интересный и полезный! Особенно в свете того, во что превратился хабр. Спасбо! Буду обязательно опираться на него, в дальнейших своих разработках!

Пожалуйста. Успехов вам в разработке! Можете также посмотреть на https://qengineering.eu/deep-learning-examples-on-raspberry-32-64-os.html ресурс, где выложены примеры готовыми моделями для распознавания изображений для микрокомпьютеров

Благодаря Вашей статье у меня начался болезненный переход к иному восприятию программирования - от линейного и даже асинхронного к машинному обучению. Парадигма программирования чего либо радикально меняется. Я только размышлял, как мне примени ь ПИД- регулятор для контроля параметров температуры и влажности при инкубации а это уже, как оказалось, глубокое прошлое. Конечно, читая статью хотелось "покапризничать", так как проработка обсуждения, доведенная до битов старт-стопа утяжелила изложение, тем не менее прекрасная работа, буду с интересом следить за Вашим творчеством. Еще раз благодарю за то, что зародили во мне новый Интерес - погрузиться в машинное обучение

Спасибо за отзыв. PID-регулятор на самом деле еще как актуален. В предыдущих статьях я использовал его в примерах. Особенно важен вопрос оптимизации PID-параметров. Есть разные методы, как Simplex (Нелдера-Мида), генетический алгоритм и т.д.

Все, конечно, намешано в один котел. Хорошо, что вы разобрались в книге "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 в основном брал материал с первой книги, мне показалось, что там довольно просто и наглядно написано. Не думал, что будет сложно для восприятия. Но на заметку принял. Я в свое время изучал по академическим материалам, там более детально с математикой

Да, подписался😃
Возможно я чуть позже проведу ряд экспериментов на использование ML для уточнения значений углов ориентации предмета в воздухе.

Большое спасибо за мтаериал, почитаю на досуге

Пожалуйста. Пробуйте на практике тоже по материалам из статьи или книг. В комментариях тоже ссылки давали на подобные проекты

Спасибо большое за хорошую обзорную статью.

Пожалуйста)

Каким образом получается

  • Первый Dense-слой: 64 нейрона...

  • Dropout-слой: Убирает 20% случайных нейронов для уменьшения переобучения.

  • Второй Dense-слой: 32 нейрона, relu.

? Как рассчитать, что именно так должно быть?

Вот это понятно

  • Выходной слой: 3 нейрона (по количеству классов), softmax для вероятностного выхода.

и про входную размерность тоже понятно.

Слои чаще всего подбираются на основании практики. Если рассмотреть различные примеры ML-моделей, то в итоге обнаруживаются, что-то вроде шаблонных структур. На Udemy есть неплохие курсы по Tensorflow. GPT может предлагать неплохие идею структуры Можете поэкспериментировать с моделью из этой статьи, изменить в кратности количества нейронов в слоях, убрать Dropout, и т.д., и понаблюдать графики обучения. Основная цель - это минимизация ошибок обучения, и избежания переобучения, т.е, чтобы модель хорошо работала на новых ранее не используемых данных.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации