Inhaltsverzeichnis:

Bilderkennung mit K210 Boards und Arduino IDE/Micropython - Gunook
Bilderkennung mit K210 Boards und Arduino IDE/Micropython - Gunook

Video: Bilderkennung mit K210 Boards und Arduino IDE/Micropython - Gunook

Video: Bilderkennung mit K210 Boards und Arduino IDE/Micropython - Gunook
Video: KI-Roboterhund im Test | Boston-Dynamics-Klon für 550 Euro 2024, Juni
Anonim
Image
Image

Ich habe bereits einen Artikel über die Ausführung von OpenMV-Demos auf Sipeed Maix Bit geschrieben und auch ein Video zur Objekterkennungsdemo mit diesem Board gemacht. Eine der vielen Fragen, die sich die Leute gestellt haben, lautet: Wie kann ich ein Objekt erkennen, für das das neuronale Netz nicht trainiert ist? Mit anderen Worten, wie Sie Ihren eigenen Bildklassifizierer erstellen und mit Hardwarebeschleunigung ausführen.

Dies ist eine verständliche Frage, da Sie für Ihr Projekt wahrscheinlich einige generische Objekte wie Katzen und Hunde und Flugzeuge nicht erkennen müssen. Sie möchten etwas Bestimmtes erkennen, zum Beispiel eine Hunderasse für diese automatische Tiertüre oder eine Pflanzenart zum Sortieren oder andere interessante Anwendungen, die Sie sich vorstellen können!

Ich habe dich! In diesem Artikel werde ich Ihnen beibringen, wie Sie Ihren eigenen benutzerdefinierten Bildklassifikator mit Transfer-Lernen in Keras erstellen, das trainierte Modell in das.kmodel-Format konvertieren und es mit Micropython oder auf einem Sipeed-Board (kann ein beliebiges Board, Bit/Dock oder Go sein) ausführen Arduino-IDE. Und nur Ihre Vorstellungskraft ist die Grenze für die Aufgaben, die Sie mit diesem Wissen erledigen können.

UPDATE MAI 2020: Da mein Artikel und mein Video über die Bilderkennung mit K210-Boards immer noch sehr beliebt sind und zu den Top-Ergebnissen auf YouTube und Google gehören, habe ich beschlossen, den Artikel zu aktualisieren, um die Informationen über aXeleRate, Keras-basiertes Framework für KI auf dem Edge entwickle ich.

aXeleRate basiert im Wesentlichen auf der Sammlung von Skripten, die ich zum Trainieren von Bilderkennungs-/Objekterkennungsmodellen verwendet habe – kombiniert in einem einzigen Framework und optimiert für den Workflow auf Google Colab. Es ist bequemer zu bedienen und aktueller.

Die alte Version des Artikels ist noch auf steemit.com zu sehen.

Schritt 1: CNN und Transfer Learning: Etwas Theorie

CNN und Transfer Learning: Einige Theorie
CNN und Transfer Learning: Einige Theorie

Convolutional Neural Networks oder CNN sind eine Klasse von tiefen neuronalen Netzen, die am häufigsten zur Analyse visueller Bilder verwendet werden. Es gibt eine Menge Literatur im Internet zu diesem Thema und ich werde im letzten Teil des Artikels einige Links geben. Kurz gesagt können Sie sich CNN als eine Reihe von Filtern vorstellen, die auf das Bild angewendet werden, wobei jeder Filter nach einem bestimmten Merkmal im Bild sucht - auf den unteren Faltungsschichten sind die Merkmale normalerweise Linien und einfache Formen und auf den höheren Schichten die Merkmale kann genauer sein, zB Körperteile, bestimmte Texturen, Teile von Tieren oder Pflanzen usw. Das Vorhandensein bestimmter Merkmale kann uns einen Hinweis auf das Objekt im Bild geben. Schnurrhaare, zwei Augen und eine schwarze Nase? Muss Katze sein! Grüne Blätter, ein Baumstamm? Sieht aus wie ein Baum!

Ich hoffe, Sie verstehen jetzt das Arbeitsprinzip von CNN. Normalerweise benötigt ein tiefes neuronales Netzwerk Tausende von Bildern und Stunden Trainingszeit (abhängig von der Hardware, die Sie für das Training verwenden), um Filter zu "entwickeln", die für die Erkennung der gewünschten Objekttypen nützlich sind. Aber es gibt eine Abkürzung.

Ein Modell, das darauf trainiert ist, viele verschiedene gängige Objekte (Katzen, Hunde, Haushaltsgeräte, Transportmittel usw.) zu erkennen, hat bereits viele dieser nützlichen Filter "entwickelt", so dass wir es nicht brauchen, um das Erkennen der grundlegenden Formen und Teile zu lernen der Objekte wieder. Wir können einfach die letzten paar Schichten des Netzwerks neu trainieren, um bestimmte Klassen von Objekten zu erkennen, die für uns wichtig sind. Dies wird als „Transferlernen“bezeichnet. Sie benötigen beim Transferlernen deutlich weniger Trainingsdaten und Rechenzeit, da Sie nur die letzten Schichten des Netzwerks trainieren, die möglicherweise aus einigen hundert Neuronen bestehen.

Klingt toll, oder? Mal sehen, wie man es umsetzt.

Schritt 2: Bereiten Sie Ihre Umgebung vor

Bereiten Sie Ihre Umgebung vor
Bereiten Sie Ihre Umgebung vor

Es gibt zwei Möglichkeiten, aXeleRate zu verwenden: lokal auf einem Ubuntu-Computer oder in Google Colab ausgeführt. Für die Ausführung in Google Colab sehen Sie sich dieses Beispiel an:

Bildklassifizierung Colab Notebook

Das lokale Trainieren Ihres Modells und das Exportieren zur Verwendung mit Hardwarebeschleunigung ist jetzt auch viel einfacher.

Meine Arbeitsumgebung ist Ubuntu 16.04, 64bit. Sie können die virtuelle Maschine verwenden, um das Ubuntu-Image auszuführen, da wir keine GPU für das Training verwenden. Mit einigen Modifikationen können Sie das Trainingsskript auch unter Windows ausführen, aber für die Modellkonvertierung müssen Sie ein Linux-System verwenden. Die bevorzugte Umgebung für die Ausführung dieses Tutorials ist also Ubuntu 16.04, das nativ oder in einer virtuellen Maschine ausgeführt wird.

Beginnen wir mit der Installation von Miniconda, dem Umgebungsmanager für Python. Wir werden eine isolierte Umgebung erstellen, damit wir nicht versehentlich etwas in Ihrer System-Python-Umgebung ändern.

Laden Sie das Installationsprogramm hier herunter

Erstellen Sie nach Abschluss der Installation eine neue Umgebung:

conda erstellen -n ml python=3.7

Lasst uns die neue Umgebung aktivieren

conda aktivieren ml

Vor Ihrer Bash-Shell wird ein Präfix mit dem Namen der Umgebung angezeigt, um anzuzeigen, dass Sie jetzt in dieser Umgebung arbeiten.

Schritt 3: AXeleRate installieren und Tests ausführen

AXeleRate installieren und Tests ausführen
AXeleRate installieren und Tests ausführen

Installieren Sie aXeleRate auf Ihrem lokalen Computer mit

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

Um Beispiele herunterzuladen, führen Sie Folgendes aus:

git-Klon

Sie können Schnelltests mit tests_training.py im aXeleRate-Ordner ausführen. Es führt Training und Inferenz für jeden Modelltyp durch, speichert und konvertiert trainierte Modelle. Da es nur für 5 Epochen trainiert und der Datensatz sehr klein ist, werden Sie keine brauchbaren Modelle erhalten, aber dieses Skript ist nur dazu gedacht, die Fehlerfreiheit zu überprüfen.

Schritt 4: Erneutes Trainieren des Modells, Konvertieren des Keras-Modells in.kmodel

Trainieren Sie das Modell erneut, konvertieren Sie das Keras-Modell in.kmodel
Trainieren Sie das Modell erneut, konvertieren Sie das Keras-Modell in.kmodel

Für dieses Spielzeugbeispiel trainieren wir das Modell, um den Weihnachtsmann und Arduino Uno zu erkennen. Natürlich können Sie andere Klassen wählen. Laden Sie den Datensatz hier herunter. Erstellen Sie eine Kopie der Datei classifier.json im Konfigurationsordner und ändern Sie sie entsprechend, ähnlich wie die Konfigurationsdatei im Screenshot - stellen Sie sicher, dass der Pfad zu den Trainings- und Validierungsordnern korrekt ist!

Führen Sie den folgenden Befehl aus dem aXeleRate-Ordner aus:

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

Die Ausbildung wird beginnen. Wenn sich die Validierungsgenauigkeit (unsere Validierungsmetrik) 20 Epochen lang nicht verbessert, wird das Training vorzeitig beendet. Jedes Mal, wenn sich die Genauigkeit der Validierung verbessert, wird das Modell im Projektordner gespeichert. Nach Abschluss des Trainings konvertiert aXeleRate automatisch das beste Modell in bestimmte Formate - Sie können ab sofort "tflite", "k210" oder "edgetpu" wählen.

Schritt 5: Führen Sie das Modell auf Sipeed Maix Bit aus

Führen Sie das Modell auf Sipeed Maix Bit aus
Führen Sie das Modell auf Sipeed Maix Bit aus
Führen Sie das Modell auf Sipeed Maix Bit aus
Führen Sie das Modell auf Sipeed Maix Bit aus
Führen Sie das Modell auf Sipeed Maix Bit aus
Führen Sie das Modell auf Sipeed Maix Bit aus

Es gibt zwei Möglichkeiten, das Modell, das Sie jetzt haben, auf Sipeed Maix-Hardware auszuführen: Micropython-Firmware und Arduino IDE. Micropython-Hardware ist einfacher zu verwenden, belegt jedoch einen erheblichen Teil des verfügbaren Speichers, sodass weniger Platz für das Modell übrig bleibt. Arduino IDE ist im Grunde C-Code, der viel effizienter ist und einen geringeren Speicherbedarf hat. Mein Modell ist nur 1,9 MB groß, also funktionieren beide Optionen dafür. Sie können mit Micropython Modelle mit einer Größe von bis zu 2,9 MB verwenden, für alles, was größer ist, müssen Sie die Arduino IDE verwenden.

Laden Sie OpenMV IDE von hier und minimale Micropython-Firmware von hier herunter.

Brennen Sie die Firmware mit dem Tool kflash_gui. Sie können das trainierte Modell auch auf Flash brennen, wie im Screenshot gezeigt. Oder kopieren Sie es auf eine SD-Karte (in diesem Fall kopieren Sie.kmodel in das Stammverzeichnis einer SD-Karte und legen Sie die SD-Karte in Sipeed Maix Bit ein)

Öffnen Sie OpenMV IDE und drücken Sie die Verbindungstaste. Öffnen Sie das santa_uno.py-Skript aus dem Ordner example_scripts und drücken Sie die Starttaste. Sie sollten einen Live-Stream von der Kamera sehen und wenn Sie Serial Terminal öffnen, erhalten Sie das beste Bilderkennungsergebnis mit dem Vertrauenswert!

Für die Verwendung mit Arduino IDE müssen Sie zuerst das Verfahren zum Hinzufügen von Sipeed-Boards zu Arduino IDE befolgen, das hier dokumentiert ist. Ihre Arduino IDE-Version muss mindestens 1.8.12 sein. Nachdem Sie die Boards hinzugefügt haben, öffnen Sie die Skizze mobilenet_v1_transfer_learning.ino und laden Sie sie auf Sipeed Maix Bit hoch. Ändern Sie den Namen des Modells auf der SD-Karte in "Modell" (oder erstellen Sie eine Kopie mit diesem Namen). Sie können die Labelnamen in names.cpp ändern. Es zeigt den Live-Kamerastream auf dem Sipeed Maix-Bildschirm zusammen mit dem oberen Bilderkennungsergebnis an.

Schritt 6: Schlussfolgerungen

Hier sind einige weitere Materialien zum Thema CNNs und Transfer Learning:

Lerntransfer mit Mobilenet und Keras Eine großartige Erklärung für Lerntransfer. Dieses Tutorial verwendet eine modifizierte Version des Codes aus diesem Artikel.

Cats and Dogs und Convolutional Neural Networks Erklärt die Grundlagen von CNNs und visualisiert einige der Filter. Mit Katzen!

Trainieren, konvertieren und betreiben Sie MobileNet auf Sipeed MaixPy und MaixDuino! Ein Tutorial vom Sipeed-Team zum Trainieren von Mobilenet 1000-Klassen von Grund auf (kein Transferlernen). Sie können ihr vortrainiertes Modell herunterladen und ausprobieren!

Ich hoffe, Sie können das Wissen, das Sie jetzt haben, nutzen, um einige großartige Projekte mit Machine Vision zu erstellen! Sie können hier Sipeed-Boards kaufen, sie gehören zu den günstigsten Optionen für ML auf eingebetteten Systemen.

Empfohlen: