Obsah:
- Krok 1: Vysvetlená architektúra modelu detekcie objektov
- Krok 2: Pripravte prostredie
- Krok 3: Vycvičte model detekcie objektov pomocou KERAS
- Krok 4: Preveďte ho na formát.kmodel
- Krok 5: Spustite firmvér Micropython
- Krok 6: Zhrnutie
Video: Detekcia objektov pomocou dosiek Sipeed MaiX (Kendryte K210): 6 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Ako pokračovanie môjho predchádzajúceho článku o rozpoznávaní obrázkov pomocou dosiek Sipeed MaiX Boards som sa rozhodol napísať ďalší návod zameraný na detekciu objektov. V poslednej dobe sa s čipom Kendryte K210 objavil nejaký zaujímavý hardvér, vrátane Seeed AI Hat pre Edge Computing, M5Stick M5StickV a DFRobot's HuskyLens (aj keď ten má proprietárny firmvér a je cielenejší pre úplných začiatočníkov). Vďaka svojej nízkej cene oslovil Kendryte K210 ľudí, ktorí chcú do svojich projektov pridať počítačové videnie. Ale ako to už pri čínskych hardvéroch býva, technická podpora chýba a to sa snažím zlepšiť svojimi článkami a videami. Majte však na pamäti, že nie som v tíme vývojárov Kendryte alebo Sipeed a nemôžem odpovedať na všetky otázky súvisiace s ich produktom.
S ohľadom na to začnime! Začneme krátkym (a zjednodušeným) prehľadom fungovania modelov CNN na rozpoznávanie objektov.
AKTUALIZÁCIA MÁJ 2020: Vzhľadom na to, že môj článok a video o detekcii objektov s doskami K210 sú stále veľmi obľúbené a patria medzi najlepšie výsledky na stránkach YouTube a Google, rozhodol som sa článok aktualizovať tak, aby obsahoval informácie o aXeleRate, rámci založenom na Kerase pre AI na Edge vyvíjam. aXeleRate v zásade vychádza zo zbierky skriptov, ktoré som použil na školenie modelov rozpoznávania obrázkov/detekcie objektov - kombinované do jedného rámca a optimalizované pre pracovný tok v službe Google Colab. Je to pohodlnejšie na používanie a aktuálnejšie.
Starú verziu článku môžete stále vidieť na steemit.com.
Krok 1: Vysvetlená architektúra modelu detekcie objektov
Modely rozpoznávania obrazu (alebo klasifikácie obrázkov) berú celý obrázok ako vstup a vydávajú zoznam pravdepodobností pre každú triedu, ktorú sa pokúšame rozpoznať. Je to veľmi užitočné, ak objekt, ktorý nás zaujíma, zaberá veľkú časť obrazu a jeho umiestnenie nás veľmi nezaujíma. Ale čo keď náš projekt (povedzme, kamera na sledovanie tváre) vyžaduje, aby sme mali nielen znalosti o type objektu na obrázku, ale aj jeho súradnice. A čo projekt vyžadujúci detekciu viacerých objektov (napríklad na počítanie)?
Tu je obdobie, keď sa modely detekcie objektov hodia. V tomto článku použijeme architektúru YOLO (pozriete sa iba raz) a zameriame vysvetlenie na vnútornú mechaniku tejto konkrétnej architektúry.
Pokúšame sa zistiť, ktoré objekty sú na obrázku a aké sú ich súradnice. Pretože strojové učenie nie je mágia a nie je to "stroj na myslenie", je to iba algoritmus, ktorý pomocou štatistík optimalizuje funkciu (neurónovú sieť) na lepšie vyriešenie konkrétneho problému. Tento problém musíme parafrázovať, aby bol viac „optimalizovateľný“. Naivný prístup by bol algoritmus minimalizujúci stratu (rozdiel) medzi jeho predikciou a správnymi súradnicami objektu. To by fungovalo celkom dobre, pokiaľ máme na obrázku iba jeden objekt. Pri viacerých objektoch používame odlišný prístup - pridáme mriežku a prinútime našu sieť predpovedať prítomnosť (alebo neprítomnosť) objektu (objektov) v každej mriežke. Znie to skvele, ale stále to v sieti zanecháva príliš veľa neistoty - ako vytvoriť predikciu a čo robiť, keď je v jednej bunke mriežky viac objektov so stredom? Musíme pridať ešte jedno obmedzenie - takzvané kotvy. Kotvy sú počiatočné veľkosti (šírka, výška), z ktorých niektoré (najbližšie k veľkosti objektu) budú zmenené na veľkosť objektu - pomocou niektorých výstupov z neurónovej siete (konečná mapa funkcií).
Tu je teda pohľad na najvyššiu úroveň toho, čo sa deje, keď neurónová sieť architektúry YOLO vykonáva detekciu objektu na obrázku. Podľa vlastností zistených sieťou extraktorov funkcií je pre každú bunku mriežky vytvorená sada predpovedí, ktorá obsahuje posunutie kotiev, pravdepodobnosť ukotvenia a triedu kotvy. Potom zahodíme predpovede s nízkou pravdepodobnosťou a voilá!
Krok 2: Pripravte prostredie
aXeleRate je založený na nádhernom projekte penny4860, SVHN yolo-v2 digitálneho detektora. aXeleRate posúva túto implementáciu detektora YOLO v Kerase na ďalšiu úroveň a pomocou svojho pohodlného konfiguračného systému vykonáva školenia a konverziu sietí na rozpoznávanie obrazu/detekciu objektov a segmentáciu obrazu s rôznymi koncovými systémami.
To sú dva spôsoby, ako používať aXeleRate: lokálne spustenie na počítači Ubuntu alebo v službe Google Colab. Ak chcete bežať v službe Google Colab, pozrite sa na tento príklad:
Notebook Colab s detekciou objektov PASCAL-VOC
Teraz je oveľa jednoduchšie teraz školiť svoj model lokálne a exportovať ho na použitie s hardvérovou akceleráciou. Vrelo odporúčam nainštalovať všetky potrebné závislosti do prostredia Anaconda, aby bol váš projekt oddelený od ostatných a aby sa zabránilo konfliktom.
Stiahnite si inštalátor tu.
Po dokončení inštalácie vytvorte nové prostredie:
conda create -n yolo python = 3.7
Aktivujme nové prostredie
aktivujte yolo
Pred vašim bash shellom sa zobrazí predpona s názvom prostredia, ktorá naznačuje, že v tomto prostredí teraz pracujete.
Nainštalujte si aXeleRate na svoj lokálny počítač pomocou
pip install git+https://github.com/AIWintermuteAI/aXeleRate
A potom spustite toto a stiahnite si skripty, ktoré budete potrebovať na školenie a odvodenie:
klon git
Rýchle testy môžete vykonať pomocou testov_training.py v priečinku aXeleRate. Bude prebiehať školenie a vyvodzovanie záverov pre každý typ modelu, ukladať a prevádzať natrénované modely. Pretože ide iba o školenie na 5 epoch a množina údajov je veľmi malá, nebudete môcť získať užitočné modely, ale tento skript je určený iba na kontrolu absencie chýb.
Krok 3: Vycvičte model detekcie objektov pomocou KERAS
Teraz môžeme spustiť školiaci skript s konfiguračným súborom. Pretože implementácia detektora YOLO objektu Keras je dosť komplikovaná, namiesto vysvetľovania každého relevantného kódu vám vysvetlím, ako nakonfigurovať školenie a popíšem aj relevantné moduly v prípade, že v nich chcete sami vykonať určité zmeny.
Začnime s príkladom hračky a vycvičme si detektora racoona. V priečinku /config je raccoon_detector.json. Ako architektúru sme vybrali MobileNet7_5 (kde 7_5 je alfa parameter pôvodnej implementácie Mobilenet, ktorý riadi šírku siete) a ako vstupnú veľkosť 224 x 224. Pozrime sa na najdôležitejšie parametre v konfigurácii:
Typ je frontend modelu - klasifikátor, detektor alebo SegnetArchitecture je modelové rozhranie (extraktor funkcií)
- Full Yolo - Tiny Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50
Viac informácií o kotvách nájdete tu
Štítky sú štítky prítomné vo vašej množine údajov. DÔLEŽITÉ: Uveďte prosím zoznam všetkých štítkov nachádzajúcich sa v množine údajov.
object_scale určuje, ako veľmi má byť penalizovaná nesprávna predikcia dôvery objektových prediktorov
no_object_scale určuje, ako veľmi má byť penalizovaná nesprávna predikcia dôvery neobjektových prediktorov
coord_scale určuje, koľko sa má penalizovať za predpovede nesprávnej polohy a veľkosti (x, y, w, h)
class_scale určuje, koľko sa má penalizovať za nesprávnu predikciu triedy
augumentation - augumentácia obrazu, zmena veľkosti, posunutie a rozmazanie obrazu, aby sa zabránilo preplneniu a mala väčšia rozmanitosť v množine údajov.
train_times, validation_times - koľkokrát sa má súbor údajov opakovať. Užitočné, ak máte dokumentáciu
povolené
first_trainable_layer - umožňuje zmraziť určité vrstvy, ak používate vopred trénovanú sieť funkcií
Teraz musíme stiahnuť súbor údajov, ktorý som zdieľal na svojom Disku Google (pôvodný súbor údajov), čo je súbor údajov o detekcii racoon, obsahujúci 150 komentovaných obrázkov.
Nezabudnite zodpovedajúcim spôsobom zmeniť riadky v konfiguračnom súbore (train_image_folder, train_annot_folder) a potom spustite školenie pomocou nasledujúceho príkazu:
python axelerate/train.py -c configs/raccoon_detector.json
train.py načíta konfiguráciu zo súboru.json a natrénuje model pomocou skriptu axelerate/networks/yolo/yolo_frontend.py. yolo/backend/loss.py je miesto, kde je implementovaná vlastná funkcia straty, a yolo/backend/network.py je miesto, kde je vytvorený model (vstupné vrstvy, extraktor funkcií a detekčné vrstvy dohromady). axelerate/networks/common_utils/fit.py je skript, ktorý implementuje tréningový proces, a axelerate/networks/common_utils/feature.py obsahuje extraktory funkcií. Ak máte v úmysle použiť trénovaný model s čipom K210 a firmvérom Micropython, kvôli obmedzeniu pamäte si môžete vybrať medzi MobileNet (2_5, 5_0 a 7_5) a TinyYolo, ale zistil som, že MobileNet poskytuje lepšiu presnosť detekcie.
Pretože ide o hračkový príklad a obsahuje iba 150 obrázkov mývalov, tréningový proces by mal byť dosť rýchly, dokonca aj bez GPU, aj keď presnosť bude ďaleko od hviezdnych. V rámci pracovného projektu som vycvičil detektor dopravných značiek a detektor čísel, oba súbory údajov obsahovali viac ako niekoľko tisíc príkladov školenia.
Krok 4: Preveďte ho na formát.kmodel
Pri aXeleRate sa konverzia modelu vykonáva automaticky - to je pravdepodobne najväčší rozdiel od starej verzie školiacich skriptov! Navyše získate modelové súbory a tréningový graf úhľadne uložené v priečinku projektu. Tiež som zistil, že presnosť vaiidácie niekedy nedokáže poskytnúť odhad skutočnej výkonnosti modelu na detekciu objektov, a preto som pridal mAP ako validačnú metriku pre modely detekcie objektov. Viac o mAP si môžete prečítať tu.
Ak sa mAP, priemerná priemerná presnosť (naša validačná metrika) nezlepší po dobu 20 epoch, tréning sa predčasne zastaví. Zakaždým, keď sa mAP zlepší, model sa uloží do priečinka projektu. Po skončení školenia aXeleRate automaticky prevádza najlepší model do určených formátov - odteraz si môžete vybrať „tflite“, „k210“alebo „edgetpu“.
Teraz k poslednému kroku, v ktorom je náš model skutočne spustený na hardvéri Sipeed!
Krok 5: Spustite firmvér Micropython
Inferenciu je možné spustiť pomocou nášho modelu detekcie objektov s kódom C, ale kvôli pohodliu použijeme namiesto toho firmvér Micropython a MaixPy IDE.
Odtiaľto si stiahnite MaixPy IDE a odtiaľ firmware mikropythonu. Tu môžete použiť skript python kflash.py na napálenie firmvéru alebo si stiahnuť samostatný flash nástroj GUI.
Skopírujte model.kmodel do koreňa karty SD a vložte kartu SD do Sipeed Maix Bit (alebo iného zariadenia K210). Alternatívne môžete.kmodel napáliť do pamäte flash zariadenia. Môj príklad skriptu číta.kmodel z pamäte flash. Ak používate kartu SD, zmeňte tento riadok
task = kpu.load (0x200000)
do
task = kpu.load ("/sd/model.kmodel")
Otvorte MaixPy IDE a stlačte tlačidlo pripojenia. Otvorte skript raccoon_detector.py z priečinka example_scripts/k210/detector a stlačte tlačidlo Štart. Mali by ste vidieť živý prenos z kamery s ohraničujúcimi rámčekmi okolo … no, mývali. Presnosť modelu môžete zvýšiť poskytnutím ďalších príkladov školenia, ale majte na pamäti, že je to rozprávkový malý model (1,9 M) a bude mať problémy s detekciou malých predmetov (kvôli nízkemu rozlíšeniu).
Jednou z otázok, ktoré som dostal v komentároch k svojmu predchádzajúcemu článku o rozpoznávaní obrázkov, je, ako odoslať výsledky detekcie cez UART/I2C na iné zariadenie pripojené k vývojovým doskám Sipeed. V mojom úložisku github nájdete ďalší ukážkový skript raccoon_detector_uart.py, ktorý (uhádli ste) detekuje mývaly a odošle súradnice ohraničujúcich políčok cez UART. Majte na pamäti, že piny používané na komunikáciu UART sú rôzne dosky, na to sa musíte v dokumentácii skontrolovať.
Krok 6: Zhrnutie
Kendryte K210 je solídny čip pre počítačové videnie, flexibilný, aj keď s obmedzenou pamäťou. V mojich tutoriáloch sme sa doposiaľ zaoberali jeho používaním na rozpoznávanie vlastných objektov, detekciu vlastných objektov a spúšťanie niektorých úloh počítačového videnia založených na OpenMV. S určitosťou viem, že je vhodný aj na rozpoznávanie tvárí a s istým drobotvorením by malo byť možné vykonať detekciu pózy a segmentáciu obrazu (aXeleRate môžete použiť na natrénovanie sémantického segmentačného modelu, ale ja som ešte nezaviedol záver s K210). Neváhajte sa pozrieť na problémy s úložiskom aXeleRate a urobte si PR, ak si myslíte, že existujú nejaké vylepšenia, ktorými môžete prispieť!
Tu je niekoľko článkov, ktoré som použil pri písaní tohto tutoriálu. Pozrite sa, ak sa chcete dozvedieť viac o detekcii objektov v neurónových sieťach:
Detektory objektov ohraničujúceho boxu: pochopíte YOLO, pozriete sa iba raz
Pochopenie YOLO (viac matematiky)
Jemný sprievodca o tom, ako lokalizácia objektov YOLO funguje s KERAS (časť 2)
Detekcia objektov v reálnom čase s YOLO, YOLOv2 a teraz YOLOv3
Dúfam, že znalosti, ktoré máte teraz, môžete využiť na stavbu úžasných projektov so strojovým videním! Dosky Sipeed si môžete kúpiť tu, patria medzi najlacnejšie možnosti dostupné pre ML na vstavaných systémoch.
V prípade akýchkoľvek otázok si ma pridajte na LinkedIn a prihláste sa na odber môjho kanála YouTube, aby ste boli informovaní o zaujímavejších projektoch zahŕňajúcich strojové učenie a robotiku.
Odporúča:
Počítadlo objektov pomocou IR: 9 krokov (s obrázkami)
Počítadlo objektov pomocou IR: V tomto malom projekte vytvoríme úplne automatické počítadlo objektov s jednoduchým segmentovým zobrazením. Tento projekt je pomerne jednoduchý a obsahuje iba jednoduchú elektroniku. Tento obvod je založený na infračervenom žiarení na detekciu predmetov a zistenie ďalších
Detekcia objektov pomocou Dragonboard 410c alebo 820c pomocou OpenCV a Tensorflow .: 4 kroky
Object Detection W/ Dragonboard 410c or 820c using OpenCV and Tensorflow .: This instructables popisuje how to install OpenCV, Tensorflow, and machine learning frameworks for Python 3.5 to run the Object Detection
Tlač vlastných obvodových dosiek pomocou 3D tlačiarne: 7 krokov (s obrázkami)
Tlač vlastných obvodových dosiek pomocou 3D tlačiarne: Ak 3D tlačiareň nevidíte prvýkrát, pravdepodobne ste už počuli niekoho hovoriť takto: 1) Kúpte si 3D tlačiareň 2) Vytlačte inú 3D tlačiareň 3) Vráťte originál 3D printer4) ???????? 5) ProfitNow someone w
FoldTronics: Vytváranie 3D objektov pomocou integrovanej elektroniky pomocou skladacích štruktúr HoneyComb: 11 krokov
FoldTronics: Vytváranie 3D objektov s integrovanou elektronikou pomocou skladacích štruktúr HoneyComb: V tomto tutoriáli predstavujeme FoldTronics, výrobnú techniku založenú na 2D rezaní na integráciu elektroniky do 3D skladaných predmetov. Kľúčovou myšlienkou je rezať a perforovať 2D list pomocou rezacieho plotra, aby bol skladací do 3D plástovej štruktúry
Spojenie dvoch dosiek OOB dohromady pomocou I2C: 4 kroky
Spojenie dvoch kariet OOB dohromady pomocou I2C: Tento návod popisuje, ako prepojiť dve karty OOB pomocou karty I2C