Obsah:

Rozpoznávanie obrazu s doskami K210 a Arduino IDE/Micropython: 6 krokov (s obrázkami)
Rozpoznávanie obrazu s doskami K210 a Arduino IDE/Micropython: 6 krokov (s obrázkami)

Video: Rozpoznávanie obrazu s doskami K210 a Arduino IDE/Micropython: 6 krokov (s obrázkami)

Video: Rozpoznávanie obrazu s doskami K210 a Arduino IDE/Micropython: 6 krokov (s obrázkami)
Video: Торцовочная пила с протяжкой Ресанта ТП-210ПЛ – идеальный выбор для профессионалов и новичков 2024, November
Anonim
Image
Image

Už som napísal jeden článok o tom, ako prevádzať ukážky OpenMV na Sipeed Maix Bit, a tiež som s touto doskou natočil video s ukážkou detekcie objektov. Jednou z mnohých otázok, ktoré si ľudia kladú, je - ako rozoznám objekt, na ktorý neurónová sieť nie je trénovaná? Inými slovami, ako si vytvoriť vlastný klasifikátor obrázkov a spustiť ho s hardvérovou akceleráciou.

Je to pochopiteľná otázka, pretože pre váš projekt pravdepodobne nemusíte rozpoznávať niektoré generické objekty, ako sú mačky, psy a lietadlá. Chcete rozpoznať niečo konkrétne, napríklad plemeno psa pre automatické dvere pre domáce zvieratá alebo druh rastliny na triedenie alebo akékoľvek iné ukončujúce aplikácie, o ktorých môžete premýšľať!

Mám ťa! V tomto článku vás naučím, ako si vytvoriť vlastný klasifikátor obrázkov s prenosovým učením v Kerase, previesť natrénovaný model do formátu.kmodel a spustiť ho na doske Sipeed (môže to byť akákoľvek doska, Bit/Dock alebo Go) pomocou programu Micropython alebo Arduino IDE. A iba vaša predstavivosť bude limitom pre úlohy, ktoré môžete s týmito znalosťami vykonávať.

AKTUALIZÁCIA MÁJ 2020: Keď som videl, ako sú môj článok a video o rozpoznávaní obrázkov s doskami K210 stále veľmi obľúbené a patrí medzi najlepšie výsledky na serveroch 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: CNN a transferové vzdelávanie: Niektoré teórie

CNN a transferové vzdelávanie: Niektoré teórie
CNN a transferové vzdelávanie: Niektoré teórie

Konvolučné neurónové siete alebo CNN sú triedou hlbokých neurónových sietí, ktoré sa najčastejšie používajú na analýzu vizuálnych obrazov. Na internete je k tejto téme veľa literatúry a v poslednej časti článku dám niekoľko odkazov. Stručne povedané, CNN si môžete predstaviť ako sériu filtrov aplikovaných na obrázok, pričom každý filter hľadá v obrázku konkrétnu vlastnosť - na nižších konvolučných vrstvách sú črtami spravidla čiary a jednoduché tvary a na vyšších vrstvách sú funkcie môžu byť konkrétnejšie, napr časti tela, špecifické textúry, časti zvierat alebo rastlín atď. Prítomnosť určitého súboru funkcií nám môže poskytnúť vodítko k tomu, aký by mohol byť predmet na obrázku. Fúzy, dve oči a čierny nos? Musí to byť mačka! Zelené listy, kmeň stromu? Vyzerá ako strom!

Dúfam, že teraz získate predstavu o fungujúcom princípe CNN. Hlboká neurónová sieť bežne potrebuje tisíce obrázkov a hodiny školenia (závisí od hardvéru, ktorý na školenie používate) na „vývoj“filtrov, ktoré sú užitočné na rozpoznanie typov požadovaných objektov. Existuje však skratka.

Model vycvičený na rozpoznávanie mnohých rôznych bežných predmetov (mačky, psy, domáce spotrebiče, doprava atď.) Už mnoho „užitočných filtrov“vyvinul, takže ho nepotrebujeme, aby sme sa naučili rozpoznávať základné tvary a súčasti. predmetov znova. Môžeme len znova vycvičiť posledných niekoľko vrstiev siete, aby rozpoznali konkrétne triedy objektov, ktoré sú pre nás dôležité. Hovorí sa tomu „prenosové učenie“. Na prenosové učenie potrebujete podstatne menej tréningových dát a výpočtového času, pretože trénujete iba niekoľko posledných vrstiev siete, zloženej možno z niekoľkých stoviek neurónov.

Znie to úžasne, však? Pozrime sa, ako ho implementovať.

Krok 2: Pripravte si prostredie

Pripravte si prostredie
Pripravte si prostredie

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:

Zaradenie obrázku Colab Notebook

Teraz je oveľa jednoduchšie školiť model lokálne a exportovať ho, aby sa používal s hardvérovou akceleráciou.

Moje pracovné prostredie je Ubuntu 16.04, 64bit. Na spustenie obrazu Ubuntu môžete použiť virtuálny počítač, pretože na školenie nebudeme používať GPU. S určitými úpravami môžete školiaci skript spustiť aj v systéme Windows, ale na konverziu modelu budete potrebovať systém Linux. Na spustenie tohto tutoriálu je teda vhodnejšie prostredie Ubuntu 16.04, ktoré beží natívne alebo na virtuálnom počítači.

Začnime inštaláciou Miniconda, čo je správca prostredia pre Python. Vytvoríme izolované prostredie, takže vo vašom systémovom prostredí Pythonu nič nezmeníme omylom.

Stiahnite si inštalátor tu

Po dokončení inštalácie vytvorte nové prostredie:

conda create -n ml python = 3.7

Aktivujme nové prostredie

aktivujte ml

Pred vašim bash shellom sa zobrazí predpona s názvom prostredia, ktorá naznačuje, že v tomto prostredí teraz pracujete.

Krok 3: Nainštalujte AXeleRate a spustite testy

Nainštalujte AXeleRate a spustite testy
Nainštalujte AXeleRate a spustite testy

Nainštalujte si aXeleRate na svoj lokálny počítač pomocou

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

Ak chcete stiahnuť príklady, spustite:

git klon

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 4: Znovu vycvičte model, konvertujte model Keras na.kmodel

Znovu vycvičte model, konvertujte model Keras na.kmodel
Znovu vycvičte model, konvertujte model Keras na.kmodel

V tomto prípade hračky budeme trénovať model, aby rozpoznal Santa Clausa a Arduino Uno. Očividne si môžete vybrať iné triedy. Odtiaľto si stiahnite súbor údajov. Vytvorte kópiu súboru classifier.json v konfiguračnom priečinku a potom ho zodpovedajúcim spôsobom zmeňte, podobne ako v konfiguračnom súbore na snímke obrazovky - uistite sa, že cesta k priečinkom na školenia a overovanie je správna!

Spustite nasledujúci príkaz z priečinka aXeleRate:

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

Začne sa školenie. Ak sa presnosť validácie (naša validačná metrika) nezlepší po dobu 20 epoch, tréning sa predčasne zastaví. Zakaždým, keď sa zvýši presnosť validácie, 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“.

Krok 5: Spustite model na Sipeed Maix Bit

Spustite model na Sipeed Maix Bit
Spustite model na Sipeed Maix Bit
Spustite model na Sipeed Maix Bit
Spustite model na Sipeed Maix Bit
Spustite model na Sipeed Maix Bit
Spustite model na Sipeed Maix Bit

Existujú dva spôsoby, ako spustiť model, ktorý teraz máte, na hardvéri Sipeed Maix: mikropythonový firmvér a Arduino IDE. Mikropythonový hardvér sa používa jednoduchšie, ale zaberá značnú časť dostupnej pamäte, takže na model zostáva menej miesta. Arduino IDE je v podstate C kód, ktorý je oveľa efektívnejší a má menšiu pamäťovú stopu. Môj model má iba 1,9 Mb, takže obe možnosti fungujú. S Micropythonom môžete používať modely až 2,9 Mb, pre čokoľvek väčšie musíte zvážiť použitie Arduino IDE.

Odtiaľ si stiahnite OpenMV IDE a odtiaľ minimálny firmvér mikropythonu.

Vypálte firmvér pomocou nástroja kflash_gui. Môžete sa tiež rozhodnúť vypáliť trénovaný model tak, aby blikal, ako je to znázornené na obrázku. Alebo ho skopírujte na kartu SD (v takom prípade skopírujte.kmodel do koreňa karty SD a vložte kartu SD do súboru Sipeed Maix Bit)

Otvorte OpenMV IDE a stlačte tlačidlo pripojenia. Otvorte skript santa_uno.py z priečinka example_scripts a stlačte tlačidlo Štart. Mali by ste sledovať priamy prenos z kamery a ak otvoríte sériový terminál, získate najlepšie výsledky rozpoznávania obrazu so skóre spoľahlivosti!

Na použitie s Arduino IDE musíte najskôr dodržať postup pridávania dosiek Sipeed do Arduino IDE, ktorý je popísaný tu. Vaša verzia Arduino IDE musí byť aspoň 1.8.12. Po pridaní panelov otvorte skicu mobilenet_v1_transfer_learning.ino a nahrajte ju na server Sipeed Maix Bit. Zmeňte názov modelu na karte SD na „model“(alebo vytvorte kópiu s týmto názvom). Názvy štítkov môžete zmeniť v names.cpp. Zobrazí živý stream z kamery na obrazovke Sipeed Maix spolu s najlepším výsledkom rozpoznávania obrazu.

Krok 6: Závery

Tu je niekoľko ďalších materiálov, ktoré si môžete prečítať na tému CNN a transferového vzdelávania:

Prenosové učenie pomocou Mobilenet a Keras Tento tutoriál je skvelým vysvetlením prenosového učenia a používa upravenú verziu kódu z tohto článku.

Mačky a psy a konvolučné neurónové siete Vysvetľuje základy CNN a vizualizuje niektoré filtre. S mačkami!

Trénujte, prevádzajte a prevádzkujte MobileNet na serveroch Sipeed MaixPy a MaixDuino! Tutoriál od tímu Sipeed o tom, ako od začiatku trénovať triedy Mobilenet 1000 (bez prenosu). Môžete si stiahnuť ich vopred vycvičený model a vyskúšať to!

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.

Odporúča: