Edge Impulse Studio – это платформа для машинного обучения, позволяющая разработчикам формировать модели машинного обучения в облачном сервисе (облаке) и импортировать их потом на микроконтроллеры (к примеру, Arduino или STM32) или на одноплатные компьютеры, подобные Raspberry Pi. До недавнего времени Edge Impulse не поддерживала работу с Raspberry Pi, однако в апреле 2021 г. она объявила о своей полной поддержке платы Raspberry Pi. Поэтому теперь мы имеем возможность загружать данные, тренировать их в платформе Edge Impulse и затем использовать сформированную модель на Raspberry Pi.
Таким образом, в данной статье мы рассмотрим обучение (тренировку) модели классификатора изображений в платформе Edge Impulse и затем будем импортировать (развертывать) эту модель на плату Raspberry Pi. Ранее на нашем сайте мы использовали тренировку (обучение) моделей с помощью пакета Tensorflow для их использования при обнаружении масок на лицах людей и распознавании жестов с помощью Raspberry Pi и OpenCV.
Ранее Edge Impulse на нашем сайте мы использовали в проектах контролера пчел и распознавания речи на Arduino Nano 33 BLE Sense.
Необходимые компоненты
Аппаратное обеспечение
- Плата Raspberry Pi (купить на AliExpress).
- Камера для Raspberry Pi (купить на AliExpress).
Программное обеспечение
Edge Impulse Studio.
Начало работы с Edge Impulse
Для того, чтобы сформировать (натренировать) модель в Edge Impulse, сначала там необходимо создать себе аккаунт, потом верифицировать свой аккаунт и начать новый проект.
Установка Edge Impulse на Raspberry Pi
Для установки Edge Impulse на Raspberry Pi используйте следующие команды:
1 2 3 |
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash - sudo apt install -y gcc g++ make build-essential nodejs sox gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps sudo npm install edge-impulse-linux -g --unsafe-perm |
Для запуска Edge Impulse введите команду:
1 |
edge-impulse-linux |
В результате выполнения данной команды у вас попросят залогиниться в вашем аккаунте на Edge Impulse. Затем вам предложат выбрать проект, микрофон и камеру чтобы подключиться к проекту.
Теперь, когда Edge Impulse у нас запущен на Raspberry Pi, нам необходимо подключить к плате камеру для сбора (считывания) изображений. Подключите камеру к плате Raspberry Pi как показано на следующем рисунке.
Создание набора данных
Как мы уже отмечали ранее, мы будем использовать Edge Impulse Studio для обучения нашей модели распознавания изображений. Для этого нам необходимо собрать набор данных, содержащий образцы объектов, которые мы хотим классифицировать (распознать) с помощью платы Raspberry Pi и ее камеры. В нашем проекте мы будем распознавать такие объекты как картофель (Potato) и репчатый лук (Onion), поэтому нам необходимо собрать образцы изображений лука и картофеля, чтобы в дальнейшем наша модель смогла их различать.
Вы можете собрать образцы изображений с помощью смартфона, платы Raspberry Pi, или вы можете импортировать набор данных в ваш аккаунт на Edge Impulse. Самый простой способ загрузить образцы изображений в Edge Impulse – это использовать смартфон (мобильный телефон). Для этого подключите ваш смартфон к компьютеры.
Чтобы подключить ваш смартфон к Edge Impulse, нажмите в нем на ‘Devices’ (устройства) и затем на ‘Connect a New Device’ (подключить новое устройство).
В следующем окне нажмите ‘Use your Mobile Phone’, после чего появится QR код. Считайте этот QR код вашим смартфоном с помощью приложения Google Lens или любого другого приложения, способного сканировать QR коды. После этого ваш смартфон будет подключен к Edge Impulse studio.
После того, как ваш смартфон будет подключен к Edge Impulse Studio, вы можете начать загружать свои образцы изображений – для этого нажмите на ‘Data acquisition’. Далее на странице загрузки изображений (Data acquisition page) введите имя метки (label name) ‘potato’ и выберите ‘Camera’ в качестве датчика. Затем нажмите на ‘Start sampling’.
После этого можно будет приступать к загрузке образцов изображения картофеля в облако Edge Impulse. Сделайте от 10 до 20 фотографий картофеля под разными углами и загрузите их в сервис. После этого установите имя метки в ‘onion’ (репчатый лук) и аналогичным образом загрузите от 10 до 20 изображений лука.
Загруженные нами образцы изображений будут использоваться для обучения модели. На следующих шагах нам необходимо собрать тестовые данные (Test Data), их количество должно составлять по меньшей мере 20% от количества данных для обучения модели (training data), поэтому необходимо загрузить еще 3 изображения картофеля и 3 изображения лука.
Обучение модели
Когда наш набор данных будет готов, создадим импульс для наших данных. Для этого перейдите на страницу ‘Create impulse’.
На странице ‘Create impulse’ нажмите на ‘Add a processing block’ (добавить блок обработки) и затем нажмите на кнопку “Add” рядом с блоком “Image” чтобы добавить блок обработки, который будет нормализовать данные изображения и уменьшать глубину цвета. После этого нажмите на блок “Transfer Learning (images)” (передать обучающие изображения) чтобы использовать заранее обученную модель для классификации (распознавания) изображений, в которую мы будем передавать изображения чтобы произвести ее точную настройку для нашей задачи распознавания картофеля и лука. Затем нажмите на ‘Save Impulse’.
Затем перейдите на подпункт меню “Images”, находящийся под пунктом “Impulse design” и затем нажмите на вкладку ‘Generate Features’, затем на зеленую кнопку “Generate features”.
После этого нажмите на подпункт “Transfer learning”, находящийся под пунктом меню “Impulse design” и затем нажмите на кнопку “Start training” внизу страницы. В нашем проекте мы использовали модель по умолчанию MobileNetV2. Однако вы, если захотите, можете использовать и другие обучающие модели.
Обучение модели займет некоторое время. После завершения процесса обучения модели вам будет показан результат обучения. В нашем случае точность модели получилась равной 75%, а потери составили 0.58.
После завершения процесса обучения можно протестировать полученную модель. Для этого нажмите на вкладку “Live classification” в меню слева, после этого можно будет с помощью камеры Raspberry Pi захватывать изображения и подавать их в полученную модель.
Развертывание полученной модели машинного обучения на Raspberry Pi
После того как процесс обучения модели будет завершен, мы можем развернуть обученную модель классификации (распознавания) изображений, полученную с помощью платформы Edge Impulse, на плате Raspberry Pi. Для этого в окне терминала введите команду:
1 |
edge-impulse-runner |
Если у вас в данное время выполняется команда edge-impulse-linux, то нажмите Control-C чтобы остановить ее и после этого вводите указанную команду.
С помощью команды edge-impulse-runner ваша плата Raspberry Pi подключится к облаку Edge Impulse и скачает недавно полученную модель, затем запустится видео трансляция с камеры, в поле зрения которой вы можете помещать картофель и лук. Результаты распознавания этих предметов будут отображаться в окне терминала.
Вы также можете просматривать видео поток с камеры в браузере, для этого скопируйте URL (обведенный красным прямоугольником на предыдущем рисунке) из окна терминала и вставьте его в строку браузера. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Таким образом, в данной статье мы рассмотрели как использовать Edge Impulse Studio для тренировки модели машинного обучения. Edge Impulse является отличной платформой для разработки моделей машинного обучения и может использоваться даже людьми, слабо разбирающимися в программировании.