Создание проектов искусственного интеллекта и машинного обучения с помощью Maixduino


В предыдущей статье мы рассмотрели набор средств разработки Maixduino и узнали, как использовать его с Arduino IDE. В этой статье мы узнаем, как использовать Micropython в наборе средств разработки Maixduino. Сначала мы узнаем, как загрузить прошивку Micropython на Maixduino, а затем как настроить Maixpy ​​IDE от Sipeed и использовать ИИ и машинное обучение с платой.

Создание проектов искусственного интеллекта и машинного обучения с помощью Maxduino

Что такое MaixPy?

MaixPy — это порт Micropython специально для K210 SoC. Он не только поддерживает общие функции MCU, но и интегрирует аппаратно-ускоренные алгоритмы машинного зрения AI и микрофонной решетки. Имейте в виду, что Maixduino поддерживает MaixPy V1, но есть и другая версия MaixPy под названием MaixPy V4, которая предназначена для новейшего продукта Sipeed под названием MaixCam и не поддерживает Maixduino. Главное преимущество использования MicroPython заключается в том, что с ним намного проще и быстрее выполнять разработку. Итак, начнем с основ и узнаем, как подготовить плату Maixduino для использования с MaixPy.

Установка USB-драйвера

Как мы знаем, Maixduino оснащен двумя SoC на борту: K210 AI SoC и модулем ESP32-Wroom. Поскольку оба они не имеют собственной поддержки USB, производители использовали мост USB-UART для связи и обновления прошивки. Поскольку нам нужны два отдельных UART для SoC, Sipeed выбрала индивидуальное решение, которое использует микроконтроллер CH552 с двойной последовательной прошивкой. Сделав это, они смогли реализовать связь между компьютером и обоими встроенными SoC через один порт USB. Поскольку они используют индивидуальное решение, необходимо установить все необходимые драйверы, чтобы оно могло общаться с компьютером.

В среде Linux нам не нужно устанавливать никаких драйверов. Операционная система автоматически обнаружит оборудование и назначит универсальный драйвер, который уже является частью системы Linux. Все, что нам нужно сделать, это запомнить номера портов. Для этого откройте окно терминала и введите следующую команду 'ls /dev/ttyUSB*' и нажмите Enter. Будет отображен список доступных USB-устройств и соответствующих портов. Запишите соответствующий номер порта для дальнейшего использования. В Windows необходимо установить определенный драйвер. Для этого перейдите на страницу загрузки драйвера USB и загрузите файл драйвера. На странице загрузки будет несколько файлов. Более простой способ — загрузить zip-файл с настройкой в ​​имени, распаковать его и запустить установщик драйвера. Он автоматически установит драйвер. Другой способ — загрузить файлы драйвера со страницы загрузки и вручную установить драйвер из диспетчера устройств. После успешной установки драйвера и подключения MAxiduino к компьютеру откройте диспетчер устройств и разверните раздел Порты (COM и LPT). Вы найдете два порта, которые будут отображаться только тогда, когда Maxiduino все еще подключен к ПК. Запишите номер порта, по умолчанию первый номер порта будет для K210 SoC, а второй — для ESP32.

Установка прошивки MaixPy

Итак, перед кодированием мы должны установить прошивку Maixpy ​​на Maxiduino, чтобы она приняла код micropython и выполнила его. Для начала убедитесь, что вы установили драйвер в соответствии с инструкциями выше, и запишите номер порта. В Linux и Mac OS выполните ls /dev/, чтобы увидеть номера портов, а в Windows используйте диспетчер устройств. Итак, для начала нам нужно загрузить предварительно скомпилированный файл прошивки. Для этого сначала перейдите на страницу прошивки MaixPy. Там выберите папку с последней версией, и в ней вы найдете несколько файлов прошивки с расширениями .bin или .kfpkg. Используйте следующую таблицу, чтобы выбрать подходящую прошивку для вашего приложения. После выбора загрузите двоичный файл (бинарник) прошивки на свой компьютер.

Имя файла Примечание
maixpy_*.bin Нормальная прошивка, с

* базовый API

* поддержка kmodel V4

* нет поддержки LVGL

* Поддержка эмулятора NES

* Поддержка видео формата AVI

* Поддержка IDE

maixpy_*_minimum.bin Прошивка с минимальным набором функций, с

* базовый API

* только несколько API OpenMV, некоторые API, такие как find_lines, не включены

* только поддержка kmodel V3

* нет поддержки LVGL

* эмулятор NES не поддерживается

* нет поддержки видео в формате AVI

* нет поддержки IDE

maixpy_*_minimum_with_kmodel_v4_support Прошивка с минимальным функционалом

* добавлена поддержка kmodel v4

maixpy_*_openmv_kmodel_v4_with_ide_support Прошивка с минимальным функционалом

* добавлена поддержка kmodel v4

* поддержка IDE

maixpy_*_minimum_with_ide_support.bin Прошивка с минимальным функционалом

* Поддержка IDE

maixpy_*_with_lvgl.bin Прошивка с поддержкой lvgl, в том числе

* базовый API

* только поддержка kmodel V3

* Поддержка LVGL

* Поддержка эмулятора NES

* Поддержка видео формата AVI

* Поддержка IDE

maixpy_*_m5stickv.bin Прошивка специально для платы M5StickV, с функциями, аналогичными обычной прошивке
maixpy_*_amigo*.bin Прошивка специально для платы Amigo, с функциями, аналогичными обычной прошивке

После загрузки файла прошивки следующим шагом будет загрузка утилиты прошивки. Для прошивки или обновления прошивки мы будем использовать kflash_gui, для этого загрузите его со страницы загрузки kflash_gui. Извлеките прошивку и запустите приложение kflash_gui. Для Windows рекомендуется запускать его с помощью «запуска от имени администратора».

Главная страница приложения kflash_gui

После открытия приложения выберите ранее загруженную прошивку. Как вы могли заметить, диапазон адресов будет автоматически заполнен, и вам не нужно его менять. Выберите правильный COM-порт (по умолчанию первый COM-порт из двух, которые появятся при подключении платы) и нажмите «Загрузить», утилита прошивки запишет прошивку на плату, и после этого плата перезагрузится, а на ЖК-дисплее отобразится заставка MaixPy.

Заставка MaixPy на Maxiduino

Установка MaixPy IDE

Следующий шаг — установка MaixPy IDE. Для этого перейдите на страницу загрузки MaixPy IDE и загрузите соответствующий двоичный файл для вашей операционной системы. Для Windows запустите установщик как обычно и следуйте инструкциям на экране. Для Mac используйте файл DMG и установите приложение. Для Linux используйте следующие команды, чтобы предоставить разрешение и установить IDE.
chmod +x maixpy-ide-linux-x86_64-0.2.2.run
./maixpy-ide-linux-x86_64-0.2.2.run

После установки откройте MaixPy IDE и выберите модель платы разработки в меню Tool («Инструменты»). И нажмите кнопку connect («Подключить») в левом нижнем углу окна IDE. Она автоматически подключится к плате Maixduino.

Кнопка в MaixPy IDE для подключения к плате Maixduino

При первом открытии IDE она открывается с уже имеющимся в ней тестовым кодом. Поэтому для проверки кода просто нажмите кнопку Run («Выполнить»), расположенную под кнопкой «Подключить», как показано ниже. Код будет загружен в плату Maixduino и выполнен. Пример кода инициализирует модуль камеры и дисплей и продолжает отображать видеопоток с камеры на дисплее. Вы также можете увидеть предварительный просмотр видео в IDE MaiixPy.

Кнопка для запуска выполнения кода в MaixPy IDE

Чтобы остановить выполнение кода, нажмите кнопку «Стоп» (та же, что и кнопка «Запустить»). Чтобы загрузить файлы на плату, используйте опцию Send file («Отправить файл») в меню Tools («Инструменты»).

Использование Maixduino с последовательным терминалом

После загрузки прошивки MaixPy мы также можем использовать Maixduino через любой последовательный терминал без необходимости в IDE, если это необходимо. Для этого мы можем использовать любой последовательный терминал, с которым нам удобно, например, в Windows мы можем использовать Putti, mobaxterm, xshell или mpfshell-lite, а в Linux мы можем использовать pyserial. Сама IDE MaixPy имеет встроенный последовательный терминал, и мы также можем использовать его. Sipeed рекомендует mpfshell-lite, и более подробную информацию о том, как их использовать, можно найти на странице mpfshell-lite. Если мы хотим запустить скрипт micropython, откройте последовательный терминал, нажмите CTRLl+E и вставьте следующий код

Нажмите Ctrl+D на клавиатуре, чтобы начать выполнение кода. В коде вы можете увидеть, что мы импортировали необходимые библиотеки для камеры и дисплея с помощью функции импорта. Позже мы инициализировали камеру и настроили ее. После этого мы инициализировали дисплей. Затем с помощью цикла while мы отображаем прямую видеотрансляцию с камеры на TFT-дисплее.

Файловая система Maixduino

