PyAi-k210 - ещё одна платформа машинного зрения на kendryte k210

  • Цена: $38.79 + доставка $3.77

Как я уже писал в одном из предыдущих обзоров, я активно слежу за развитием платформ машинного зрения на базе микроконтроллера Kendryte k210 и постоянно ищу что-то новое. Одной из последних находок для меня стала платформа PyAi-k210 от компании 01studio. У данной компании есть целая линейка платформ на базе esp8266, esp32, nrf52840, stm32, k210 объединенных общим форм-фактором и возможностью подключения к базовой плате расширения. Также в эту линейку входит OpenMV H7 со специальной платой-адаптером.



Подробнее про Kendryte K210 можно почитать в моем обзоре на платформу Maixduino. Если коротко, Kendryte K210 — это процессор RISC-V с ускорителем свёрточных нейронных сетей, который позволяет использовать недорогие, маломощные решения машинного зрения, такие как распознавание лиц или объектов.

Распиновка PyAi-k210

Конструктивно форм-фактор PyAi-k210 схож с OpenMV. Её «сердцем» является модуль M1n на базе Kendryte K210 с интерфейсом M.2, разработанный компанией Sipeed. На рынке есть несколько платформ совместимых с M1n, как от самой Sipeed так и от пользователей. Это крошечный модуль с размерами всего 26х22 мм.

Технические характеристики Sipeed M1n:
— SoC – Двухъядерный 64-битный RISC-V процессор Kendryte K210 @ с частотой до 400 МГц, с FPU, нейронным процессором (NPU), аудио процессором, встроенной памятью 6 Мб SRAM для процессора и 2 Мб может использоваться в качестве памяти AI SRAM
— Хранилище – 128 Мб SPI флэш-памяти
— Камера – 24-контактный разъем для DVP камеры
— Хост интерфейс – M.2 разъем с некоторыми входами и выходами и интерфейсом JTAG
— Напряжение питания – 5.0 В ± 0.2 В при при токе потребления ~ 300 мА
— Температурный диапазон – от -30°C до 85 °C

Платформа поставляется в удобном пластиковом боксе.

В комплекте: Сама платформа PyAi-K210 с установленным модулем Sipeed M1n, модуль камеры OV2640, 2,8" дисплей c разрешением 240*320 пикселей и резистивным тачскрином, 2 FPC шлейфа для модуля камеры и дисплея, micro-USB кабель. Дисплей основан на контроллере ST7789, за работу тачскрина отвечает контроллер NS2009. При желании все компоненты можно приобрести по отдельности.

Так выглядит плата с установленным модулем камеры

Сравнение PyAi-k210 и OpenMV

Производитель предоставляет всю необходимую документацию и ПО для начала работы с платформой. Документация на китайском, но это не проблема, так как все примеры программ можно взять на официальной странице Sipeed на github. Все примеры работают корректно. Среди прочего в документации также присутствует довольно объемная книга, посвященная началу работы со всеми платформами линейки с поддержкой Micro-Python. Надеюсь, книга будет переведена на английский.

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

Обучение модели с помощью Maixhub
Платформа обучения модели Maixhub позволяет быстро обучить нужную модель ИИ, при этом не нужно создавать какую-либо среду обучения и запускать код, нужно просто выбрать тип обучения и загрузить помеченный набор данных. Maixhub автоматически обучит модель и отправит результаты по электронной почте.
На данный момент доступны два типа обучения:
1. Классификация объектов: Определение категории, к которой принадлежит изображение, например яблоко или чашка, без координат. Как показано ниже, вероятность того, что это яблоко, составляет 0,8.

2. Обнаружение объекта: Определение положения объекта на изображении и вывод координаты объекта и размера объекта (т.е. кадрирование распознанного объект). Как показано на рисунке ниже, вероятность того, что яблоко будет яблоком, равна 0,8, если оно обнаружено и его местоположение отмечено рамкой.

I Постановка задачи
1. Выбор тип обучения.
Выберите «Классификация объектов», если нет необходимости определять положение объекта, иначе выберите «Обнаружение объекта».
Подготовка наборов данных для обнаружения объектов более сложна, чем классификация, поэтому рекомендуется использовать классификацию объектов, если вы впервые используете Maixhub, чтобы сначала ознакомиться с процессом.
2. Выбор классов.
Необходимо определиться с количеством и названием классов. Внимание: имя класса (метка) может использовать только английский символ и символ нижнего подчеркивания.
3. Выбор разрешения изображения.
Разрешение изображения также очень важно при их получении, обучении или использовании, поскольку модель может быть непригодной для использования или может иметь низкую точность распознавания.
Maixhub поддерживает в настоящее время следующие разрешения изображений:
1. Классификация объектов: 224x224 (рекомендуется)
2. Обнаружение объектов: 224x224 (рекомендуется), 240x240
Другие разрешения не пройдут обучение (рекомендуемое разрешение более точное).
4. Определение количество изображений в наборе данных. То есть необходимо определить количество изображений для каждой категории, чтобы облегчить быстрый сбор изображений и получить точный результат в дальнейшем. Также должны выполняться требования Maixhub по количеству изображений:
1. Классификация объектов: не менее 40 изображений на класс.
2. Обнаружение объектов: не менее 100 изображений на класс.
5. При этом следует обратить внимание, что размер загруженного zip-файла не может превышать 20 МБ.
II Сбор изображений
Цель состоит в том, чтобы собрать изображения с заданным разрешением.
Есть несколько способов собрать изображения:
1. Сделать снимок с желаемым разрешением и сохранить его на на SD-карту с помощью платы разработки (рекомендуется авторами инструкции).
2. Сделать снимок камерой телефона, затем используя инструмент предварительной обработки, сжать фотографии до необходимого разрешения, и обязательно проверить данные вручную после обработки, иначе это может повлиять на точность обучения.
3. Использовать существующие изображения, например общедоступные наборы и обработать их до необходимого разрешения с помощью инструментов предварительной обработки.
III Маркирование набора данных
Для классификации объектов не требуется маркирование данных.
Для детектирования объектов необходимо маркирование исходных данных. То есть, с помощью специальной программы необходимо выделить область на изображении, которую занимает объект определенного класса и присвоить этой области соответствующую метку класса.
Внимание! Перед тем, как пометить изображения, ещё раз необходимо убедиться, что разрешение правильное.
Для аннотации доступны следующие два инструмента.
1. Vott
2. labelimg
Далее показан пример маркирования данных в программе Vott.
Во-первых необходимо создать проект и создать соединение с папкой ввода/вывода данных. При создании проекта необходимо добавить метки классов.


Затем в настройках экспорта необходимо выбрать формат TensorFlow Records.

Далее необходимо непосредственно аннотировать данные, для этого нужно выделить область, занимаемую объектом и выбрать метку класса, к которому он относится.

После аннотирования необходимо нажать кнопку «Экспорт», чтобы экспортировать файл TensorFlow Record.
Будет создана необходимая структура каталогов файлов, обратите внимание, что требуется файл tf_label_map.pbtxt, который создается автоматически, не меняйте его вручную.
IV Упаковка набора данных
Набор обработанных данных необходимо упаковать с помощью zip, другие форматы пока не поддерживаются, размер архива не должен превышать 20 МБ.
Классификация объектов
Один класс на папку, имя папки (метка) — это имя класса

Обнаружение объекта
Пример выходной файловой структуры Vott

V Загрузка наборов данных и начало обучения
Создайте задание на обучение на www.maixhub.com/mtrain.html
— Выбрать тип обучения
— Введите адрес электронной почты, чтобы получать результаты, включая успешные (файлы модели и т. Д.) И неудачные (причина отказа) результаты.
— Если требуется машинный код (пропустите этот шаг, если нет):
Предупреждение: из-за необходимости шифрования модели запуск key_gen.bin всегда будет отключать порт JTAG и записывать одноразовый ключ AES. Перед записью убедитесь, что он не влияет на вашу разработку. (Если вы не используете JTAG для отладки разработки или просто используете MaixPy для разработки, это не повлияет на вашу разработку).
— Скачать прошивку key_gen key_gen_v1.2.zip
— Скачать kflash-gui
— Записать прошивку key_gen с помощью kflash-gui

— Открыть терминал, сбросить плату, в терминале будет получено сообщение:

где 6f80dccbe29 ********** cc7e9d69f92 — это машинный ключ платы разработчика
— Загрузить набор данных
— Нажать кнопку создания задачи.
VI Результаты обучения и способы использования
Результаты обучения (успех или неудача) будут отправлены на ваш электронный адрес. Это zip-архив. Разархивируйте его и внимательно прочтите README.txt, в нем объясняется, как его использовать на английском и китайском языках.
По умолчанию, если установлена последняя версия прошивки, необходимо скопировать все полученные файлы в корневой каталог SD-карты, выключить питание и вставить SD-карту в плату для разработки, затем включить питание и скрипт boot.py будет запущен автоматически!
Если вам нужно поместить модель во флеш-память для этого необходимо записать файл m.kmodel во флеш-память с помощью K-Flash GUI и в программе соответственно изменить адрес загрузки модели.


Первая попытка оказалась неудачной. Я сделал множество фотографий овощей по отдельности на трех разных фонах для классификации и 72 фотографии всех овощей вместе для детектирования. Я невнимательно читал инструкцию и не выполнил условие по количеству фотографий для детектирования (>100 на класс). Модель, обученная классификации, не давала правильного результата, модель детектирования не работала вообще и не находила ни один объект.

Для второй попытки я добавил к набору совместных фото фотографии овощей по отдельности. В итоге получилось 467 фотографий с 649 помеченными регионами, таким образом на каждый класс приходится порядка 150 регионов. Обучение заняло несколько большее время, порядка 10 минут в отличие от пары минут для первого набора. Но я столкнулся с небольшой проблемой: овощи, использованные для фотосета были съедены, все кроме чеснока) Так как я использовал для обучения один экземпляр каждого объекта, а следовало несколько разных экземпляров, я предполагал, что другие экземпляры не будут распознаваться. В итоге: чеснок детектируется уверенно, помидор, «пожожий» на использованный, тоже хорошо, картошка, несмотря на то, что она несколько отличается по форме и по цвету от использованной в фотосете тоже детектируется. А вот лук не детектируется, так как для фотосета использовался красный, а в наличии только белый. Уверенность детектирования во всех случаях небольшая и составляет порядка 0,6.

Также я пробовал использовать набор изображений из интернета. Набор содержит 2520 изображений рук для игры «Камень, ножницы, бумага». В этот раз обучение происходило гораздо дольше и заняло не меньше 30 минут. Но результат также неоднозначный: уверенно определяется «Камень» и «Ножницы» а «Бумага» не распознается вообще.

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

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


Заключение


В сравнении с maixduino, рассмотренной ранее, можно выделить следующие особенности PyAi-k210
плюсы:
— поддержка питания от аккумулятора со схемой его зарядки и защиты
— камера с объективом M12, что дает возможность его смены
— возможность изменения положения камеры
— интерфейс для подключения микрофонного массива
— более удобное подключение дисплея
— дисплей большего размера с тачскрином
— встроенный RGB-светодиод
минусы:
— отсутствие встроенного микрофона, модуль микрофона необходимо приобретать отдельно
— отсутствие встроенного ЦАП и усилителя, модуль ЦАП и усилителя также необходимо приобретать отдельно
— отсутствие встроенного WiFi-модуля
— более высокая цена

В заключение резюмирую свои впечатления. Платформа PyAi как и прочие платформы на базе K210 однозначно заслуживает внимания. Форм-фактор OpenMV в сочетании с модульностью, мне кажется очень удобным. Возможность автономной работы от аккумулятора — большой плюс. У меня в планах есть несколько проектов, в которых я бы хотел использовать именно эту платформу. Мой интерес к теме машинного зрения не исчерпан и я продолжу следить за новинками.
Планирую купить +20 Добавить в избранное +47 +67
+
avatar
  • vkozloff
  • 08 декабря 2020, 19:32
0
А для обучения обязательно нужен Maixhub или его можно локально поднять на компе?
+
avatar
  • Lucky13
  • 08 декабря 2020, 19:43
+1
Локально можно использовать Keras — www.instructables.com/Object-Detection-With-Sipeed-MaiX-BoardsKendryte-K/
+
avatar
  • vkozloff
  • 09 декабря 2020, 14:12
0
О, спасибо. Надо будет попробовать.
+
avatar
+9
Вы со старой то разобрались? Сделали что-нибудь полезное кроме мигания светодиодом? Нисколько не критика, просто хочу понять зачем и для чего это мне? Заранее спасибо.
+
avatar
  • Lucky13
  • 08 декабря 2020, 20:24
0
Делал небольшой проект по распознаванию показаний счетчика, но результат не очень: распознает плохо, нужно жестко фиксировать камеру и, наверное, добавлять подсветку. Может, с этой платформой будет несколько удобнее, так как она компактнее. Есть идея сделать в конечном итоге иструмент для снятия показаний и передаче их по Wi-Fi или LoRaWAN. Сейчас чисто для развлечения делаю трекер котов на двух серво. Ещё хочу сделать «тепловизор» с распознаванием лиц, но пока в MaixPy не добавили поддержку MLX90640, а самому добавить не получается.
+
avatar
+2
Про счётчик интересно. Я конечно далек от темы машинного обучения, но вроде, когда-то видел проекты по разбору изображения фото счётчика и конвертации в цифры (uint32_t). Делалось это на старом смартфоне с разбитым экраном, второй вроде на малине без всяких спец плат для машинного обучения.

Вопос зачем такая плата (вещь в себе) нужна если легко ее обучить не получается и применить больше никуда нельзя? Малину хоть потом пристроить можно.
+
avatar
  • Lucky13
  • 08 декабря 2020, 21:06
0
Про счётчик интересно. Я конечно далек от темы машинного обучения, но вроде, когда-то видел проекты по разбору изображения фото счётчика и конвертации в цифры (uint32_t). Делалось это на старом смартфоне с разбитым экраном, второй вроде на малине без всяких спец плат для машинного обучения.
Да, я тоже видел подобные проекты, видел даже снятие показаний с помощью ESP32-Cam.

Вопос зачем такая плата (вещь в себе) нужна если легко ее обучить не получается и применить больше никуда
Я видел вполне рабочую реализацию распознавания показаний, просто у меня ввиду описанных причин хорошего результата не получилось. А вариантов использования помимо озвученных достаточно, как и у других платформ: различные роботы, автоматические кормушки, эмуляторы игровых консолей и т.п.
+
avatar
0
Понятно. Спасибо.
+
avatar
  • 23di
  • 08 декабря 2020, 20:01
+1
Да, расскажи про проекты, пожалуйста
+
avatar
  • AVIcrak
  • 08 декабря 2020, 20:24
+1
Не скажу за k210, но вот stm32f7 и esp32 — крайне тормозные в плане распознавания образов. 500мс — это ахренеть как много. Годится для хоби и развлечения, но до практического применения очень далеко. К тому-же бесплатную библиотеку нужно пилить и пилить, чтобы она хоть как-то адекватно работала.

Реальное применение с огромным выхлопом в баксах — сортировка зерна, круп, картошки, яблок, и так далее. Например грязная гречка стоит примерно 2к рублей за тонну — поросятам самое то. Но фермеры уже давно научились её очищать — результат в магазине.
зы — фермеры что отстали от поезда — уже давно разорились.
+
avatar
0
Плата то хобийная. Она как бы изначально не предназначена для сортировки на конвеерах, бутылок, конфет, гречки и тд… Или вы все еще в деда мороза верите и думаете что за $40 вам продадут проц способный на такие вещи?
+
avatar
  • UWU
  • 08 декабря 2020, 21:07
+1
А не проще за такую же сумму купить мобильник на андроиде и использовать его как платформу?
Почти все характеристика будут в разы лучше.
Памяти будет не жалкие мегабайты, а гигабайты. Процессор явно быстрее. А уж про камеру я не говорю.
Плюс спать все мобильники умеют правильно. Код хочешь юзай android, хочешь пиши бинарные модули.
Главное найти мобильник, для которого есть инфа о используемых контроллерах дисплея и камеры,
чтобы не заниматься реверсингом драйверов камеры, дисплея и прочей периферии.
+
avatar
+1
В далёкие студенческие годы, писал скрипт на верилоге по распознаванию яркостных образований на случайном, не однородном поле, даже планировал все это в ксилинкс проц засунуть, но тут у меня кончился диплом и все встало. Я вот к чему веду, что с точки зрения машинного зрения (прости господи, за тафтологию), вы движетесь не тем путем. Для начала надо определиться, что надо, затем вам основной путь в матлаб — симулинк набрасывать ваши хотелки в эмуляторе, затем описываем все это на верилоге и заливаем в ксилинкс, подключаем камеру иии долго, упорно настраиваем. Я бы пошел таким путем, но опять же нужна нефиговая подготовка. Я к чему веду, если вам код для выделения ярких участков понадобится, то поделюсь. Сохранился даже есть к нему целая туча теории, да и в целом могу весь диплом отдать, машинным зрением я уже давно не занимаюсь.
+
avatar
  • ssurneed
  • 08 декабря 2020, 23:59
+1
fpga дорого, NPU дешего
+
avatar
0
Так машинное зрение, которое точное, быстрое, оно вообще не дешево стоит, по причине того что не имеет общего назначения, как плата из обзора, а настраивается на конкретику.
+
avatar
  • islera
  • 08 декабря 2020, 22:25
+3
Сдаётся мне Сара Конор должна была к этому автору прийти, а не к тому чуваку, который руку делал!
+
avatar
+3
Нда, результаты не очень. Делал на RPI 3B+ распознавание лиц подходящих к калитке, чтобы открывать без ключей. В базе 6 человек, распознование в среднем около секунды (ночью может 2-3). Вероятность распознования где-то 0.9, по каждому фейсу порядка 10 фото для обучения. Работает на базе OpenCV, Если без IP камеры то малинка в такую же цену встанет.
+
avatar
  • rmrf
  • 09 декабря 2020, 07:35
0
ух-ты, интересно
а где почитать про это?

PS а если фотографию к камере поднести?

Дополнительная информация


))))

+
avatar
  • kn_dima
  • 09 декабря 2020, 11:57
+1
фотку тоже опознаёт.
+
avatar
+1
Основную инфу для начала вот отсюда брал
Фотку тоже распознает. Но делался сервис по открытию калитки от добрых людей. Кому надо — через забор перелезет, там у меня колючей проволоки под током нет )
+
avatar
  • jjetsku
  • 09 декабря 2020, 13:36
0
Уверенность детектирования во всех случаях небольшая и составляет порядка 0,6.
То есть лишь чуть лучше подбрасывания монетки: «то ли лук, то ли не лук...»
+
avatar
  • Kybb
  • 10 декабря 2020, 09:54
0
Поддерживаю идею ранее комментирующих о практическом применении. Автору за обзор однозначно спасибо!
А вот если есть силы, навыки и время сделать в формате — купите вот это, сделайте в точности как я вот это и оно станет:
— отличать вашу мордулица от других и сообщать об этом в умный дом
— считать количество людей прошедших мимо камеры
— различать номера машин
— различать форму и цвет машины для детекции определённой (понятно что марка и цвет могут совпасть и тогда ой)

Вот тогда вот вообще хорошо будет.