Obsah:

Rozpoznávání obrazu s deskami K210 a Arduino IDE/Micropython: 6 kroků (s obrázky)
Rozpoznávání obrazu s deskami K210 a Arduino IDE/Micropython: 6 kroků (s obrázky)

Video: Rozpoznávání obrazu s deskami K210 a Arduino IDE/Micropython: 6 kroků (s obrázky)

Video: Rozpoznávání obrazu s deskami K210 a Arduino IDE/Micropython: 6 kroků (s obrázky)
Video: Analýza obrazu - rozpoznávání obličejů 2024, Červen
Anonim
Image
Image

Už jsem napsal jeden článek o tom, jak spustit ukázky OpenMV na Sipeed Maix Bit a také jsem s touto deskou natočil video demo detekce objektů. Jednou z mnoha otázek, které si lidé pokládají, je - jak poznám objekt, na který neuronová síť není vycvičená? Jinými slovy, jak vytvořit vlastní klasifikátor obrázků a spustit jej s hardwarovou akcelerací.

To je pochopitelná otázka, protože u vašeho projektu pravděpodobně nemusíte rozpoznávat některé generické objekty, jako jsou kočky, psi a letadla. Chcete rozpoznat něco konkrétního, například plemeno psa pro automatické dveře pro domácí zvířata nebo druh rostliny pro třídění nebo jakékoli jiné aplikace, na které můžete myslet!

Mám tě! V tomto článku vás naučím, jak si vytvořit vlastní klasifikátor obrázků pomocí přenosového učení v Kerasu, převést natrénovaný model do formátu.kmodel a spustit jej na desce Sipeed (může být jakákoli deska, Bit/Dock nebo Go) pomocí Micropythonu nebo Arduino IDE. A pouze vaše představivost bude limitem úkolů, které s těmito znalostmi můžete dělat.

AKTUALIZACE KVĚTEN 2020: Když jsem viděl, jak jsou můj článek a video o rozpoznávání obrázků s deskami K210 stále velmi populární a mezi nejlepšími výsledky na YouTube a Google, rozhodl jsem se článek aktualizovat tak, aby obsahoval informace o aXeleRate, frameworku založeném na Kerasu pro AI na Edge vyvíjím.

aXeleRate v zásadě vychází ze sbírky skriptů, které jsem používal pro školení modelů rozpoznávání obrázků/detekce objektů - kombinované do jednoho rámce a optimalizované pro pracovní postup na Google Colab. Používání je pohodlnější a aktuálnější.

Starou verzi článku můžete stále vidět na webu steemit.com.

Krok 1: CNN a přenosové učení: Nějaká teorie

CNN a přenosové učení: Nějaká teorie
CNN a přenosové učení: Nějaká teorie

Konvoluční neurální sítě nebo CNN je třída hlubokých neuronových sítí, která se nejčastěji používá k analýze vizuálních snímků. Na internetu je k tomuto tématu spousta literatury a v poslední části článku dám pár odkazů. Stručně řečeno, CNN můžete považovat za řadu filtrů aplikovaných na obrázek, přičemž každý filtr hledá v obrázku konkrétní prvek - na nižších konvolučních vrstvách jsou rysy obvykle čáry a jednoduché tvary a na vyšších vrstvách funkce může být konkrétnější, např části těla, specifické textury, části zvířat nebo rostlin atd. Přítomnost určité sady funkcí nám může poskytnout vodítko k tomu, jaký by mohl být předmět na obrázku. Vousy, dvě oči a černý nos? Musí to být kočka! Zelené listy, kmen stromu? Vypadá jako strom!

Doufám, že teď máte představu o principu fungování CNN. Hluboká neuronová síť obvykle potřebuje tisíce obrázků a hodiny tréninkového času (závisí na hardwaru, který k tréninku používáte) k „vývoji“filtrů, které jsou užitečné pro rozpoznávání typů požadovaných objektů. Ale existuje zkratka.

Model vycvičený k rozpoznávání spousty různých běžných předmětů (kočky, psi, domácí spotřebiče, doprava atd.) Už má spoustu těch užitečných filtrů „vyvinutých“, takže nepotřebujeme, abychom se naučili rozpoznávat základní tvary a části předmětů znovu. Můžeme jen znovu vycvičit posledních několik vrstev sítě, abychom rozpoznali konkrétní třídy objektů, které jsou pro nás důležité. Říká se tomu „přenosové učení“. S přenosovým učením potřebujete podstatně méně tréninkových dat a výpočetního času, protože trénujete jen několik posledních vrstev sítě, složených možná z několika stovek neuronů.

Zní to úžasně, že? Podívejme se, jak jej implementovat.

Krok 2: Připravte si prostředí

Připravte si prostředí
Připravte si prostředí

To jsou dva způsoby, jak používat aXeleRate: běží lokálně na počítači Ubuntu nebo v Google Colab. Pro spuštění v Google Colab se podívejte na tento příklad:

Klasifikace obrázků Notebook Colab

Místní školení vašeho modelu a export jeho použití s hardwarovou akcelerací je nyní také mnohem jednodušší.

Moje pracovní prostředí je Ubuntu 16.04, 64bit. Ke spuštění obrazu Ubuntu můžete použít virtuální počítač, protože GPU nebudeme používat pro školení. S některými úpravami můžete také spustit tréninkový skript na Windows, ale pro převod modelu budete muset použít systém Linux. Preferovaným prostředím pro spuštění tohoto kurzu je Ubuntu 16.04, běžící nativně nebo na virtuálním počítači.

Začněme instalací Miniconda, což je správce prostředí pro Python. Vytvoříme izolované prostředí, takže ve vašem systémovém prostředí Pythonu nic nezměníme omylem.

Stáhněte si instalační program zde

Po dokončení instalace vytvořte nové prostředí:

conda create -n ml python = 3.7

Pojďme aktivovat nové prostředí

aktivujte ml

Před vaším bash shellem se zobrazí předpona s názvem prostředí, což znamená, že v tomto prostředí nyní pracujete.

Krok 3: Nainstalujte si AXeleRate a spusťte testy

Nainstalujte si AXeleRate a spusťte testy
Nainstalujte si AXeleRate a spusťte testy

Nainstalujte si aXeleRate na svůj lokální počítač pomocí

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

Chcete -li stáhnout příklady, spusťte:

klon git

Rychlé testy můžete spustit s testy_training.py ve složce aXeleRate. Bude spouštět školení a odvozování pro každý typ modelu, ukládat a převádět natrénované modely. Protože se jedná pouze o školení pro 5 epoch a datová sada je velmi malá, nebudete moci získat užitečné modely, ale tento skript je určen pouze pro kontrolu absence chyb.

Krok 4: Znovu trénujte model, převeďte model Keras na.kmodel

Znovu vycvičte model, převeďte model Keras na.kmodel
Znovu vycvičte model, převeďte model Keras na.kmodel

Pro tento příklad hračky budeme trénovat model, aby rozpoznal Santa Clause a Arduino Uno. Očividně si můžete vybrat jiné třídy. Stáhněte si datovou sadu odtud. Vytvořte kopii souboru classifier.json ve složce config a poté ji odpovídajícím způsobem změňte, podobně jako konfigurační soubor na snímku obrazovky - ujistěte se, že cesta ke složkám pro školení a ověřování je správná!

Ze složky aXeleRate spusťte následující příkaz:

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

Začne školení. Pokud se přesnost ověření (naše validační metrika) nezlepší po dobu 20 epoch, trénink se předčasně zastaví. Pokaždé, když se přesnost ověření zlepší, model se uloží do složky projektu. Po skončení tréninku aXeleRate automaticky převede nejlepší model na určené formáty - nyní si můžete vybrat „tflite“, „k210“nebo „edgetpu“.

Krok 5: Spusťte model na Sipeed Maix Bit

Spusťte model na Sipeed Maix Bit
Spusťte model na Sipeed Maix Bit
Spusťte model na Sipeed Maix Bit
Spusťte model na Sipeed Maix Bit
Spusťte model na Sipeed Maix Bit
Spusťte model na Sipeed Maix Bit

Existují dva způsoby, jak spustit model, který nyní máte, na hardwaru Sipeed Maix: firmware mikropythonu a Arduino IDE. Mikropythonový hardware se používá snadněji, ale zabírá významnou část dostupné paměti, takže pro model zbývá méně místa. Arduino IDE je v podstatě C kód, který je mnohem efektivnější a má menší paměťovou stopu. Můj model má pouze 1,9 Mb, takže obě možnosti fungují. S Micropythonem můžete použít modely o velikosti až 2,9 Mb, pro cokoli většího musíte zvážit použití Arduino IDE.

Stáhněte si OpenMV IDE odtud a minimální firmware mikropythonu odtud.

Firmware vypalte pomocí nástroje kflash_gui. Můžete se také rozhodnout vypálit trénovaný model na flash, jak ukazuje obrázek. Nebo jej zkopírujte na kartu SD (v takovém případě zkopírujte.kmodel do kořenového adresáře karty SD a vložte kartu SD do bitů Sipeed Maix Bit)

Otevřete OpenMV IDE a stiskněte tlačítko připojit. Otevřete skript santa_uno.py ze složky example_scripts a stiskněte tlačítko Start. Měli byste sledovat živý přenos z kamery a pokud otevřete sériový terminál, získáte nejlepší výsledek rozpoznávání obrazu se skóre spolehlivosti!

Pro použití s Arduino IDE musíte nejprve dodržet postup pro přidání desek Sipeed do Arduino IDE, který je zdokumentován zde. Vaše verze Arduino IDE musí být alespoň 1.8.12. Poté, co přidáte desky, otevřete skicu mobilenet_v1_transfer_learning.ino a nahrajte ji na Sipeed Maix Bit. Změňte název modelu na kartě SD na „model“(nebo vytvořte kopii s tímto názvem). Názvy popisků můžete změnit v names.cpp. Zobrazí živý kamerový stream na obrazovce Sipeed Maix spolu s nejlepším výsledkem rozpoznávání obrazu.

Krok 6: Závěry

Zde je několik dalších materiálů, které si můžete přečíst na téma CNN a přenosové učení:

Přenosové učení pomocí Mobilenet a Keras Skvělý výklad k přenosovému učení, tento tutoriál používá upravenou verzi kódu z tohoto článku.

Kočky a psi a konvoluční neurální sítě Vysvětluje základy CNN a vizualizuje některé filtry. S kočkami!

Trénujte, převádějte, provozujte MobileNet na Sipeed MaixPy a MaixDuino! Výukový program týmu Sipeed o tom, jak trénovat třídy Mobilenet 1000 od nuly (žádné přenosové učení). Můžete si stáhnout jejich předem natrénovaný model a vyzkoušet ho!

Doufám, že znalosti, které nyní máte, můžete použít k vybudování úžasných projektů se strojovým viděním! Desky Sipeed můžete koupit zde, patří mezi nejlevnější možnosti dostupné pro ML na vestavěných systémech.

Doporučuje: