Beim Versuch, Koordinaten von Objekten (x, y) im Bild zu finden, scheint mein neuronales Netzwerk den Fehler zu optimieren, ohne zu lernen [geschlossen]

8

Ich erzeuge Bilder einer einzelnen Münze, die auf einen weißen Hintergrund der Größe 200x200 geklebt ist. Die Münze wird zufällig aus 8 Euro-Münzen (eine für jede Münze) ausgewählt und hat:

  • zufällige Rotation;
  • zufällige Größe (zwischen festen Grenzen);
  • zufällige Position (so dass die Münze nicht abgeschnitten wird).

Hier sind zwei Beispiele (hinzugefügte Mittelmarkierungen): Zwei Datensatzbeispiele

Ich benutze Python + Lasagne. Ich füttere das Farbbild in das neuronale Netzwerk, das eine Ausgabeschicht von 2 linearen Neuronen hat, die vollständig verbunden sind, eine für x und eine für y. Die den erzeugten Münzbildern zugeordneten Ziele sind die Koordinaten (x, y) des Münzzentrums.

Ich habe versucht (aus Using Convolutional Neuronal Networks zur Erkennung von Facial Keypoints ):

  • eine dichte Schichtarchitektur mit einer unterschiedlichen Anzahl von Schichten und einer Anzahl von Einheiten (maximal 500);
  • eine Faltungsarchitektur (mit 2 dichten Schichten vor der Ausgabe);
  • Summe und Mittelwert quadrierter Differenz als Zielfunktion;
  • Zielkoordinaten im ursprünglichen Bereich [0,199] oder normalisiert [0,1];
  • um Dropout-Layer zwischen den einzelnen Layern zu platzieren, mit einer Dropout-Wahrscheinlichkeit von 0.2.

Ich habe immer einen einfachen SGD verwendet, indem ich die Lernrate eingestellt habe, um eine schöne abnehmende Fehlerkurve zu erhalten.

Ich habe festgestellt, dass der Fehler beim Trainieren des Netzwerks bis zu einem Punkt abnimmt, an dem die Ausgabe immer der Mittelpunkt des Bildes ist. Es sieht so aus, als ob die Ausgabe unabhängig von der Eingabe ist. Es scheint, dass die Netzwerkausgabe der Durchschnitt der Ziele ist, die ich gebe. Dieses Verhalten sieht wie eine einfache Minimierung des Fehlers aus, da die Positionen der Münzen gleichmäßig auf dem Bild verteilt sind. Dies ist nicht das gewünschte Verhalten.

Ich habe das Gefühl, dass das Netzwerk nicht lernt, sondern nur versucht, die Ausgabekoordinaten zu optimieren, um den mittleren Fehler gegenüber den Zielen zu minimieren. Habe ich recht? Wie kann ich das verhindern? Ich habe versucht, die Verzerrung der Ausgabe-Neuronen zu entfernen, weil ich dachte, dass ich vielleicht nur diese Verzerrung modifiziere und alle anderen Parameter auf Null gesetzt werden, aber das hat nicht funktioniert.

>

Ist es möglich, dass ein neuronales Netzwerk alleine bei dieser Aufgabe gut funktioniert? Ich habe gelesen, dass man auch ein Netz für die gegenwärtige / nicht vorhandene Klassifikation trainieren kann und dann das Bild scannen kann, um mögliche Orte zu finden für Objekte. Aber ich fragte mich nur, ob es möglich war, nur die Vorwärtsberechnung eines neuronalen Netzes zu verwenden.

    
Silicium14 24.01.2016, 17:31
quelle

1 Antwort

1

Frage: Wie kann ich dies verhindern [Überanpassung ohne Verbesserung der Testergebnisse]?

Was getan werden muss, ist, Ihr neurales Netz neu zu gestalten. Ein neuronales Netz wird bei der Vorhersage einer X- und Y-Koordinate keine gute Arbeit leisten. Es kann durch eine Heat Map erstellt werden, wo es eine Münze erkennt, oder anders gesagt, Sie könnten Ihr Farbbild in eine "Münze-hier" Wahrscheinlichkeitskarte verwandeln.

Warum? Neuronen haben eine gute Fähigkeit, um die Wahrscheinlichkeit und nicht die Koordinaten zu messen. Neuronale Netze sind nicht die magischen Maschinen, zu denen sie verkauft werden, sondern folgen vielmehr dem Programm, das von ihrer Architektur vorgegeben wird. Sie müßten eine ziemlich schicke Architektur aufstellen, damit das neuronale Netz zuerst eine interne Raumdarstellung der Münzen erzeugt, dann eine andere interne Darstellung ihres Massenzentrums, dann eine andere, um den Massenmittelpunkt und das Originalbild zu verwenden Größe, um irgendwie zu lernen, die X-Koordinate zu skalieren, dann wiederhole das Ganze für Y.

Einfacher, viel einfacher ist es, eine Münzdetektor-Faltung zu erstellen, die Ihr Farbbild in ein Schwarz-Weiß-Bild der Wahrscheinlichkeit-a-Münze-ist-hier-Matrix umwandelt. Verwenden Sie dann diese Ausgabe für den handgeschriebenen Code Ihres Kunden, der diese Wahrscheinlichkeitsmatrix in eine X / Y-Koordinate umwandelt.

Frage: Kann ein neuronales Netzwerk alleine bei dieser Aufgabe gut arbeiten?

Ein klares YES , solange Sie die richtige neuronale Netzarchitektur (wie oben) einrichten, aber wäre es wahrscheinlich viel einfacher zu implementieren und schneller Trainieren Sie, wenn Sie die Aufgabe in Schritte aufgeteilt haben und das Neuronale Netz nur auf den Münzdetektionsschritt angewendet haben.

    
Panchishin 20.06.2017, 01:44
quelle