Задача TinyML состоит в том, чтобы обеспечить максимальную производительность при наименьших затратах для рабочих нагрузок искусственного интеллекта на оборудовании класса микроконтроллеров. Конвейер TinyML-CAM, разработанный командой исследователей машинного обучения в Европе, демонстрирует, чего можно достичь с помощью камеры на относительно недорогом оборудовании.
В частности, им удалось достичь более 80 кадров в секунду при распознавании изображений на плате ESP32-CAM стоимостью менее 10 долларов с конвейером TinyML-CAM с открытым исходным кодом, занимающим всего около 1 КБ ОЗУ. Он должен работать на других платах MCU с камерой, и обучение не кажется сложным, поскольку заявлено, что для реализации индивидуальной задачи требуется около 30 минут.
Исследователи отмечают, что такие решения, как TensorFlow Lite для микроконтроллеров и Edge Impulse, уже позволяют выполнять рабочие нагрузки ML на платах MCU с использованием нейронных сетей (NN). Однако они обычно занимают довольно много памяти, от 50 до 500 КБ ОЗУ, и для вывода требуется от 100 до 600 мс, что вынуждает разработчиков выбирать NNS с низкой сложностью и/или низкой точностью.
Поэтому исследователи решили использовать более эффективные алгоритмы, отличные от NN (такие как Decision Tree, SVM), используя свою альтернативу библиотекам Eloquent Arduino для TFLite для микроконтроллеров, чтобы разработать конвейер TinyML-CAM, который работает в четыре этапа:
- Сбор данных через сервер камер (разрешение 160 × 120) и сборщик Mjpeg, запрашивающий у пользователей имя класса и собирающий кадры изображения в течение заданного промежутка времени, пока пользователь не завершит работу.
- Извлечение объектов в четыре этапа:
- Преобразуйте собранные изображения из RGB в серый цвет
- Запустите средство извлечения объектов гистограммы ориентированных градиентов (HOG) для вывода векторов объектов (для ускорения задачи используются изображения с меньшим разрешением 40 x 30).
- Запустите визуализацию Pairplot, чтобы получить наглядное представление о том, насколько информативны извлеченные объекты
- Запустите алгоритм уменьшения размерности аппроксимации и проекции равномерного многообразия (UMAP), чтобы взять вектор признаков и сжать его до длины 2.
- Обучение классификатору
- Перенос на C++ — преобразование компонента HOG и классификатора (Pairplot) в код C++ или, точнее, в заголовочный файл (.h).
Затем заголовочный файл можно добавить в Arduino Sketch, программу, скомпилированную и запущенную на плате. Вы найдете исходный код, инструкции по его установке на оборудование ESP32 и демо-видео на GitHub.
Чтобы протестировать решение, они обучают ESP32-CAM распознавать Raspberry Pi Pico, Arduino Portenta H7 или терминал Wio. Производительность великолепна для этого типа платы, а занимаемая площадь действительно мала, но исследователи отмечают, что платы Portenta и Pi часто неправильно маркировались во время анализа Pairplot, и ожидают, что эта проблема будет устранена путем улучшения качества набора данных.
Помимо просмотра исходного кода на GitHub, вы также найдете дополнительную информацию в коротком 4-страничном исследовательском документе.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.