Dichtungen gegen das neuronale Netz. Oder wählen Sie ein neuronales Netzwerk aus und führen Sie es aus, um Objekte auf dem Raspberry Zero zu erkennen

Guten Tag an alle.

Die kleine Himbeere ist eine tolle Sache. Ich habe Raspberry Zero W in den letzten sechs Monaten in einigen Projekten verwendet. Bestochen durch die Einfachheit des Prototyping und das Wegrollen verschiedener Ideen. Und jetzt ist hier eine optionale Frage: Wird dieses Gerät ein vollwertiges Faltungsgitter ziehen? [Spoiler - ziehen, aber es gibt lustige Nuancen]. Wer kümmert sich um das Thema - willkommen bei Katze. Achtung, es wird viele Katzen geben!

Bild


Warum ist das Raspberry neuronale Netzwerk?


Irgendwie habe ich auf Raspbery Zero W eine einfache Videofalle gesammelt, um das Nachtleben von Tieren (hauptsächlich Katzen) im Land zu beobachten. Der Code war einfach und funktionierte ziemlich gut. Für die Erkennung von Videofotos wurde eine Kamera mit IR-Beleuchtung wie diese „Raspberry Pi Night Version Camera“ verwendet .

Bild

Der Kern des Codes besteht darin, zwei aufeinanderfolgende Bilder aufzunehmen, Pixel für Pixel zu vergleichen. Wenn die Anzahl der geänderten Pixel einen bestimmten Schwellenwert überschreitet, beginnen Sie mit der Aufnahme eines 10-Sekunden-Videos. Ich werde den Codetext in diesem Beitrag nicht bereitstellen. Wenn jemand interessiert ist, schreibe in die Kommentare, ich kann ihn im Folgenden einfügen. Das Hauptmerkmal besteht darin, die beiden Frames in 0,2 Sekunden zu vergleichen, um zumindest schnelle Ereignisse zu erfassen. Vergleichen Sie diese Frames natürlich schnell.

Dann kam die Idee auf, ein einfaches neuronales Netzwerk an den Algorithmus anzuschließen, so dass es möglich wäre, das Objekt im erfassten Bild zu bestimmen und die Videoaufzeichnung nur zu starten, wenn die Objektklasse zuverlässig bestimmt wurde. Dadurch werden möglicherweise Fehlalarme aus der Videofalle entfernt. Dies geschieht durch sich bewegende Objekte (z. B. Gras oder Äste) oder durch eine scharfe Beleuchtung der Kameraszene (z. B. das Licht im Fenster wurde eingeschaltet oder die Lampe ging aus).

Welches Gitter soll man auf die Himbeere legen?


Glücklicherweise können Sie unter dem vorinstallierten Python (in meinem Fall 3.5.3) und dem weit verbreiteten OpenCV (ich verwende 3.4.3) fast jedes Raster platzieren. Leider ist die Liste der Optionen aufgrund der begrenzten Rechenkapazitäten des Geräts klein. In der Tat können Sie nur aus den "Licht" -Optionen wählen:

1. SqueezeNet (Beispielcode hier ).
2. YOLO Tiny ( hier ).
3. MobileNet-SSD ( hier ).
4. MobileNet_v1_224 (es gibt ein fantastisches Video über die Funktionsweise des Objektdetektors in diesem Raster ).

In all diesen Fällen wird die Möglichkeit bestochen, ein Modell zu verwenden, das auf soliden Datensätzen vorab trainiert wurde, wodurch sich alle Qualen und Sorgen eines unabhängigen Datensatzes und das anschließende Training eines neuronalen Netzwerks auf diesen entlasten.

Der Anmelder Nr. 1 wurde von der behaupteten hohen Erkennungsgenauigkeit mit bescheidenen Größen von Gewichtungsfaktoren inspiriert. Darüber hinaus führte eine kurze Suche im Internet zu dem hervorragenden Blog Adrian Rosebrock , der den Code ausführlich kommentierte und verschiedene Optionen für die Implementierung von Deep Learning auf Raspberry beschrieb.

Der Code von hier wurde verwendet, um die Funktionen von SqueezeNet zu testen. Der Autor sendet das Gewicht und die Textdarstellung des Modells an die E-Mail, nachdem er das Formular auf der Website ausgefüllt hat. Übrigens, wenn Sie OpenCV nicht installiert haben, finden Sie den Algorithmus der Aktionen in seinem Blog. Außerdem gibt es Beispiele für das "Übertakten" des Codes, um die Arbeitszeit von Modellen zu beschleunigen, und vieles mehr. Respekt vor Adrian, einer wirklich coolen Ressource.

Lassen Sie uns den Code ausführen und im ersten Bild ein beeindruckendes Ergebnis erzielen!

Bild

Die Katze auf dem Bild ist mit einer Wahrscheinlichkeit von 99% als Perserin definiert. Tatsächlich ist er kein Perser, sondern ein britischer Langhaariger oder Hochländer. Aber für ein Modell mit einer Reichweite von 1000 Klassen kann man sagen, ins Schwarze treffen. Der Einfachheit halber habe ich die Hauptergebnisse des neuronalen Netzwerks direkt auf dem Foto platziert. Dies sind die 5 wahrscheinlichsten Klassen, die erste ist die wahrscheinlichste, die zweite die nächstwichtigste und so weiter.

Das Modell zählt übrigens die Objektklassen auf meiner Null für 6,5 Sekunden. Wenn Sie den Daten von Adrian glauben, dauert die Berechnung auf dem Raspberry Pi B + in den Bildern in seinem Beitrag (Foto der Räumlichkeiten des Friseurs, der Kobra und der Quallen) ungefähr 0,92 Sekunden. Ich glaube gerne, dass die Vollversion von Raspberry immerhin 4 Kerne im Prozessor hat. Ich glaube, jeder weiß, dass Zero nur einen hat ((())

Es scheint, dass Sie vergessen müssen, die Objektklasse in Echtzeit auf Zero zu definieren. Übrigens muss ich zugeben, dass ein zweites Mal, um das Modell auf einem "vollen" Pi zu bearbeiten, auch nicht der ultimative Traum ist.

Aber lassen Sie uns das Modell weiter testen.

Bild

Die Katze veränderte ihre Körperhaltung und verlor bis zu 7% ihres früheren "Persers". Aber das ist natürlich ein Witz, im Allgemeinen ist die Arbeit des Modells sehr gut. Genau an dieser Stelle war es möglich zu beenden, aber ich wollte die Aufgabe des Modells etwas komplizieren. Lass uns weiter an ... Katzen üben. Aber wir werden Bilder sammeln, in denen die Katze nicht in einer klassischen Pose sitzt, sondern zum Beispiel schläft. Also lass uns gehen.

Bild

In diesem Bild ist die Katze als Angora definiert, dies ist jedoch nicht korrekt. Anscheinend von der Tatsache, dass sie sich über eine obsessive Aufforderung ärgert, das Waschbecken zu verlassen. Nun, das neuronale Netzwerk war falsch, na, wem passiert das am Ende nicht?

Bild

Es stellt sich heraus, dass in meinem Haus ein flauschiger Fußball lebt.) Ja, es kommt vor, dass Menschen überhaupt nicht so sind, wie sie auf den ersten Blick scheinen. Der Kampf zwischen Katze und neuronalen Netzen nimmt eine ernsthafte Wendung.

Bild

Wow. Jetzt ist sie eine Siberian Husky. Etwas sagt mir, dass die Katze noch zählt)

Bild

Es scheint, dass einer dieser beiden eindeutig niedergeschlagen ist und dies eindeutig keine Katze ist. Jetzt wird es vom neuronalen Netzwerk als Spindel definiert (wenn auch nur um 8,5%). Es gibt immer noch Optionen, dass es sich um einen Beagle, einen Orca, eine felsige Python oder ein Stinktier handelt. Keine Katze, aber eine Frau ist ein Rätsel!

Bild

Nun ja! Dies ist immer noch ein Orca! Ja, ja, ein Meeressäugetier einer Walordnung. Aus irgendeinem Grund erinnerte ich mich an die Zeilen aus der fernen Kindheit:
„In dieser Geschichte gibt es keine Ordnung,
Hier ist ein Fehler, ein Tippfehler! Jemand
Gegen alle Regeln
In einem Märchen ordnete er die Buchstaben neu,
Fähre
"KIT" auf dem "CAT",
"CAT" auf "KIT", im Gegenteil! ".
Der Gong läutet, der Schiedsrichter beendet den Kampf.

Bild

In der zweiten Runde ging die Katze mit einer listigen Brille mit einer Wahrscheinlichkeit von 34% an der Bostoner Bulldogge vorbei. Oder für die Franzosen. Es scheint, dass sich das neuronale Netz von der Niederlage in der ersten Runde nicht vollständig erholt hat.

Bild

Na endlich! Die Katze ist als siamesisch mit einer Wahrscheinlichkeit von bis zu 66% definiert! Bravo, SqueezeNet! Im Ernst, es scheint, dass im Originaldatensatz Fotos von nicht lügenden, sondern sitzenden Katzen vorherrschten. Lügen waren meistens Hunde)

Bild

Die Fähigkeit von Katzen, die Form einer Kiste anzunehmen, ist selbst für Menschen verwirrend, geschweige denn für das neuronale Netzwerk. Das Eintauchen in die Box reduzierte die Erkennungsgenauigkeit um bis zu 40%.

Bild

Also, so ... Und dies scheint im Allgemeinen ein verbotener Empfang zu sein. Die Computermaus, die neben der Katze liegt, verwirrt das neuronale Netzwerk vollständig. Jetzt ist unsere Katze eine Maus! )

So wurde das gesamte neuronale Netzwerk mit 11 Fotos von Katzen dargestellt, von denen nur 5 korrekt identifiziert wurden. Darüber hinaus mit einer Wahrscheinlichkeit von mehr als 50% in nur drei Fällen. Die Arbeit der Autoren von SqueezeNet wird in keiner Weise beeinträchtigt. Dies ist ein solides Netzwerk mit einer sehr breiten Klasse von Objekten und einem relativ geringen Ressourcenbedarf.

Der Artikel ist natürlich komischer Natur, aber aus den erhaltenen Daten können ziemlich pragmatische Schlussfolgerungen gezogen werden. Es ist notwendig, vorab trainierte neuronale Netze mit großer Sorgfalt zu verwenden und sie auf reale Bilder der Aufgabe zu überprüfen, für die die Verwendung eines neuronalen Netzes geplant ist.

In Bezug auf die Wahl des optimalen neuronalen Netzwerks für Himbeere bleibt die Frage offen. Ich setze die Experimente fort. Wenn das Interesse des Publikums an diesem Thema besteht, werde ich die Ergebnisse weiterer Forschungen teilen. Es ist nur so, dass die Ergebnisse des ersten Schritts so lustig waren, dass ich sie unbedingt teilen wollte.

Vielen Dank für das Lesen bis zum Ende. Viel Glück und eine gute Arbeitswoche)

UPD: Im zweiten Teil dieses Beitrags finden Sie den Arbeitscode zum Ausführen eines neuronalen Netzwerks auf dem Raspberry Pi Zero W.

Source: https://habr.com/ru/post/de428021/


All Articles