Mundarija:

Saied MaiX platalari bilan ob'ektlarni aniqlash (Kendryte K210): 6 qadam
Saied MaiX platalari bilan ob'ektlarni aniqlash (Kendryte K210): 6 qadam

Video: Saied MaiX platalari bilan ob'ektlarni aniqlash (Kendryte K210): 6 qadam

Video: Saied MaiX platalari bilan ob'ektlarni aniqlash (Kendryte K210): 6 qadam
Video: Asereje (Remix) Majabi & The Gubi imlaylow & Chusi 2024, Iyul
Anonim
Image
Image

Sipeed MaiX platalari yordamida tasvirni tanib olish haqidagi oldingi maqolamning davomi sifatida men ob'ektni aniqlashga e'tibor qaratgan holda boshqa darslik yozishga qaror qildim. Yaqinda Kendryte K210 chipi bilan birga Edge Computing uchun Seeed AI Hat, M5 stack's M5StickV va DFRobotning HuskyLens kabi qiziqarli uskunalar paydo bo'ldi. Kendryte K210 arzon bo'lgani uchun odamlarga murojaat qilib, o'z loyihalariga kompyuter ko'rish qobiliyatini qo'shishni xohladi. Ammo, odatdagidek, Xitoyning apparat mahsulotlari bilan bir qatorda, texnik qo'llab -quvvatlash yo'q va bu men maqolalarim va videolarim bilan yaxshilashga harakat qilaman. Shuni yodda tutingki, men Kendryte yoki Sipeed ishlab chiquvchilar guruhida emasman va ularning mahsuloti bilan bog'liq barcha savollarga javob bera olmayman.

Shuni hisobga olib, boshlaylik! Biz CNN modellarini tanib olish qanday ishlashini qisqacha (va soddalashtirilgan) ko'rib chiqishdan boshlaymiz.

2020 yil MAYNI YANGILASh: K210 platalari yordamida ob'ektlarni aniqlash haqidagi maqolam va videomurojaat hali ham juda mashhurligini ko'rib, YouTube va Google-dagi eng yaxshi natijalar qatorida men maqolani aXeleRate, Keras asosidagi sun'iy intellekt asoslari haqidagi ma'lumotlarni kiritish uchun yangilashga qaror qildim. Men rivojlanaman. aXeleRate, asosan, tasvirni aniqlash/ob'ektlarni aniqlash modellarini o'rgatish uchun ishlatgan skriptlar to'plamiga asoslangan - yagona ramkaga birlashtirilgan va Google Colab -da ish oqimi uchun optimallashtirilgan. Foydalanish qulayroq va yangilangan.

Maqolaning eski versiyasi uchun siz uni steemit.com saytida ko'rishingiz mumkin.

1 -qadam: Ob'ektlarni aniqlash modeli arxitekturasi tushuntiriladi

Ob'ektlarni aniqlash modeli arxitekturasi tushuntiriladi
Ob'ektlarni aniqlash modeli arxitekturasi tushuntiriladi
Ob'ektlarni aniqlash modeli arxitekturasi tushuntiriladi
Ob'ektlarni aniqlash modeli arxitekturasi tushuntiriladi

Tasvirni aniqlash (yoki tasvir tasnifi) modellari butun tasvirni kirish sifatida qabul qiladi va biz tanmoqchi bo'lgan har bir sinf uchun ehtimolliklar ro'yxatini chiqaradi. Agar biz qiziqayotgan ob'ekt tasvirning katta qismini egallasa va biz uning joylashuvi haqida unchalik ahamiyat bermasak, bu juda foydali bo'ladi. Ammo, agar bizning loyihamiz (aytaylik, yuzni kuzatuvchi kamera) bizdan nafaqat tasvirdagi ob'ektning turini, balki uning koordinatalarini ham bilishni talab qilsa-chi? Va bir nechta ob'ektlarni aniqlashni talab qiladigan loyiha haqida nima deyish mumkin (masalan, sanash uchun)?

Bu erda ob'ektlarni aniqlash modellari yordamga keladi. Ushbu maqolada biz YOLO (faqat bir marta qaraysiz) arxitekturasidan foydalanamiz va ushbu arxitekturaning ichki mexanikasiga tushuntirish beramiz.

Biz rasmda qanday ob'ektlar borligini va ularning koordinatalarini aniqlashga harakat qilamiz. Mashinada o'rganish sehr emas va "o'ylaydigan mashina" emas, balki ma'lum bir muammoni yaxshiroq hal qilish uchun funktsiyani (neyron tarmoq) optimallashtirish uchun statistikadan foydalanadigan algoritm. Bu muammoni yanada "optimallashtiruvchi" qilish uchun biz uni qayta ifodalashimiz kerak. Bu erda sodda yondashuv, uning prognozi va ob'ektning to'g'ri koordinatalari o'rtasidagi yo'qotishni (farqni) kamaytirish algoritmiga ega bo'lishdir. Rasmda faqat bitta ob'ekt bo'lsa, bu juda yaxshi ishlaydi. Bir nechta ob'ektlar uchun biz boshqacha yondashuvni qo'llaymiz - biz tarmoqni qo'shamiz va har bir tarmoqdagi ob'ekt (lar) ning mavjudligini (yoki yo'qligini) bashorat qilamiz. Bu juda yaxshi eshitiladi, lekin baribir tarmoq uchun juda ko'p noaniqlik qoldiradi - bashoratni qanday chiqarish mumkin va bitta katakchali markazda bir nechta ob'ektlar bo'lsa nima qilish kerak? Biz yana bir cheklovni qo'shishimiz kerak - langarlar. Ankrajlar - bu boshlang'ich o'lchamlari (kengligi, balandligi), ularning ba'zilari (ob'ekt o'lchamiga eng yaqin) ob'ekt o'lchamiga o'zgartiriladi - neyron tarmoqdan ba'zi chiqishlar yordamida (yakuniy xususiyat xaritasi).

Shunday qilib, YOLO arxitektura neyron tarmog'ida tasvirda ob'ektni aniqlash amalga oshirilganda nima bo'layotgani haqida yuqori darajadagi ko'rinish. Xususiyatlarni ajratuvchi tarmoq tomonidan aniqlangan xususiyatlarga ko'ra, har bir panjara katakchasi uchun bashoratlar majmui tuziladi, ular langarlarning siljishi, langar ehtimoli va langar sinfini o'z ichiga oladi. Keyin biz past ehtimollik va voila bilan bashoratlarni bekor qilamiz!

2 -qadam: Atrof -muhitni tayyorlang

Atrof -muhitni tayyorlang
Atrof -muhitni tayyorlang

aXeleRate penny4860, SVHN yolo-v2 raqamli detektorining ajoyib loyihasiga asoslangan. aXeleRate Keras -dagi YOLO detektorining ushbu dasturini keyingi bosqichga ko'taradi va uning qulay konfiguratsiya tizimidan foydalanib, tasvirni aniqlash/ob'ektni aniqlash va tasvirni segmentatsiya qilish tarmoqlarini har xil orqa fonda o'tkazish uchun ishlatadi.

AXeleRate -dan foydalanishning ikkita usuli: Ubuntu -da yoki Google Colab -da mahalliy darajada ishlash. Google Colab -da ishlash uchun quyidagi misolni ko'rib chiqing:

PASCAL-VOC ob'ektlarni aniqlash Colab daftarchasi

O'zingizning modelingizni mahalliy darajada o'qitish va uni apparat tezlashtirishda ishlatish uchun eksport qilish ham ancha osonlashdi, men sizning loyihangizni boshqalardan ajratib turish va nizolarni oldini olish uchun Anaconda muhitiga barcha kerakli bog'liqliklarni o'rnatishingizni tavsiya qilaman.

O'rnatuvchini bu yerdan yuklab oling.

O'rnatish tugagandan so'ng, yangi muhit yarating:

yaratish -n yolo python = 3.7

Keling, yangi muhitni faollashtiraylik

yolo faollashtiring

Bosh qobig'ining oldidagi atrof -muhit nomi bilan prefiks paydo bo'ladi, bu siz hozir o'sha muhitda ishlayotganingizni ko'rsatadi.

AXeleRate -ni mahalliy mashinangizga o'rnating

pip o'rnatish git+https://github.com/AIWintermuteAI/aXeleRate

Va keyin o'qitish va xulosa chiqarish uchun kerak bo'ladigan skriptlarni yuklab olish uchun uni ishga tushiring:

git klon

AXeleRate papkasida test_training.py yordamida tezkor testlarni o'tkazishingiz mumkin. U har bir model turi uchun o'qitish va xulosa chiqaradi, o'qitilgan modellarni saqlaydi va o'zgartiradi. Bu faqat 5 davr uchun mashg'ulotlar va ma'lumotlar to'plami juda kichik bo'lgani uchun, siz foydali modellarni ololmaysiz, lekin bu skript faqat xatolar yo'qligini tekshirish uchun mo'ljallangan.

3 -qadam: Keras yordamida ob'ektlarni aniqlash modelini o'rgating

Keras yordamida ob'ektlarni aniqlash modelini o'rgating
Keras yordamida ob'ektlarni aniqlash modelini o'rgating

Endi biz konfiguratsiya fayli bilan o'quv skriptini ishga tushirishimiz mumkin. Keras YOLO ob'ekt detektorini amalga oshirish juda murakkab bo'lgani uchun, har bir tegishli kodni tushuntirish o'rniga, men sizga treningni qanday sozlashni tushuntirib beraman va tegishli modullarni tavsiflayman, agar siz ularni o'zingiz o'zgartirmoqchi bo'lsangiz.

O'yinchoq misolidan boshlaylik va rakun detektori o'rgatamiz. /Config papkasida raccoon_detector.json konfiguratsiya fayli mavjud. Biz MobileNet7_5 -ni arxitektura sifatida tanlaymiz (bu erda 7_5 - Mobilenet -ning asl dasturining alfa parametri, tarmoq kengligini boshqaradi) va kirish hajmi sifatida 224x224. Keling, konfiguratsiyadagi eng muhim parametrlarni ko'rib chiqaylik:

Tur - bu modelning old qismi - klassifikator, detektor yoki Segnet arxitekturasi - bu model orqa qismi (funksiya chiqaruvchi)

- To'liq Yolo - Tiny Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Langar haqida qo'shimcha ma'lumot olish uchun bu erni o'qing:

Yorliqlar - bu ma'lumotlar to'plamida mavjud bo'lgan belgilar. MUHIM: Ma'lumotlar bazasida mavjud bo'lgan barcha teglarni sanab o'ting.

object_scale ob'ekt prediktorlarining ishonchini noto'g'ri bashorat qilish uchun qancha jazo tayinlanishini belgilaydi

no_object_scale noaniq prediktorlarning ishonchini noto'g'ri bashorat qilish uchun qancha jazo tayinlanishini belgilaydi

coord_scale noto'g'ri pozitsiya va o'lchamdagi bashoratlarni qancha jazolash kerakligini aniqlaydi (x, y, w, h)

class_scale noto'g'ri sinf bashoratini qancha jazolash kerakligini aniqlaydi

augumentatsiya - bu tasvirni kattalashtirishning oldini olish va ma'lumotlar to'plamining xilma -xilligini oldini olish uchun tasvirni kattalashtirish, o'lchamini o'zgartirish, o'zgartirish va xiralashtirish.

train_times, validation_times - ma'lumotlar to'plamini necha marta takrorlash. Agar sizda kattalashtirish bo'lsa, foydali

yoqilgan

first_trainable_layer - agar siz oldindan o'rgatilgan tarmoqdan foydalanayotgan bo'lsangiz, ba'zi qatlamlarni muzlatish imkonini beradi

Endi biz Google Drive -da (asl ma'lumotlar to'plami) ulashgan ma'lumotlar to'plamini yuklab olishimiz kerak, bu 150 ta izohli rasmni o'z ichiga olgan rakunni aniqlash ma'lumotlar bazasi.

Tegishli ravishda konfiguratsiya faylidagi (train_image_folder, train_annot_folder) satrlarni o'zgartirganingizga ishonch hosil qiling va quyidagi buyruq bilan mashg'ulotni boshlang:

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

train.py.json faylidagi konfiguratsiyani o'qiydi va modelni axelerate/tarmoqlar/yolo/yolo_frontend.py skripti bilan o'rgatadi. yolo/backend/loss.py - bu maxsus yo'qotish funktsiyasi amalga oshiriladi va yolo/backend/network.py - bu model yaratiladigan joy (kirish, funksiya chiqaruvchi va aniqlash qatlamlari birlashtirilgan). axelerate/tarmoqlar/common_utils/fit.py - bu o'quv jarayonini amalga oshiruvchi skript va axelerate/tarmoqlar/common_utils/feature.py xususiyatlarini ajratuvchi vositalarni o'z ichiga oladi. Agar siz K210 chipi va Micropython dasturiy ta'minoti bilan o'qitilgan modelni ishlatmoqchi bo'lsangiz, xotira cheklanganligi sababli siz MobileNet (2_5, 5_0 va 7_5) va TinyYolo o'rtasida tanlov qilishingiz mumkin, lekin men aniqladimki, MobileNet aniqlik aniqligini beradi.

Bu o'yinchoq misoli va faqat 150 ta rakunning rasmlarini o'z ichiga olganligi sababli, mashg'ulot jarayoni juda tez bo'lishi kerak, hatto GPU bo'lmasa ham, aniqlik yulduzdan uzoq bo'ladi. Ish bilan bog'liq loyiha uchun men yo'l belgilari va raqamlar detektorini o'rgandim, ikkala ma'lumotlar to'plamida bir necha mingdan ortiq o'quv misollari mavjud.

4 -qadam:.kmodel formatiga aylantiring

Uni.kmodel formatiga aylantiring
Uni.kmodel formatiga aylantiring

AXeleRate yordamida modelni konvertatsiya qilish avtomatik tarzda amalga oshiriladi - bu, ehtimol, skriptlarning eski versiyasidan eng katta farq! Bundan tashqari, siz loyiha papkasida aniq saqlangan model fayllari va o'quv grafikini olasiz. Shuningdek, men aniqlik aniqligi ba'zida ob'ektni aniqlash uchun modelning haqiqiy ishlashiga baho bera olmasligini aniqladim va shuning uchun men xaritani ob'ektlarni aniqlash modellari uchun tasdiqlash metrikasi sifatida qo'shdim. MAP haqida ko'proq ma'lumotni bu erda o'qishingiz mumkin.

Agar xarita, o'rtacha o'rtacha aniqlik (bizning tekshirish metrikasi) 20 davr mobaynida yaxshilanmasa, mashg'ulotlar muddatidan oldin to'xtaydi. Har safar xaritani yaxshilashda model loyiha papkasida saqlanadi. Trening tugagandan so'ng, aXeleRate avtomatik ravishda eng yaxshi modelni belgilangan formatlarga o'tkazadi - siz hozircha "tflite", "k210" yoki "edgetpu" ni tanlashingiz mumkin.

Endi oxirgi bosqichga, aslida bizning modelimiz Sipeed apparatida ishlaydi!

5 -qadam: Micropython dasturiy ta'minotini ishga tushiring

Micropython dasturiy ta'minotini ishga tushiring
Micropython dasturiy ta'minotini ishga tushiring

C kodli ob'ektni aniqlash modeli bilan xulosa chiqarish mumkin, lekin qulaylik uchun biz Micropython firmware va MaixPy IDE dasturidan foydalanamiz.

MaixPy IDE -ni bu erdan va micropython dasturiy ta'minotini bu erdan yuklab oling. Siz dasturiy ta'minotni yoqish yoki alohida GUI flesh vositasini yuklab olish uchun kflash.py python skriptidan foydalanishingiz mumkin.

Model.kmodel -ni SD -kartaning ildiziga nusxalash va SD -kartani Sipeed Maix Bit -ga (yoki boshqa K210 qurilmasiga) joylashtiring. Shu bilan bir qatorda.kmodel -ni qurilmaning flesh xotirasiga yozib olishingiz mumkin. Mening namunali skript fleshkadan.kmodelni o'qiydi. Agar siz SD -kartadan foydalansangiz, ushbu qatorni o'zgartiring

vazifa = kpu.load (0x200000)

ga

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

MaixPy IDE -ni oching va ulanish tugmasini bosing. Example_scripts/k210/detector papkasidan raccoon_detector.py skriptini oching va Ishga tushirish tugmasini bosing. Siz kameradan to'g'ridan -to'g'ri translyatsiyani ko'rishingiz kerak, uning atrofida chekkalari bor. Ko'proq misollar keltirsangiz, siz modelning aniqligini oshirishingiz mumkin, lekin shuni yodda tutingki, bu kichik model (1,9 M) va kichik ob'ektlarni aniqlashda muammolarga duch keladi (past piksellar sonidan).

Oldingi tasvirni tanib olish haqidagi maqolamga izohlarda kelgan savollardan biri, UART/I2C orqali aniqlash natijalarini Sipeed ishlab chiqarish platalariga ulangan boshqa qurilmaga qanday yuborish. Mening github omborida siz raccoon_detector_uart.py boshqa skript namunasini topa olasiz, u (siz taxmin qilganingizdek) rakunlarni aniqlaydi va UART orqali chegara qutilarining koordinatalarini yuboradi. Shuni yodda tutingki, UART aloqasi uchun ishlatiladigan pinlar har xil taxtalardan farq qiladi, shuning uchun siz hujjatlarni tekshirishingiz kerak.

6 -qadam: Xulosa

Kendryte K210 - cheklangan xotira bo'lsa ham, kompyuterni ko'rish uchun mustahkam chip. Hozircha mening darsliklarimda biz uni moslashtirilgan ob'ektlarni tanib olish, moslamalarni aniqlash va OpenMV -ga asoslangan kompyuter ko'rish vazifalarini bajarish uchun ishlatganmiz. Men aniq bilaman, bu yuzni tanib olish uchun ham mos keladi va bir oz o'ylash bilan pozani aniqlash va tasvirni segmentatsiyalash mumkin (siz semantik segmentatsiya modelini o'rgatish uchun aXeleRate -dan foydalanishingiz mumkin, lekin men hali K210 bilan bog'liq xulosani amalga oshirmaganman).. AXeleRate ombori muammolarini ko'rib chiqing va o'z hissangizni qo'shishingiz mumkin bo'lgan ba'zi yaxshilanishlar bor deb hisoblasangiz, PR bilan shug'ullaning!

Mana, men bu o'quv qo'llanmani yozishda foydalangan ba'zi maqolalar, agar siz neyron tarmoqlar yordamida ob'ektlarni aniqlash haqida ko'proq bilmoqchi bo'lsangiz, qarang:

Cheklov qutisi ob'ekt detektorlari: YOLO ni tushunish, siz faqat bir marta qaraysiz

YOLO ni tushunish (ko'proq matematika)

YOLO ob'ektlarini lokalizatsiya qilish Keras bilan qanday ishlashi haqida nozik ko'rsatma (2 -qism)

YOLO, YOLOv2 va hozir YOLOv3 bilan real vaqtda ob'ektlarni aniqlash

Umid qilamizki, siz hozir olgan bilimlaringizdan foydalanib, mashinani ko'rish qobiliyatiga ega bo'lgan ajoyib loyihalarni qura olasiz! Siz bu erda Sipeed plitalarini sotib olishingiz mumkin, ular o'rnatilgan tizimlarda ML uchun eng arzon variantlardan biri.

Agar sizda savollar bo'lsa, meni LinkedIn -ga qo'shing va mening YouTube kanalimga obuna bo'ling, mashinasozlik va robototexnika bilan bog'liq qiziqarli loyihalar haqida xabardor bo'ling.

Tavsiya: