Как обучить модель машинного обучения для Raspberry Pi Pico в Edge Impulse
Введение
Edge Impulse помогает разработчикам создавать с помощью встраиваемого машинного обучения умные устройства следующего поколения — для промышленности, бизнеса и повседневной жизни людей.
Сейчас 99 % данных с датчиков отбрасывается из-за ограничений по стоимости, пропускной способности канала или энергопотреблению. Машинное обучение на периферийных устройствах позволяет эти данные использовать.
Основатель Edge Impulse считает, что машинное обучение способно приносить пользу обществу, и компания поддерживает прикладные проекты, которые помогают людям.
Установка зависимостей
Перед работой с платформой установите зависимости:
- Node.js версии 12 или новее.
- Откройте командную строку или терминал, установите и запустите edge-impulse-cli:
npm install -g edge-impulse-cli
Пересылка данных
Утилита data forwarder передаёт данные с устройств в Edge Impulse через последовательный порт. Устройство выводит значения датчиков в последовательный порт, утилита собирает эти данные, подписывает их и отправляет в сервис приёма данных.
С её помощью можно быстро собирать данные с разных отладочных плат, не перенося на них полноценный протокол удалённого управления и последовательный протокол. Ограничение — поддерживается только сбор данных с относительно низкой частотой.
Подключение устройства
Выполните в командной строке:
edge-impulse-data-forwarder
Пример вывода утилиты:
Edge Impulse data forwarder v1.5.0
? What is your user name or e-mail address (edgeimpulse.com)? jan@edgeimpulse.com
? What is your password? [hidden]
Endpoints:
Websocket: wss://remote-mgmt.edgeimpulse.com
API: https://studio.edgeimpulse.com
Ingestion: https://ingestion.edgeimpulse.com
[SER] Connecting to /dev/tty.usbmodem401203
[SER] Serial is connected
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
[WS ] Connected to wss://remote-mgmt.edgeimpulse.com
? To which project do you want to add this device? accelerometer-demo-1
? 3 sensor axes detected. What do you want to call them? Separate the names with ',': accX, accY, accZ
? What name do you want to give this device? Jan's DISCO-L475VG
[WS ] Authenticated
Утилита спросит, к какому серверу подключиться, предложит войти в учётную запись, а затем настроит устройство.
Регистрация и создание проекта
Чтобы пользоваться платформой, сначала зарегистрируйте учётную запись Edge Impulse.

После регистрации войдите на платформу и создайте проект.

Повторное подключение устройства
- Выполните в командной строке
edge-impulse-data-forwarder. - Войдите в учётную запись.
- Проект на платформе уже создан — выберите его и нажмите Enter.
- Задайте псевдонимы для выходных данных через запятую. Обратите внимание: программа на устройстве должна выводить только данные, разделённые запятыми.
- Задайте псевдоним устройства.
Устройство подключено к платформе. Чтобы открыть список устройств, нажмите Devices в левой части страницы.

Сброс настроек
После первого подключения программа запоминает настройки. Чтобы изменить их, сбросьте конфигурацию командой:
edge-impulse-data-forwarder --clean
Добавление обучающей и тестовой выборок
Добавить данные можно несколькими способами.

- Снимайте движение, звук или изображения смартфоном — на нём можно даже запустить модель, обученную локально.

- Записывайте звук или изображения на компьютере — с веб-камеры, микрофона или внешнего аудиоустройства.

- Собирайте данные с устройств или отладочных плат.

- Загрузите готовые наборы данных в форматах WAV, JPG, PNG, CBOR или JSON.

Проектирование конвейера нейросети
Выберите подходящие блоки обработки и обучения — платформа сформирует конфигурацию по умолчанию на основе собранных данных.

Выбрав блок, откройте его, чтобы настроить параметры подробно. Не забудьте сохранить настройки.
Обучение модели
Обучите модель с заданными параметрами.

Тестирование модели

Здесь можно получить тестовые данные с устройства или использовать уже имеющиеся.
Развёртывание модели
Готовый конвейер (impulse) можно развернуть на любом устройстве. Тогда модель работает без подключения к интернету, с минимальным энергопотреблением и минимальной задержкой.

- Получить исходный код. Модель нейросети преобразуется в оптимизированный исходный код, который запускается на любом устройстве.
- Собрать прошивку. Платформа готовит двоичный файл для вашей отладочной платы, в который уже входит модель нейросети.
Подключение Pico к Edge Impulse
Ниже показано, как подключить Pico к платформе и собрать данные в Ubuntu. С помощью Pico будем рисовать в воздухе жесты «Wing», «Slope» и «Circle».
Подключение устройства
- Войдите в учётную запись.

- Выберите проект.

- Задайте псевдонимы данных.

Плата Pico подключена к платформе.

Сбор данных
Задайте метку класса и нажмите Start sampling.


Когда сбор завершится, появится график сигнала. Данные для каждого из трёх жестов собирались отдельно.
Проектирование конвейера

Блок обработки
Выбран спектральный анализ: он хорошо подходит для повторяющихся движений, например для данных акселерометра. Блок выделяет частотные и энергетические характеристики сигнала за определённый промежуток времени.

Блок обучения
Выбрана нейросеть: она выявляет закономерности в данных и применяет их к новым данным. Такой блок хорошо подходит для классификации движений или распознавания звука.



Тестирование модели

Развёртывание модели

Скачайте исходный код на C++.
Добавьте содержимое архива в свой проект.

Результат