Maixduino имеет в общей сложности 16 МБ встроенной памяти и слот для SD-карты для внешнего хранения. Структура файловой системы Maixduino показана на рисунке ниже.

Структура файловой системы Maixduino

Внутреннее хранилище разделено на три части: область прошивки MaixPy.bin, область модели xxx.kmodel и область файловой системы. Как следует из названия, область MaixPy.bin предназначена для хранения прошивки MaixPy, а область xxx.kmodel обычно начинается с 0x300000 и используется для обученной модели искусственного интеллекта (ИИ). Для общей файловой системы Maixduino использует SPIFFS. SD-карта должна быть отформатирована в FATFS, чтобы Maixduino мог получить к ней доступ. Если обученная модель больше области xx.kmodel, мы также можем использовать SD-карту для ее хранения.

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

Как мы знаем, в micropython все скрипты хранятся в виде файлов .py, для изменения скриптов необходимо иметь доступ к файловой системе для создания, редактирования или удаления этих файлов. Таким образом, с Maixduino у нас есть несколько способов выполнять эти операции с файлами. Первый способ включает использование редактора Micropython Editor (pye), который встроен в прошивку MaixPy. Мы можем использовать последовательный терминал для редактора Pye. Вы можете использовать os.listdir() для просмотра файлов в текущем каталоге и pye ("hello.py") для создания файла и входа в режим редактирования. После редактирования файла вы можете нажать Ctrl+S для сохранения и Ctrl+Q для выхода из редактирования. Вы можете найти более подробную информацию о редакторе Micropython в репозитории редактора Micropython GitHub .

Второй метод предназначен для случая, когда мы используем MaixPy IDE. В IDE мы можем выбрать сохранение открытого файла как boot.py из меню инструментов, чтобы сохранить содержимое в окнах IDE как файл boot.py.

Сохранение файла в MaixPy IDE

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

Интерфейс uPyLoader

Если при первой попытке передачи файла возникли какие-либо ошибки, воспользуйтесь командой Init transfer files из меню «Файл».

Использование команды Init transfer files в uPyLoader

Выполнение скриптов Python

Если вы хотите выполнить скрипт Python во флэш-памяти, вы можете сделать это разными способами. Первый способ, конечно, через последовательный терминал. Для этого сначала перейдите в каталог, где хранится файл, с помощью команды os.chdir(), например, os.chdir("/flash") . Затем вы можете выполнить скрипты с помощью команды import, например, import helloworld. Этот метод прост и удобен в использовании, но следует отметить, что команду import можно использовать только один раз. Если мы используем команду import во второй раз, файл больше не будет выполнен.

Другой способ — использовать функцию exec() для выполнения. Вот пример фрагмента кода, который показывает использование функции exec() .

Другой способ — запустить программу из MaixPy IDE, как мы уже упоминали ранее. Но при этом методе программа работает только временно, она не будет сохранена на устройстве. Вы также можете выполнять коды с помощью uPyLoader. После подключения выберите файл и нажмите кнопку «Выполнить», чтобы выполнить файл.

Автоматический запуск кода при запуске

Система создаст файл boot.py и main.py в каталоге /flash или /sd (предпочтительно). При загрузке она автоматически сначала выполнит boot.py, а затем main.py (если обнаружена SD-карта, будет выполнен файл на SD-карте). Отредактируйте содержимое этих двух скриптов, чтобы добиться самозапуска. Если вы напишете программу бесконечного цикла (While True) в boot.py, main.py не сможет запуститься. Обычно boot.py в основном используется для настройки оборудования и его нужно настроить только один раз, а main.py используется для запуска основной программы. Поэтому отредактируйте эти скрипты в соответствии со своими потребностями.

Файл конфигурации платы

Чтобы сделать программирование намного проще, мы можем использовать файл конфигурации платы. Это не что иное, как файл определения платы с отображением выводов для более легкого понимания. Хотя это и не обязательно, но это значительно облегчит программирование при использовании GPIO и встроенных периферийных устройств. Чтобы использовать его, вам нужно всего лишь один раз запустить скрипт config_maix_duino.py. Он создаст файл config.json во флэш-памяти и может быть использован позже. Использовать его намного проще, просто импортируйте параметр board_info из файла конфигурации, и все готово. Вот пример, где мы включаем красный элемент встроенного RGB-светодиода, вывод, подключенный к красному, определен как LED_R в файле конфигурации. Мы можем напрямую использовать его, не проверяя схемы на предмет точного номера вывода.

Аналогично, все пины отображаются более удобным образом и могут быть легко использованы в нашем коде. Чтобы узнать точное отображение пинов, вы можете открыть config_maix_duino.py или config. Вы также можете обратиться к изображению ниже, где показано отображение пинов в стиле Arduino.

Распиновка платы Maixduino

Основы Maixduino MicroPython

Охват всех основ Maxduino MicroPython занял бы несколько статей, и тем не менее Sipeed имеет подробную документацию об этом. Вы можете обратиться к документации Sipeed's Maixduino Specific MaixPy basics для получения более подробной информации об этом.

Приложения нейронной сети AI Maixduino

Как мы знаем, основными преимуществами K210 AI SoC, используемой в Maixduino, являются ее возможности искусственного интеллекта (AI), включая машинное зрение и машинное обучение на основе сверточной нейронной сети. Поэтому, чтобы понять возможности AI платы Maixduino, мы рассмотрим несколько примеров AI с использованием предварительно обученных моделей AI, предоставляемых Sipeed.

Пример распознавания лиц

Как следует из названия, в этом примере мы рассмотрим модель ИИ для обнаружения лиц, предоставленную Sipeed. Модель найдет лицо на фотографии и поместит его в рамку, а затем использует YOLO V2 для обнаружения лиц. Чтобы использовать ее, обязательно загрузите обычную или стандартную прошивку MaixPy на Maixduino, как указано в разделе установки прошивки MaixPy. Следующий шаг — загрузить предварительно обученную модель ИИ. Для этого перейдите на страницу загрузки модели ИИ Sipeed и загрузите файл модели face_model_at_0x300000.kfpkg. После загрузки файла загрузите его во флэш-память Maixduino с помощью утилиты kflash_gui или поместите его на SD-карту. Поскольку чтение из флэш-памяти всегда быстрее, чем чтение с SD-карты, рекомендуется загружать файл модели ИИ во флэш-память, если размер файла модели находится в пределах ограничения.

После этого мы можем двигаться дальше со скриптом micropython. Вы можете загрузить модель ИИ с помощью task = kpu.load(0x300000). В этом случае адрес памяти указывается, поскольку модель хранится во флэш-памяти. Если вы используете SD-карту для хранения модели ИИ, вы можете загрузить модель ИИ в скрипт с помощью task = kpu.load(0x300000). Затем вы можете установить точки привязки как anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025). Параметр точки привязки согласуется с параметром модели. Для каждой модели этот параметр фиксирован и привязан к модели (определяется при обучении модели). Его нельзя изменить на другие значения. Позже вы можете инициализировать сетевой объект kpu с помощью kpu.init_yolo2(task, 0.5, 0.3, 5, anchor). Поскольку эта модель использует YOLO V2, мы использовали init_yolo2 для инициализации модели. Эта функция имеет всего пять параметров. Этими параметрами являются:

  • kpu_netKPU.load(): сетевой объект kpu, то есть возвращаемое значение загруженного объекта модели
  • threshold: Порог вероятности. Результат будет выведен только если вероятность этого объекта больше этого значения. Диапазон значений: [0, 1]
  • nms_value: пороговое значение box_iou, чтобы предотвратить попадание одного и того же объекта в рамки нескольких рамок, когда две рамки обрамляют один и тот же объект, если отношение площади пересечения двух рамок к общей площади, занимаемой двумя рамками, меньше этого значения, выбирается рамка с наибольшей вероятностью.
  • anchor_num: Количество точек привязки, здесь зафиксировано как len(anchors)//2
  • anchor: Как упоминалось ранее, этот параметр фиксирован и привязан к модели.

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

Это проанализирует данные изображения и выдаст вам результат. Вот полный пример кода, в котором Maixduino обнаружит лицо на канале камеры в режиме реального времени и создаст рамку на предварительном просмотре, отображаемом на ЖК-дисплее.

После запуска этого кода вы можете увидеть результат на ЖК-дисплее как показано на следующем рисунке.

Вы можете загрузить скрипт Python для этого примера из нашего репозитория GitHub: https://github.com/Circuit-Digest/Maixduino-AI-Projects/tree/main/Face%20Detection  

Пример классификации объектов

Для этого примера нам нужно загрузить минимальную прошивку в Maixduino, так как сама модель немного больше по размеру. Эта модель может классифицировать до 1000 различных объектов, так как большая модель. После прошивки минимальной прошивки загрузите модель mobilenet_0x300000.kfpkg со страницы загрузки. После загрузки файла загрузите его во флэш-память Maixduino с помощью утилиты kflash_gui. Также загрузите файл labels.txt и сохраните его в файловой системе. Поскольку минимальная прошивка не поддерживает IDE, вы можете использовать uPyloader для загрузки файла во флэш-память. Нам также нужно уменьшить размер кучи GC. Для этого просто запустите следующий скрипт.

После этого мы можем двигаться дальше с основным скриптом micropython. Используйте следующий скрипт.

Как вы можете видеть, сначала мы импортировали все необходимые модули, включая библиотеки датчиков, изображений, ЖК-дисплеев и времени. Вместе с этим мы также импортировали модуль нейронной сети KPU, сборщик мусора и системные модули. Позже вы можете увидеть, как объявляется функция main. Эта функция обрабатывает все процедуры обработки изображений и нейронной сети. Когда скрипт запускается, он сначала считывает файлы labels.txt, а перечисленные метки из файла загружаются в идентификатор, называемый labels. После этого вызывается основная функция с пятью аргументами. Первый аргумент указывает на идентификатор меток, а второй аргумент указывает на местоположение модели в памяти. Третий аргумент устанавливает поворот дисплея, а четвертый и пятый аргументы используются для установки горизонтального зеркального отображения и вертикального переворота изображения с камеры.

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

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

Как вы видите, функция draw_string используется для добавления метки к изображению перед его отображением на экране. Вот демонстрация вышеприведенного скрипта.

Вы можете загрузить скрипт Python для этого примера из нашего репозитория GitHub: https://github.com/Circuit-Digest/Maixduino-AI-Projects/tree/main/1000%20Object%20Detection 

Что такое MaixHub и как им пользоваться?

Sipeed также имеет онлайн-платформу под названием Maixhub AI models and training. Maixhub не только позволяет вам загружать предварительно обученные модели, но и дает вам возможность обучать свою собственную модель. Чтобы использовать ее, перейдите на страницу Maixhub и зарегистрируйте новую учетную запись. Если вы уже зарегистрированы, войдите на платформу Maixhub.

Главная страница платформы Maixhub

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

Обучение собственной модели искусственного интеллекта с помощью MaixHub

Чтобы обучить собственную модель ИИ, сначала перейдите на страницу обучения на MaixHub. Нажмите Create («Создать»), чтобы создать новый проект. Дайте проекту имя и выберите тип, будь то классификация изображений или обнаружение изображений. Если вам нужно просто идентифицировать объекты, выберите классификацию изображений. Если вам нужно идентифицировать категории объектов и вывести координаты распознанных объектов, выберите обнаружение изображений. Рекомендуется сначала обучить модель обнаружения изображений. Обучение обнаружению изображений включает в себя аннотацию набора данных, поэтому освоение обучения обнаружению изображений означает, что вы также освоите классификацию изображений.

Начало создания собственной модели искусственного интеллекта с помощью MaixHub

После создания проекта следующим шагом будет создание набора данных. Созданный набор данных может быть повторно использован для других проектов, если это необходимо. Позже выберите созданный нами набор данных и нажмите confirm («Подтвердить»).

Выбор набора данных в MaixHub

Создание набора данных в MaixHub

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

Изображения, загруженные в MaixHub, могут быть аннотированы внутри. Выберите загрузку изображений или сжатых пакетов и не забудьте нажать кнопку start upload «Начать загрузку».

Загрузка изображений для обучения модели в MaixHub

После загрузки изображений мы можем двигаться дальше с аннотацией. Аннотирование в MaixHub очень просто. Сначала создайте метки, а затем нажмите кнопку New или нажмите w на клавиатуре, чтобы добавить аннотацию (метку). Нажмите save или нажмите s для сохранения аннотации. Для аннотирования следующего изображения нажмите next или нажмите d на клавиатуре.

Добавление аннотаций (меток) в MaixHub

После того, как все изображения проаннотированы, перейдем к обучению. Для этого нажмите на Create Task в меню левой панели.

Начало процесса обучения в MaixHub

На странице создания задачи выберите nncase в качестве модели для k210, которая является основной SoC в Maixduino, затем создайте обучающую задачу и дождитесь ее завершения.

Настройка параметров модели для обучения в MaixHub

После завершения обучения модели нажмите deploy («Развернуть»). На странице развертывания выберите ручное развертывание и нажмите download («Загрузить»), чтобы загрузить файл модели. Файл модели с расширением .kmodel будет загружен на ваш компьютер. Используйте эту модель в своем проекте.

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

Теперь, когда мы изучили процесс использования платы Maixduino для проектов ИИ с MaixPy, наслаждайтесь созданием новых проектов.

(Проголосуй первым!)
Загрузка...
26 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *