Найти в Дзене

Машинное обучение. Пробуем Edge computing. Используем Edge Impulse

Одна из технологий ИИ, которую вполне можно "потрогать руками" - машинное обучение. Поможет нам в этом весьма интересный ресурс - облачный сервис Edge Impulse. Сервис не только позволяет бесплатно попробовать машинное обучение на своих данных, но и использовать результат на каких то доступных устройствах (например - использовать для этого широко распространенный модуль Esp32-Cam), т.е. попробовать технологию машинного обучения на устройствах с ограниченными ресурсами, которое выделено в отдельное направление, которое назвается TinyML (Tiny Machine Learning). Основная цель TinyML — это разработка легковесных моделей, которые могут работать на периферийных устройствах с низким энергопотреблением, ограниченной памятью и вычислительной мощностью. Примечание в тему. Edge computing (или периферийные вычисления) — это подход, при котором большая часть данных обрабатывается непосредственно там, где они получены, т.е. на устройствах (таковыми могут выступать, например, камеры, датчики или дру
Оглавление

Одна из технологий ИИ, которую вполне можно "потрогать руками" - машинное обучение. Поможет нам в этом весьма интересный ресурс - облачный сервис Edge Impulse. Сервис не только позволяет бесплатно попробовать машинное обучение на своих данных, но и использовать результат на каких то доступных устройствах (например - использовать для этого широко распространенный модуль Esp32-Cam), т.е. попробовать технологию машинного обучения на устройствах с ограниченными ресурсами, которое выделено в отдельное направление, которое назвается TinyML (Tiny Machine Learning). Основная цель TinyML — это разработка легковесных моделей, которые могут работать на периферийных устройствах с низким энергопотреблением, ограниченной памятью и вычислительной мощностью.

Примечание в тему.

Edge computing (или периферийные вычисления) — это подход, при котором большая часть данных обрабатывается непосредственно там, где они получены, т.е. на устройствах (таковыми могут выступать, например, камеры, датчики или другие умные устройства). Вместо того чтобы отправлять весь объем "сырых" данных в облачные серверы, их обрабатывают прямо на месте, и только важные или обработанные данные при необходимости передаются в облако.

Знакомство с ИИ на платформе Edge Impulse.

Напомним, что под термином ИИ в настоящее время скрывается не умение компьютерных систем "думать", как человек, а совокупность методов и программного обеспечения, позволяющих компьютерным системам воспринимать окружающую среду и использовать обучение и многочисленные накопленные данные и алгоритмы для выполнения действий, которые максимально увеличивают их шансы на достижение поставленных человеком целей.

Одно из направлений ИИ - технологии машинного обучения, под которыми понимается класс методов искусственного интеллекта, характерной чертой которых является не прямое решение задачи, а обучение за счёт применения решений множества сходных задач. Примером такой задачи может являться распознавание заданных пользователем объектов на основании модели, полученной в ходе обучения системы на большом массиве изображений данных объектов.

В качестве проводника в мир ИИ мы используем сервис Edge Impulse, предоставляющий достаточно простые в использовании инструменты для реализации технологии машинного обучения.

Edge Impulse

Что такое Edge Impulse? На сервере Edge Impulse можно прочитать что "это облачная среда, которая обеспечивает сквозную разработку ИИ решений для встраиваемых систем". Разберем по пунктам что это значит.

"Облачная среда" — это про то, что все необходимые для работы программы и "железо" уже установлены где-то в сети Интернет и устанавливать на свой компьютер нам ничего не нужно.

"Сквозная разработка" обозначает, что для решения наших задач Edge Impulse предоставит все необходимые программные средства.

"Для встраиваемых систем" — то, что полученный в Edge Impulse результат мы сможем загрузить и запустить работать на наших устройствах. Каких? В данном случае с нашими проектами это будут сначала компьютер с веб-камерой или смартфон и, наконец модуль ESP32-Cam, на котором можно продемонстрировать работу модели на периферийном устройстве.

Поскольку мы делаем первые шаги и только знакомимся с ИИ, большим плюсом будет то, что для использования Edge Impulse не требуется кодирования. Все необходимое для создания и настройки нашей модели будет делаться через удобный веб-интерфейс на сайте Edge Impulse.

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

Внимание! Для выполнения проекта вам потребуется компьютер/ноутбук с веб-камерой. Отдельная веб камера в данном случае удобнее, ее проще переносить и направлять на предметы, например, лежащие на столе. Можно использовать и камеру смартфона, такая возможность так же присутствует.

Начнем наше путешествие в мир машинного обучения.

Регистрация в Edge Impulse

Начнем с создания учетной записи в Edge Impulse. Начало бесплатное, и вы получите доступ ко всем необходимым инструментам и ресурсам. В бесплатной версии время выполнение задачи обучения модели или обработки данных ограничено 20 минутами, а размер аккаунта — 4 ГБ. Более подробную информацию можно получить по ссылке: https://edgeimpulse.com/pricing.

Перейдите по ссылке https://studio.edgeimpulse.com/signup, заполните все поля и кликните по синей кнопке "Sign up".

Регистрируемся в Edge Impulse
Регистрируемся в Edge Impulse

Создаем первый проект в Edge Impulse

После входа в систему Edge Impulse предложит создать проект с помощью помощника, можете поэкспериментировать, но нас далее интересует создание своего проекта с заданными целями.

Найдите и нажмите на кнопку "Create New Project". Если вы, экспериментируя, потерялись в системе, перейдите в правый верхний угол окна Edge Impulse и щелкните по кружку ваших проектов (в кружке будут ваши инициалы регистрации), в появившемся меню выберите "Create New Project".

Создаем новый проект
Создаем новый проект

Дайте проекту имя, отражающее цель вашего проекта, у нас это Robo.

Сбор данных

Для начала определитесь, какие предметы будет распознавать система. Выберите два небольших предмета с простой геометрией (у нас же проект начального уровня). В нашем случае это инструменты, которые всегда лежат рядом во время сборки роботов. Вы можете использовать свои варианты (например, стирательная резинка, карандаш, линейка, и т.п.), так же можно использовать фотографии или рисунки с хорошо читаемыми цифрами, буквами, предметами.

Теперь надо снабдить систему фотографиями этих предметов, приступаем к сбору данных для системы ИИ.

После создания проекта в Edge Impulse открылась страница, которая является панелью управления проектом.

Включаем сбор новых данных для проект
Включаем сбор новых данных для проект

В области "Getting started" (Начало работы) выберите опцию "Collect new data" (Собрать новые данные).

Появится всплывающее окно с предложением выбрать, откуда мы будем получать данные.

Выбираем, откуда будем получать данные для проекта
Выбираем, откуда будем получать данные для проекта

Выберите центральный пункт - "Connect to you computer" (соединение с вашим компьютером).

Если у вас нет возможности использовать веб-камеру, или больше нравится работать со смартфоном - вы можете воспользоваться камерой смартфона, в окне (слева) присутствует QR код для подключения. Просто наводим камеру смартфона на QR-код, нажимаем на появившуюся ссылку и переходим в окно взаимодействия с Edge Impulse.

Если веб-камера к компьютеру подключена правильно, должно появиться окно с запросом на выбор типа данных (у нас это будут изображения) и разрешение на использование камеры. Дайте согласие, откроется новое окно, и веб-камера (или камера смартфона) подключится.

Вы увидите изображение с камеры на экране, а также несколько меток и кнопок.

Кнопка Label (метка, название) будет иметь надпись "unknown".

Вид первого предмета на экране
Вид первого предмета на экране

Нажмите на нее, и появится окно. Дайте изображению понятное название для первого предмета, который будем фотографировать, предпочтительно используя английский алфавит.

Расположите предмет на равномерно окрашенном фоне (можно использовать простой белый лист А4)

Теперь нажмите кнопку "Capture" (Захватить, сфотографировать). Изображение будет передано в систему и помечено.

Вам нужно будет повторить этот процесс с первым объектом много раз, предлагаем сделать не менее 30-50 изображений. Попробуйте сфотографировать объект несколько раз, незначительно меняя позиции и углы фотографии. Чем больше изображений вы сможете сделать, тем больше данных у вас будет для обучения вашей модели позже.

Закончив с первым объектом, можно переходить ко второму. Не забудьте нажать кнопку Label, чтобы переименовать метку для нового объекта.

Закончив съемку, вы можете закрыть окно получения данных. В окне Edge Impulse активным будет каталог Dataset (Набор данных), в котором отображается список сделанных вами изображений.

Маркировка данных.

В верхней части окна экрана находится некоторая статистика, а также три кнопки – Dataset (Набор данных), Data Sources (Источники данных) и Labelling Queue (Очередь маркировки). Рядом с Labelling queue будет стоять число, которое в данный момент равно количеству сделанных вами изображений.

Это изображения, которые требуют маркировки. Да, мы помним, что вы установили для них метку-название ранее, но эта метка была просто именем изображения. Метка, с которой мы сейчас работаем — это фактическая метка объекта с ограничивающей рамкой для учета в системе.

Нажмите на ссылку Labelling Queue, чтобы перейти к очереди. Она откроется с первым изображением, а также инструкциями по перемещению мыши для рисования ограничивающей рамки.

Работаем с маркировкой объектов
Работаем с маркировкой объектов

Нарисуйте (протяните при нажатой левой кнопке мыши) ограничивающую рамку вокруг фактического объекта на изображении. Вы можете использовать значок стрелок в рамке, чтобы изменить ее положение или размеры.

После того, как вы нарисовали ограничивающую рамку и отпустили кнопку мыши, появится окно, в котором вы можете назначить метку для изображения. Это имя объекта; введите соответствующее имя и нажмите Установить метку.

Теперь нажмите кнопку Save labels (Сохранить метки). Метка будет сохранена, и вы перейдете к следующему изображению. Вы заметите, что количество элементов, оставшихся в очереди, также уменьшится.

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

Рекомендация: если вы фотографировали объект в разных положениях, то он иногда будет выходить за нарисованную вами рамку. Не создавайте новую, просто передвиньте и/или расширьте текущую рамку так, чтобы изображение вмещалось. Продолжайте работу до появления первого фото следующего объекта.

Когда вы дойдете до изображения второго объекта, используйте значок "мусорного бака" на первой ограничивающей рамке, чтобы ее удалить. Нарисуйте новый ограничивающий прямоугольник, и вам будет предложено дать ему новую метку.

Продолжайте, пока не маркируете все изображения в очереди. Набор данных подготовлен. При этом набор автоматически разделен на данные для обучения/тестовые как 80/20

Обработка данных и обучение модели

Теперь, когда все изображения помечены, можно использовать их для построения модели. На левой стороне панели Edge Impulse есть раздел "Impulse Design" ("Импульсная" разработка), в котором присутствуют несколько подпунктов, которые нам требуется отработать.

Подпункт меню "Create impulse". Создадим для нашего проекта "импульс"

Экран Create Impulse содержит три блока. Первый заполнен за вас: это изображения, которые мы используем для обучения нашей модели. Настройки здесь уже выставлены, в нашем примере это ширина и высота изображения 96 пикселей. Так же имеется режим изменения размера с использованием самой короткой оси.

Нажмите "Add Processing Block" (Добавить блок обработки). Появится окно, предлагающее блок обработки изображений. Это именно то, что вам нужно, поэтому выберите его, нажав кнопку "Add".

Добавляем блок обработки изображений
Добавляем блок обработки изображений

Сохраните свой выбор.

Теперь нажмите на поле "Add a learning bloc" (Добавить блок обучения). На этот раз у вас будет два варианта выбора, выберите "Object Detection (Images)" (Обнаружение объектов изображения), нажав "Add" и сохранив свой выбор.

Формируем блоки раздела Create Impulse
Формируем блоки раздела Create Impulse

Все, блоки сформированы, теперь нажмите на кнопку "Save Impulse". Элемент подменю "Create Impulse" теперь имеет зеленый индикатор. Переходим в следующий подпункт меню.

Подпункт меню “Image”. Конструируем признаки изображений.

Здесь менять ничего не будем, просто кликните "Save parameters". Мы окажемся в разделе Generate Features (генерировать функции), кликнем кнопку "Generate Features" для запуска анализа загруженных нами данных. Через несколько минут увидим результат обработки в виде групп точек. В нашем проекте два объекта, вот мы и получили две группы точек. Чем плотнее расположены точки в группе, тем лучше.

Формирование облаков точек в разделе Generate Features
Формирование облаков точек в разделе Generate Features

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

Подпункт меню "Object detection" (Обнаружение/распознавание объектов).

Именно здесь происходит построение модели с помощью нейронной сети.

Нажмите кнопку "Choose a different model" (Выбрать другую модель) и выберите модель обучения "FOMO (Faster Objects, More Objects) MobileNetV2 0.35".

Затем щелкните по кнопке "Start Training", запустив процесс обучения. Когда обучение завершится, вы получите результаты "Confusion Matrix", показывающие, насколько успешна ваша модель. Везде 100% - отличный результат.

Получаем результаты обучения
Получаем результаты обучения

Поздравляем! С помощью Edge Impulse вы построили свою первую модель!

Запуск проекта, распознавание объектов

Давайте проверим созданную модель с помощью той же веб-камеры, или смартфона, которыми недавно снимали объекты распознавания. Найдите в левой части красную иконку с подписью "Deployment" (Развертывание, размещение). Откроется окно, в правой части которого будет расположен QR код с ссылкой на только что созданную модель для использования со смартфоном, а ниже него будет расположена кнопка "Launch in browser" (Запустить в браузере) кликнув по которой Вы запустите приложение в браузере на компьютере.

Получаем результаты обучения
Получаем результаты обучения

После получения разрешения на доступ к камере, на экране компьютера (или смартфона, если вы используете смартфон) откроется окно, подобное тому, которое открывалось при съемке веб-объектов. В нём Вы сможете наблюдать работу только что построенной модели. Направляете камеру на объекты, они подсвечиваются рамкой и появляются их названия:

Результаты распознавания объектов
Результаты распознавания объектов

Внимание! Вы можете поделиться этим QR кодом с друзьями и любой из них сможет, с помощью своего смартфона оценить работу вашей модели (при наличии таких же объектов распознавания).

Вот мы и обучили систему распознаванию нужных нам образов, прикоснулись к технологиям искусственного интеллекта. Даже такой "простой" (для нас, как пользователей) вариант обучения системы дает нам в руки интереснейшие инструменты для использования "умных" технологий, даже на простой элементной базе, например, используя модуль ESP32-CAM, в котором уже есть и камера, и возможность выхода в сеть по интерфейсу Wi-Fi.

Потенциальные же возможности рассмотренной технологии намного шире. Это может быть и управление движением робота с помощью жестов рук, распознавание грузов и мест для их складирования с помощью манипулятора, движение по соревновательным линиям "профи" и множество других проектов. Но начинать надо с понимания, как осуществить такое объединение, как научить собственно переферийное устройство, например, модуль ESP32-CAM, взаимодействовать с системой машинного обучения. Вот это и рассмотрим в следующих статьях цикла "ИИ".

***

В заключение - благодарность нашему коллеге, который изучал данный ресурс и показал нам возможности его дальнейшего применения))). Хасан-Ахунов Даурен Нуреевич, спасибо, у нас появилось новое направление исследования!