Съдържание:

Откриване на обект с дъски Sipeed MaiX (Kendryte K210): 6 стъпки
Откриване на обект с дъски Sipeed MaiX (Kendryte K210): 6 стъпки

Видео: Откриване на обект с дъски Sipeed MaiX (Kendryte K210): 6 стъпки

Видео: Откриване на обект с дъски Sipeed MaiX (Kendryte K210): 6 стъпки
Видео: SCP-093 Красное море Объект (Все тесты и вторичного сырья Журналы) 2024, Ноември
Anonim
Image
Image

Като продължение на предишната ми статия за разпознаване на изображения със Sipeed MaiX платки, реших да напиша друг урок, фокусиран върху откриването на обекти. Наскоро се появи интересен хардуер с чипа Kendryte K210, включително Seeed AI Hat за Edge Computing, M5StickV на M5 стека и HuskyLens на DFRobot (въпреки че този има фирмен фърмуер и по -насочен за начинаещи). Поради ниската си цена, Kendryte K210 се хареса на хората, които искат да добавят компютърна визия към своите проекти. Но както обикновено с китайските хардуерни продукти, техническата поддръжка липсва и това е нещо, което се опитвам да подобря с моите статии и видеоклипове. Но имайте предвид, че не съм от екипа на разработчиците на Kendryte или Sipeed и не мога да отговоря на всички въпроси, свързани с техния продукт.

Имайки това предвид, нека започнем! Ще започнем с кратък (и опростен) преглед на това как работят CNN моделите за разпознаване на обекти.

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

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

Стъпка 1: Обяснена архитектура на модела за откриване на обекти

Обяснена архитектура на модела за откриване на обекти
Обяснена архитектура на модела за откриване на обекти
Обяснена архитектура на модела за откриване на обекти
Обяснена архитектура на модела за откриване на обекти

Моделите за разпознаване на изображения (или класификация на изображения) приемат цялото изображение като вход и извеждат списък на вероятностите за всеки клас, който се опитваме да разпознаем. Много е полезно, ако обектът, който ни интересува, заема голяма част от изображението и не ни интересува много местоположението му. Но какво ще стане, ако нашият проект (да речем, камера за проследяване на лица) изисква от нас не само да имаме познания за типа обект в изображението, но и неговите координати. А какво ще кажете за проекта, изискващ откриване на множество обекти (например за броене)?

Ето когато моделите за откриване на обекти са полезни. В тази статия ще използваме архитектурата YOLO (гледате само веднъж) и ще фокусираме обяснението върху вътрешната механика на тази конкретна архитектура.

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

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

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

Подгответе околната среда
Подгответе околната среда

aXeleRate се основава на прекрасен проект на penny4860, SVHN yolo-v2 цифров детектор. aXeleRate извежда тази реализация на YOLO детектор в Keras на следващо ниво и използва удобната си конфигурационна система за извършване на обучение и преобразуване на мрежи за разпознаване на изображения/откриване на обекти и сегментиране на изображения с различни бекенди.

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

Бележник Colab за откриване на обекти PASCAL-VOC

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

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

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

conda create -n yolo python = 3.7

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

conda активира yolo

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

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

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

И след това стартирайте това, за да изтеглите скриптове, които ще ви трябват за обучение и извод:

git клонинг

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

Стъпка 3: Обучете модел за откриване на обект с Keras

Обучете модел за откриване на обект с Keras
Обучете модел за откриване на обект с Keras

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

Нека започнем с пример за играчка и да обучим детектор на миещи мечки. В папката /config има конфигурационен файл, raccoon_detector.json. Избираме MobileNet7_5 като архитектура (където 7_5 е алфа параметър на оригиналната реализация на Mobilenet, контролира ширината на мрежата) и 224x224 като размер на входа. Нека да разгледаме най -важните параметри в конфигурацията:

Типът е модел на интерфейса - Класификатор, детектор или SegnetArchitecture е модел на заден план (извличане на функции)

- Пълен Yolo - Tiny Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

За повече информация относно котвите, моля, прочетете тук

Етикетите са етикети, присъстващи във вашия набор от данни. ВАЖНО: Моля, избройте всички етикети, присъстващи в набора от данни.

object_scale определя колко да се санкционира погрешното прогнозиране на доверието на обективни предсказатели

no_object_scale определя колко да се санкционира погрешното прогнозиране на доверието на обективни предсказатели

corre_scale определя колко да се наказват грешни прогнози за позиция и размер (x, y, w, h)

class_scale определя колко да се санкционира грешното прогнозиране на класа

увеличаване - увеличаване на изображението, преоразмеряване, изместване и замъгляване на изображението, за да се предотврати пренареждането и да има по -голямо разнообразие в набора от данни.

train_times, validation_times - колко пъти да повторите набора от данни. Полезно, ако имате увеличаване

активиран

first_trainable_layer - позволява ви да замразите определени слоеве, ако използвате предварително обучена мрежа от функции

Сега трябва да изтеглим набора от данни, който споделих в моя Google Drive (оригинален набор от данни), който е набор от данни за откриване на енот, съдържащ 150 анотирани снимки.

Уверете се, че промените съответно редовете в конфигурационния файл (train_image_folder, train_annot_folder) и след това започнете обучението със следната команда:

python axelerate/train.py -c configs/raccoon_detector.json

train.py чете конфигурацията от.json файл и обучава модела със скрипт axelerate/networks/yolo/yolo_frontend.py. yolo/backend/loss.py е мястото, където се прилага персонализирана функция за загуба, а yolo/backend/network.py е мястото, където се създава моделът (вход, извличане на функции и слоеве за откриване заедно). axelerate/networks/common_utils/fit.py е скрипт, който реализира тренировъчен процес и axelerate/networks/common_utils/feature.py съдържа екстрактори на функции. Ако възнамерявате да използвате обучен модел с чип K210 и фърмуер на Micropython, поради ограниченията на паметта можете да избирате между MobileNet (2_5, 5_0 и 7_5) и TinyYolo, но открих, че MobileNet дава по -добра точност на откриване.

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

Стъпка 4: Преобразувайте го във формат.kmodel

Преобразувайте го във формат.kmodel
Преобразувайте го във формат.kmodel

С aXeleRate преобразуването на модела се извършва автоматично - това е може би най -голямата разлика от старата версия на скриптове за обучение! Освен това получавате файловете с моделите и графиката на обучението, запазени добре в папката на проекта. Също така открих, че точността на проверка понякога не успява да даде оценка на реалната ефективност на модела за откриване на обекти и затова добавих mAP като показател за валидиране за моделите за откриване на обекти. Можете да прочетете повече за mAP тук.

Ако mAP, средната средна точност (нашата метрика за валидиране) не се подобрява за 20 епохи, обучението ще спре преждевременно. Всеки път, когато mAP се подобрява, моделът се записва в папката на проекта. След като обучението приключи, aXeleRate автоматично преобразува най -добрия модел в посочени формати - можете да изберете „tflite“, „k210“или „edgetpu“от сега.

Сега до последната стъпка, всъщност изпълняваме нашия модел на хардуер Sipeed!

Стъпка 5: Стартирайте на фърмуера на Micropython

Стартирайте на фърмуера на Micropython
Стартирайте на фърмуера на Micropython

Възможно е да се направи извод с нашия модел за откриване на обект с C код, но за удобство вместо това ще използваме фърмуера на Micropython и MaixPy IDE.

Изтеглете MaixPy IDE от тук и микропитон фърмуер от тук. Можете да използвате скрипта на python kflash.py, за да запишете фърмуера или да изтеглите отделен инструмент за флаш GUI тук.

Копирайте model.kmodel в корена на SD карта и поставете SD карта в Sipeed Maix бит (или друго устройство K210). Като алтернатива можете да запишете.kmodel във флаш паметта на устройството. Моят пример скрипт чете.kmodel от флаш памет. Ако използвате SD карта, моля, променете този ред

задача = kpu.load (0x200000)

да се

task = kpu.load ("/sd/model.kmodel")

Отворете MaixPy IDE и натиснете бутона за свързване. Отворете скрипта raccoon_detector.py от папката example_scripts/k210/detector и натиснете бутона Старт. Трябва да гледате поток на живо от камерата с ограничаващи кутии наоколо … е, миещи мечки. Можете да увеличите точността на модела, като предоставите повече примери за обучение, но имайте предвид, че това е приказен малък модел (1.9 M) и ще има проблеми с откриването на малки обекти (поради ниска разделителна способност).

Един от въпросите, които получих в коментарите към предишната си статия за разпознаването на изображения, е как да изпратя резултатите от откриването през UART/I2C на друго устройство, свързано към платките за разработка на Sipeed. В моето хранилище на github ще можете да намерите друг примерен скрипт, raccoon_detector_uart.py, който (както се досещате) открива миещи мечки и изпраща координатите на ограничаващите полета през UART. Имайте предвид, че пиновете, използвани за UART комуникация, са различни от различните платки, това е нещо, което трябва да проверите в документацията.

Стъпка 6: Обобщение

Kendryte K210 е солиден чип за компютърно зрение, гъвкав, макар и с ограничена налична памет. Досега в моите уроци ние разгледахме използването му за разпознаване на персонализирани обекти, откриване на персонализирани обекти и изпълнение на някои задачи за компютърно зрение, базирани на OpenMV. Знам със сигурност, че той също е подходящ за разпознаване на лица и с известна работа трябва да е възможно да се направи разпознаване на пози и сегментиране на изображението (можете да използвате aXeleRate за обучение на семантичен модел на сегментиране, но все още не приложих извода с K210). Чувствайте се свободни да разгледате проблемите с хранилището на aXeleRate и да направите PR, ако смятате, че има някои подобрения, които можете да допринесете!

Ето някои статии, които използвах при писането на този урок, погледнете, ако искате да научите повече за откриването на обекти с невронни мрежи:

Детектори за ограничаващи кутии: разбиране на YOLO, изглеждаш само веднъж

Разбиране на YOLO (повече математика)

Нежно ръководство за това как локализацията на обекти на YOLO работи с Keras (част 2)

Откриване на обекти в реално време с YOLO, YOLOv2 и сега YOLOv3

Надявам се, че можете да използвате знанията, които имате сега, за да изградите някои страхотни проекти с машинно виждане! Можете да закупите дъски Sipeed тук, те са сред най -евтините опции за ML на вградени системи.

Добавете ме в LinkedIn, ако имате въпроси и се абонирайте за канала ми в YouTube, за да получавате известия за по -интересни проекти, включващи машинно обучение и роботика.

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