Оглавление:

Распознавание изображений с помощью плат K210 и Arduino IDE / Micropython: 6 шагов (с изображениями)
Распознавание изображений с помощью плат K210 и Arduino IDE / Micropython: 6 шагов (с изображениями)

Видео: Распознавание изображений с помощью плат K210 и Arduino IDE / Micropython: 6 шагов (с изображениями)

Видео: Распознавание изображений с помощью плат K210 и Arduino IDE / Micropython: 6 шагов (с изображениями)
Видео: PyAi k210 - новая платформа машинного зрения на Kendryte k210 2024, Ноябрь
Anonim
Image
Image

Я уже написал одну статью о том, как запускать демонстрации OpenMV на Sipeed Maix Bit, а также снял видео с демонстрацией обнаружения объектов с этой платой. Один из многих вопросов, которые задают люди, - как я могу распознать объект, для которого нейронная сеть не обучена? Другими словами, как сделать собственный классификатор изображений и запустить его с аппаратным ускорением.

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

Понял тебя! В этой статье я научу вас, как создать свой собственный классификатор изображений с переносом обучения в Keras, преобразовать обученную модель в формат.kmodel и запустить ее на плате Sipeed (может быть любой платой, Bit / Dock или Go) с помощью Micropython или Arduino IDE. И только ваше воображение будет пределом тех задач, которые вы можете выполнить с этими знаниями.

ОБНОВЛЕНИЕ, МАЙ 2020: Увидев, что моя статья и видео о распознавании изображений с досками K210 по-прежнему очень популярны и среди лучших результатов на YouTube и Google, я решил обновить статью, включив в нее информацию о aXeleRate, фреймворке для AI на основе Keras. Край развиваю.

aXeleRate, по сути, основан на коллекции скриптов, которые я использовал для обучения моделей распознавания изображений / обнаружения объектов - объединенных в единую структуру и оптимизированных для рабочего процесса в Google Colab. Пользоваться им удобнее и актуальнее.

Вы все еще можете увидеть старую версию статьи на steemit.com.

Шаг 1: CNN и трансферное обучение: немного теории

CNN и трансферное обучение: немного теории
CNN и трансферное обучение: немного теории

Сверточные нейронные сети или CNN - это класс глубоких нейронных сетей, которые чаще всего применяются для анализа визуальных образов. В Интернете есть много литературы по этой теме, и я дам несколько ссылок в последней части статьи. Короче говоря, вы можете думать о CNN как о серии фильтров, применяемых к изображению, причем каждый фильтр ищет определенную функцию в изображении - на нижних сверточных слоях характерными чертами обычно являются линии и простые формы, а на более высоких уровнях - особенности. может быть более конкретным, например части тела, определенные текстуры, части животных или растений и т. д. Наличие определенного набора характеристик может дать нам ключ к разгадке того, что может быть объект на изображении. Бакенбарды, два глаза и черный нос? Наверное, кошка! Зеленые листья, ствол дерева? Похоже на дерево!

Надеюсь, вы теперь получили представление о принципе работы CNN. Обычно глубокой нейронной сети требуются тысячи изображений и часы обучения (зависит от оборудования, которое вы используете для обучения), чтобы «разработать» фильтры, которые полезны для распознавания типов объектов, которые вам нужны. Но есть ярлык.

Модель, обученная распознавать множество различных обычных объектов (кошек, собак, бытовую технику, транспорт и т. Д.), Уже имеет множество этих полезных фильтров, поэтому она нам не нужна, чтобы научиться распознавать основные формы и части. объектов снова. Мы можем просто повторно обучить последние несколько слоев сети распознавать определенные классы объектов, которые важны для нас. Это называется «трансферным обучением». Вам нужно значительно меньше обучающих данных и времени вычислений с трансферным обучением, поскольку вы обучаете только несколько последних слоев сети, состоящих, возможно, из нескольких сотен нейронов.

Звучит потрясающе, правда? Посмотрим, как это реализовать.

Шаг 2. Подготовьте окружающую среду

Подготовьте свое окружение
Подготовьте свое окружение

Есть два способа использовать aXeleRate: запускать локально на машине Ubuntu или в Google Colab. Для работы в Google Colab взгляните на этот пример:

Классификация изображений Colab Notebook

Обучение вашей модели локально и экспорт ее для использования с аппаратным ускорением теперь также намного проще.

Моя рабочая среда - Ubuntu 16.04, 64 бит. Вы можете использовать виртуальную машину для запуска образа Ubuntu, поскольку мы не будем использовать графический процессор для обучения. С некоторыми изменениями вы также можете запустить обучающий сценарий в Windows, но для преобразования модели вам потребуется система Linux. Итак, предпочтительной средой для выполнения этого руководства является Ubuntu 16.04, работающая изначально или на виртуальной машине.

Начнем с установки Miniconda, менеджера среды для Python. Мы создадим изолированную среду, чтобы случайно ничего не изменить в вашей системной среде Python.

Загрузите установщик здесь

После завершения установки создайте новую среду:

conda create -n ml python = 3.7

Давайте активируем новую среду

conda активировать мл

Перед вашей оболочкой bash появится префикс с именем среды, указывающий, что вы сейчас работаете в этой среде.

Шаг 3. Установите AXeleRate и запустите тесты

Установите AXeleRate и запустите тесты
Установите AXeleRate и запустите тесты

Установите aXeleRate на свой локальный компьютер с помощью

pip install git +

Чтобы скачать примеры, запустите:

git clone

Вы можете запускать быстрые тесты с помощью tests_training.py в папке aXeleRate. Он будет выполнять обучение и вывод для каждого типа модели, сохранять и конвертировать обученные модели. Поскольку это обучение только для 5 эпох, а набор данных очень мал, вы не сможете получить полезные модели, но этот скрипт предназначен только для проверки отсутствия ошибок.

Шаг 4: повторно обучите модель, конвертируйте модель Keras в.kmodel

Переобучить модель, преобразовать модель Keras в.kmodel
Переобучить модель, преобразовать модель Keras в.kmodel

В этом примере игрушки мы научим модель распознавать Санта-Клауса и Arduino Uno. Очевидно, вы можете выбрать другие классы. Загрузите набор данных отсюда. Создайте копию файла classifier.json в папке конфигурации, затем измените ее соответствующим образом, как и в файле конфигурации на снимке экрана - убедитесь, что путь к папкам обучения и проверки правильный!

Выполните следующую команду из папки aXeleRate:

python axelerate / train.py - c конфигурациями / santa_uno.json

Обучение начнется. Если точность валидации (наша метрика валидации) не улучшается в течение 20 периодов, обучение преждевременно прекращается. Каждый раз, когда точность проверки повышается, модель сохраняется в папке проекта. После завершения обучения aXeleRate автоматически конвертирует лучшую модель в указанные форматы - на данный момент вы можете выбрать «tflite», «k210» или «edgetpu».

Шаг 5: Запустите модель на Sipeed Maix Bit

Запустите модель на Sipeed Maix Bit
Запустите модель на Sipeed Maix Bit
Запустите модель на Sipeed Maix Bit
Запустите модель на Sipeed Maix Bit
Запустите модель на Sipeed Maix Bit
Запустите модель на Sipeed Maix Bit

Есть два способа запустить имеющуюся у вас модель на оборудовании Sipeed Maix: микропрограмма micropython и Arduino IDE. Аппаратное обеспечение Micropython проще в использовании, но оно занимает значительную часть доступной памяти, поэтому для модели остается меньше места. Arduino IDE - это, по сути, код C, который намного эффективнее и требует меньшего объема памяти. Моя модель всего 1,9Мб, так что для нее подходят оба варианта. Вы можете использовать модели размером до 2,9 МБ с Micropython, для чего-то большего, что вам нужно рассмотреть с помощью Arduino IDE.

Загрузите OpenMV IDE отсюда и минимальную прошивку micropython отсюда.

Запишите прошивку с помощью утилиты kflash_gui. Вы также можете записать обученную модель во флэш-память, как показано на скриншоте. Или скопируйте его на SD-карту (в этом случае скопируйте.kmodel в корень SD-карты и вставьте SD-карту в Sipeed Maix Bit)

Откройте OpenMV IDE и нажмите кнопку подключения. Откройте скрипт santa_uno.py из папки example_scripts и нажмите кнопку «Пуск». Вы должны видеть прямую трансляцию с камеры, и если вы откроете последовательный терминал, вы получите лучший результат распознавания изображений с оценкой достоверности!

Для использования с Arduino IDE сначала необходимо выполнить процедуру добавления плат Sipeed в Arduino IDE, которая описана здесь. Ваша версия Arduino IDE должна быть не ниже 1.8.12. После добавления плат откройте скетч mobilenet_v1_transfer_learning.ino и загрузите его в Sipeed Maix Bit. Измените название модели на SD-карте на «модель» (или сделайте копию с этим названием). Вы можете изменить имена меток в names.cpp. Он покажет поток с камеры в реальном времени на экране Sipeed Maix вместе с лучшим результатом распознавания изображений.

Шаг 6: выводы

Вот еще несколько материалов по теме CNN и трансферного обучения:

Передача обучения с использованием Mobilenet и Keras Прекрасное объяснение передачи обучения, в этом руководстве используется измененная версия кода из этой статьи.

Кошки и собаки и сверточные нейронные сети. Объясняет основы CNN и визуализирует некоторые фильтры. С кошками!

Обучайте, конвертируйте, запускайте MobileNet на Sipeed MaixPy и MaixDuino! Учебное пособие от команды Sipeed о том, как обучать классы Mobilenet 1000 с нуля (без передачи обучения). Вы можете скачать их предварительно обученную модель и опробовать ее!

Надеюсь, вы сможете использовать полученные знания для создания потрясающих проектов с использованием машинного зрения! Вы можете купить платы Sipeed здесь, они являются одними из самых дешевых вариантов, доступных для ML во встроенных системах.

Рекомендуемые: