Spisu treści:

Rozpoznawanie obrazu z płytami K210 i Arduino IDE/Micropython: 6 kroków (ze zdjęciami)
Rozpoznawanie obrazu z płytami K210 i Arduino IDE/Micropython: 6 kroków (ze zdjęciami)

Wideo: Rozpoznawanie obrazu z płytami K210 i Arduino IDE/Micropython: 6 kroków (ze zdjęciami)

Wideo: Rozpoznawanie obrazu z płytami K210 i Arduino IDE/Micropython: 6 kroków (ze zdjęciami)
Wideo: #8 Jak komputery widzą świat - jak działa rozpoznawanie obrazów? 2024, Listopad
Anonim
Image
Image

Napisałem już jeden artykuł o tym, jak uruchomić dema OpenMV na Sipeed Maix Bit, a także nagrałem wideo demonstracyjne wykrywania obiektów za pomocą tej płyty. Jedno z wielu pytań, które ludzie zadawali, brzmi: jak rozpoznać obiekt, do którego sieć neuronowa nie jest wytrenowana? Innymi słowy, jak stworzyć własny klasyfikator obrazu i uruchomić go z akceleracją sprzętową.

To zrozumiałe pytanie, ponieważ w swoim projekcie prawdopodobnie nie musisz rozpoznawać niektórych ogólnych obiektów, takich jak koty, psy i samoloty. Chcesz rozpoznać coś konkretnego, na przykład rasę psa do automatycznych drzwiczek dla zwierząt, gatunek rośliny do sortowania lub inne ciekawe aplikacje, o których możesz pomyśleć!

Mam cię! W tym artykule nauczę Cię, jak stworzyć własny, niestandardowy klasyfikator obrazu z uczeniem transferu w Keras, przekonwertować wytrenowany model do formatu.kmodel i uruchomić go na tablicy Sipeed (może to być dowolna tablica, Bit/Dock lub Go) za pomocą Micropythona lub IDE Arduino. I tylko twoja wyobraźnia będzie ograniczeniem zadań, które możesz wykonać z tą wiedzą.

AKTUALIZACJA MAJ 2020: Widząc, jak mój artykuł i film o Rozpoznawaniu obrazu z płytami K210 są nadal bardzo popularne i wśród najlepszych wyników na YouTube i Google, postanowiłem zaktualizować artykuł o informacje o aXeleRate, frameworku opartym na Keras dla AI na Krawędź rozwijam.

aXeleRate zasadniczo opiera się na zbiorze skryptów, których używałem do trenowania modeli rozpoznawania obrazów/wykrywania obiektów - połączonych w jeden framework i zoptymalizowany pod kątem przepływu pracy w Google Colab. Jest wygodniejszy w użyciu i bardziej aktualny.

W przypadku starej wersji artykułu, nadal możesz ją zobaczyć na steemit.com.

Krok 1: CNN i transfer uczenia się: trochę teorii

CNN i Transfer Learning: Trochę teorii
CNN i Transfer Learning: Trochę teorii

Convolutional Neural Networks lub CNN to klasa głębokich sieci neuronowych, najczęściej stosowanych do analizy obrazów wizualnych. W Internecie jest dużo literatury na ten temat i kilka linków podam w ostatniej części artykułu. Krótko mówiąc, można myśleć o CNN jako o serii filtrów, nałożonych na obraz, z których każdy szuka określonej cechy na obrazie - na niższych warstwach splotowych cechy to zwykle linie i proste kształty, a na wyższych warstwach cechy może być bardziej szczegółowy, np. części ciała, konkretne tekstury, części zwierząt lub roślin itp. Obecność pewnego zestawu cech może dać nam wskazówkę, czym może być obiekt na obrazie. Wąsy, dwoje oczu i czarny nos? Musi być kotem! Zielone liście, pień drzewa? Wygląda jak drzewo!

Mam nadzieję, że wiesz już teraz o zasadach działania CNN. Zwykle głęboka sieć neuronowa potrzebuje tysięcy obrazów i godzin treningu (w zależności od sprzętu, którego używasz do treningu), aby „opracować” filtry, które są przydatne do rozpoznawania typów obiektów, które chcesz. Ale jest skrót.

Model wyszkolony do rozpoznawania wielu różnych wspólnych przedmiotów (kotów, psów, sprzętów domowych, transportu itp.) ma już wiele przydatnych filtrów „opracowanych”, więc nie potrzebujemy go do nauki rozpoznawania podstawowych kształtów i części obiektów ponownie. Możemy po prostu przeszkolić kilka ostatnich warstw sieci, aby rozpoznawać konkretne klasy obiektów, które są dla nas ważne. Nazywa się to „uczeniem transferowym”. Potrzebujesz znacznie mniej danych treningowych i czasu obliczeniowego z uczeniem transferu, ponieważ trenujesz tylko kilka ostatnich warstw sieci, złożonej może z kilkuset neuronów.

Brzmi niesamowicie, prawda? Zobaczmy, jak to zaimplementować.

Krok 2: Przygotuj swoje środowisko

Przygotuj swoje środowisko
Przygotuj swoje środowisko

To są dwa sposoby wykorzystania aXeleRate: uruchomienie lokalnie na komputerze z systemem Ubuntu lub w Google Colab. Aby uruchomić w Google Colab, spójrz na ten przykład:

Klasyfikacja obrazów Colab Notebook

Szkolenie modelu lokalnie i eksportowanie go do użycia z akceleracją sprzętową jest teraz znacznie łatwiejsze.

Moje środowisko pracy to Ubuntu 16.04, 64bit. Możesz użyć maszyny wirtualnej do uruchomienia obrazu Ubuntu, ponieważ nie będziemy używać GPU do szkolenia. Z pewnymi modyfikacjami możesz również uruchomić skrypt szkoleniowy w systemie Windows, ale do konwersji modelu będziesz musiał użyć systemu Linux. Dlatego preferowanym środowiskiem do wykonania tego samouczka jest Ubuntu 16.04, działający natywnie lub na maszynie wirtualnej.

Zacznijmy od zainstalowania Minicondy, czyli menedżera środowiska dla Pythona. Stworzymy izolowane środowisko, dzięki czemu nie zmienimy przypadkowo niczego w Twoim systemowym środowisku Python.

Pobierz instalator tutaj

Po zakończeniu instalacji utwórz nowe środowisko:

conda utworzyć -n ml python=3,7

Aktywujmy nowe środowisko

conda aktywuj ml

Prefiks przed powłoką bash pojawi się z nazwą środowiska, wskazując, że pracujesz teraz w tym środowisku.

Krok 3: Zainstaluj AXeleRate i uruchom testy

Zainstaluj AXeleRate i uruchom testy
Zainstaluj AXeleRate i uruchom testy

Zainstaluj aXeleRate na lokalnym komputerze za pomocą

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

Aby pobrać przykłady uruchom:

git klon

Szybkie testy możesz uruchomić za pomocą testing_training.py w folderze aXeleRate. Uruchomi szkolenie i wnioskowanie dla każdego typu modelu, zapisze i przekonwertuje wytrenowane modele. Ponieważ jest to szkolenie tylko dla 5 epok, a zbiór danych jest bardzo mały, nie będziesz w stanie uzyskać przydatnych modeli, ale ten skrypt jest przeznaczony tylko do sprawdzania braku błędów.

Krok 4: Ponownie naucz model, przekonwertuj model Keras na.kmodel

Ponownie naucz model, przekonwertuj model Keras na.kmodel
Ponownie naucz model, przekonwertuj model Keras na.kmodel

W tym przykładzie będziemy uczyć model rozpoznawania Świętego Mikołaja i Arduino Uno. Oczywiście możesz wybrać inne klasy. Pobierz zestaw danych stąd. Utwórz kopię pliku classifier.json w folderze config, a następnie zmień go odpowiednio, podobnie jak plik config na zrzucie ekranu - upewnij się, że ścieżka do folderów szkolenia i walidacji jest poprawna!

Uruchom następujące polecenie z folderu aXeleRate:

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

Szkolenie się rozpocznie. Jeśli dokładność walidacji (nasza metryka walidacji) nie poprawi się przez 20 epok, trening zostanie przedwcześnie zatrzymany. Za każdym razem, gdy poprawia się dokładność walidacji, model jest zapisywany w folderze projektu. Po zakończeniu szkolenia aXeleRate automatycznie konwertuje najlepszy model do określonych formatów - od teraz możesz wybrać "tflite", "k210" lub "edgetpu".

Krok 5: Uruchom model na Sipeed Maix Bit

Uruchom model na Sipeed Maix Bit
Uruchom model na Sipeed Maix Bit
Uruchom model na Sipeed Maix Bit
Uruchom model na Sipeed Maix Bit
Uruchom model na Sipeed Maix Bit
Uruchom model na Sipeed Maix Bit

Istnieją dwa sposoby uruchomienia modelu, który masz teraz na sprzęcie Sipeed Maix: oprogramowanie układowe micropython i Arduino IDE. Sprzęt Micropython jest łatwiejszy w użyciu, ale zajmuje znaczną część dostępnej pamięci, więc pozostaje mniej miejsca na model. Arduino IDE to w zasadzie kod C, który jest znacznie wydajniejszy i ma mniejsze zużycie pamięci. Mój model ma tylko 1,9 MB, więc obie opcje działają na to. Z Micropythonem możesz korzystać z modeli o wielkości do 2,9 Mb, w przypadku czegokolwiek większego musisz rozważyć użycie Arduino IDE.

Pobierz OpenMV IDE stąd i minimalny firmware micropython stąd.

Wypal oprogramowanie za pomocą narzędzia kflash_gui. Możesz także nagrać wyszkolony model do flashowania, jak pokazano na zrzucie ekranu. Lub skopiuj go na kartę SD (w takim przypadku skopiuj.kmodel do katalogu głównego karty SD i włóż kartę SD do Sipeed Maix Bit)

Otwórz OpenMV IDE i naciśnij przycisk Połącz. Otwórz skrypt santa_uno.py z folderu example_scripts i naciśnij przycisk Start. Powinieneś widzieć transmisję na żywo z kamery, a jeśli otworzysz terminal szeregowy, uzyskasz najlepszy wynik rozpoznawania obrazu z wynikiem zaufania!

Aby korzystać z Arduino IDE, najpierw musisz wykonać procedurę dodawania płytek Sipeed do Arduino IDE, która jest udokumentowana tutaj. Twoja wersja Arduino IDE musi mieć co najmniej 1.8.12. Po dodaniu tablic otwórz szkic mobilenet_v1_transfer_learning.ino i prześlij go do Sipeed Maix Bit. Zmień nazwę modelu na karcie SD na „model” (lub zrób kopię z tą nazwą). Możesz zmienić nazwy etykiet w names.cpp. Pokaże strumień z kamery na żywo na ekranie Sipeed Maix wraz z najlepszym wynikiem rozpoznawania obrazu.

Krok 6: Wnioski

Oto kilka dodatkowych materiałów na temat CNN i uczenia się transferowego:

Transfer Learning za pomocą Mobilenet i Keras Wspaniałym wyjaśnieniem Transfer Learningu, ten samouczek wykorzystuje zmodyfikowaną wersję kodu z tego artykułu.

Koty i psy a splotowe sieci neuronowe Wyjaśnia podstawy CNN i wizualizuje niektóre filtry. Z kotami!

Trenuj, konwertuj, uruchamiaj MobileNet w Sipeed MaixPy i MaixDuino! Samouczek zespołu Sipeed na temat szkolenia klas Mobilenet 1000 od podstaw (bez uczenia się transferowego). Możesz pobrać ich wstępnie wytrenowany model i wypróbować!

Mam nadzieję, że wykorzystasz wiedzę, którą posiadasz, aby zbudować niesamowite projekty z widzeniem maszynowym! Możesz kupić płyty Sipeed tutaj, są to jedne z najtańszych opcji dostępnych dla ML w systemach wbudowanych.

Zalecana: