Съдържание:

Разпознаване на изображения с платки K210 и Arduino IDE/Micropython: 6 стъпки (със снимки)
Разпознаване на изображения с платки K210 и Arduino IDE/Micropython: 6 стъпки (със снимки)

Видео: Разпознаване на изображения с платки K210 и Arduino IDE/Micropython: 6 стъпки (със снимки)

Видео: Разпознаване на изображения с платки K210 и Arduino IDE/Micropython: 6 стъпки (със снимки)
Видео: Как оживить фотографию онлайн My Heritage 2024, Юни
Anonim
Image
Image

Вече написах една статия за това как да стартирам демонстрации на OpenMV на Sipeed Maix Bit и също така направих видео на демонстрация на откриване на обекти с тази платка. Един от многото въпроси, които хората са задавали, е - как мога да разпозная обект, за който невронната мрежа не е обучена? С други думи, как да направите свой собствен класификатор на изображения и да го стартирате с хардуерно ускорение.

Това е разбираем въпрос, тъй като за вашия проект вероятно няма нужда да разпознавате някои общи обекти, като котки и кучета и самолети. Искате да разпознаете нещо специфично, например порода куче за тази автоматична врата за домашни любимци, или растителен вид за сортиране, или всякакви други излизащи приложения, за които можете да мислите!

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

АКТУАЛИЗИРАНЕ МАЙ 2020 г.: Виждайки как моята статия и видеоклипът за разпознаване на изображения с дъски K210 все още са много популярни и сред най-добрите резултати в YouTube и Google, реших да актуализирам статията, за да включа информацията за aXeleRate, базирана на Keras рамка за AI на Edge I развивам.

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

За старата версия на статията все още можете да я видите на steemit.com.

Стъпка 1: CNN и трансферно обучение: Някои теории

CNN и трансферно обучение: Някои теории
CNN и трансферно обучение: Някои теории

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

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

Модел, обучен да разпознава много различни общи обекти (котки, кучета, домакински уреди, транспорт и т.н.), вече има „разработени“много от тези полезни филтри, така че не се нуждаем от него, за да се научим да разпознаваме основните форми и части на обектите отново. Можем просто да обучим последните няколко слоя на мрежата да разпознават специфични класове обекти, които са важни за нас. Това се нарича „трансферно обучение“. Имате нужда от значително по -малко данни за обучение и изчисляване на време с трансферно обучение, тъй като тренирате само последните няколко слоя от мрежата, съставени може би от няколкостотин неврона.

Звучи страхотно, нали? Нека да видим как да го приложим.

Стъпка 2: Подгответе вашата среда

Подгответе вашата среда
Подгответе вашата среда

Има два начина да използвате aXeleRate: да се изпълнява локално на Ubuntu машина или в Google Colab. За да работите в Google Colab, разгледайте този пример:

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

Обучението на вашия модел локално и експортирането му за използване с хардуерно ускорение също е много по -лесно сега.

Работната ми среда е Ubuntu 16.04, 64bit. Можете да използвате виртуална машина за стартиране на Ubuntu образ, тъй като няма да използваме графичен процесор за обучение. С някои модификации можете също да стартирате учебния скрипт в Windows, но за преобразуване на модел ще трябва да използвате Linux система. Така че, предпочитаната среда, в която можете да изпълните този урок, е Ubuntu 16.04, работеща на първо място или във виртуална машина.

Нека започнем с инсталирането на Miniconda, който е мениджър на среда за Python. Ние ще създадем изолирана среда, така че няма случайно да променим нищо във вашата системна среда на Python.

Изтеглете инсталатора тук

След като инсталацията приключи, създайте нова среда:

conda създава -n ml python = 3.7

Нека активираме новата среда

conda активира ml

Пред префикса ви ще се появи префикс с името на средата, което показва, че работите сега в тази среда.

Стъпка 3: Инсталирайте AXeleRate и изпълнете тестове

Инсталирайте AXeleRate и изпълнете тестове
Инсталирайте AXeleRate и изпълнете тестове

Инсталирайте aXeleRate на локалната си машина с

pip install git+https://github.com/AIWintermuteAI/aXeleRate

За да изтеглите примери, изпълнете:

git clone

Можете да стартирате бързи тестове с tests_training.py в папката aXeleRate. Той ще провежда обучение и изводи за всеки тип модел, ще записва и преобразува обучени модели. Тъй като това е само обучение за 5 епохи и наборът от данни е много малък, няма да можете да получите полезни модели, но този скрипт е предназначен само за проверка за липса на грешки.

Стъпка 4: Превъзпитайте модела, преобразувайте модела на Keras в.kmodel

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

За този пример с играчки ще обучаваме модела да разпознава Дядо Коледа и Ардуино Уно. Очевидно можете да изберете други класове. Изтеглете набора от данни от тук. Създайте копие на файла класификатор.json в конфигурационната папка, след което го променете съответно, подобно на конфигурационния файл на екранната снимка - уверете се, че пътят към папките за обучение и валидиране е правилен!

Изпълнете следната команда от папката aXeleRate:

python axelerate/train.py - c configs/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: фърмуер на микропитон и Arduino IDE. Хардуерът на Micropython е по -лесен за използване, но заема значителна част от наличната памет, така че остава по -малко място за модела. Arduino IDE е основно C код, който е много по -ефективен и има по -малък обем на паметта. Моят модел е само 1.9Mb, така че и двете опции работят за него. Можете да използвате модели с големина 2,9 Mb с Micropython, за всичко по -голямо трябва да помислите за използването на Arduino IDE.

Изтеглете OpenMV IDE от тук и минимален фърмуер за микропитон от тук.

Запишете фърмуера с инструмента 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 на вградени системи.

Препоръчано: