Einige Klarstellungen zu Faltungs-Neuronalen Netzen

6

Lesen Sie unter http://cs231n.github.io/convolutional-networks/#convert , wie Sie die vollständig verbundene Schicht in eine Faltungsschicht umwandeln .

Ich bin nur verwirrt über die folgenden zwei Kommentare:

Es stellt sich heraus, dass diese Konvertierung es uns ermöglicht, das ursprüngliche ConvNet in einem einzigen Vorwärtsdurchlauf sehr effizient über viele räumliche Positionen in einem größeren Bild zu "schieben".

Ein Standard-ConvNet sollte in der Lage sein, Bilder jeder Größe zu bearbeiten. Der Faltungsfilter kann über das Bildraster gleiten. Warum müssen wir also das ursprüngliche ConvNet in einem größeren Bild an einer beliebigen räumlichen Position verschieben?

Und

Die unabhängige Auswertung des ursprünglichen ConvNet (mit FC-Ebenen) über 224 x 224 Ausschnitte des 384 x 384-Bilds in Schritten von 32 Pixel ergibt ein identisches Ergebnis wie die einmalige Weiterleitung des konvertierten ConvNet.

Was bedeutet hier "Schritte von 32 Pixeln"? Bezieht sich das auf die Filtergröße? Bedeutet das, wenn wir über 224 * 224 Ernten des 384 * 384-Bildes sprechen, dass wir ein Empfangsfeld von 224 * 224 verwenden?

Ich habe diese beiden Kommentare im ursprünglichen Kontext als rot markiert.

Geben Sie hier die Bildbeschreibung ein

user3269
quelle
3
Sie müssen sich über ConvNet informieren. Schritt bedeutet Sprunggröße. "Wenn der Schritt 1 ist, verschieben wir die Filter Pixel für Pixel. Wenn der Schritt 2 ist (oder gelegentlich 3 oder mehr, obwohl dies in der Praxis selten ist), springen die Filter jeweils 2 Pixel, während wir sie verschieben Dies erzeugt räumlich kleinere Ausgangsvolumina. " Quelle: cs231n.github.io/convolutional-networks
horaceT

Antworten:

6

Vollständig verbundene Ebenen können nur Eingaben mit fester Größe verarbeiten, da eine bestimmte Anzahl von Parametern erforderlich ist, um die Eingabe und Ausgabe vollständig zu verbinden. Während Faltungsschichten nur dieselben Filter über die Eingabe "schieben", kann sie grundsätzlich Eingaben mit einer beliebigen räumlichen Größe behandeln.

In dem Beispielnetzwerk mit vollständig verbundenen Schichten am Ende gibt ein 224 * 224-Bild einen 1000d-Vektor von Klassenwerten aus. Wenn wir das Netzwerk auf ein größeres Bild anwenden, schlägt das Netzwerk aufgrund der Inkonsistenz zwischen der Eingabe und den Parametern der ersten vollständig verbundenen Schicht fehl.

Wenn wir andererseits ein vollständig gefaltetes Netzwerk verwenden, erhalten wir bei Anwendung auf ein größeres Bild 1000 "Heatmaps" von Klassenwerten.

Wie in der folgenden Abbildung (aus dem FCN-Segmentierungspapier ) gezeigt, gibt das obere Netzwerk eine Punktzahl pro Klasse an, und nach der Konvertierung (Faltung) können wir eine Heatmap pro Klasse für ein größeres Bild erhalten.
Geben Sie hier die Bildbeschreibung ein

Über "Schritt" auf derselben Seite im Abschnitt Räumliche Anordnung:

Wenn der Schritt 1 ist, verschieben wir die Filter pixelweise. Wenn der Schritt 2 ist (oder gelegentlich 3 oder mehr, obwohl dies in der Praxis selten ist), springen die Filter 2 Pixel gleichzeitig, während wir sie herumschieben. Dies erzeugt räumlich kleinere Ausgangsvolumina.

dontloo
quelle
1
@ user3269 Wenn der Eingang der vollständig verbundenen Schicht 7 * 7 * 512 ist, benötigen wir 7 * 7 * 512 * 4096 Parameter, um den Eingang und den Ausgang "vollständig zu verbinden". Wenn die räumliche Größe der Eingabe zunimmt, benötigen wir weitere Parameter. Für Faltungsschichten wenden wir einfach den gleichen Filter auf jeden Teil der Eingabe an.
Dontloo
2
@ user3269 Das Netzwerk gibt einen Wert pro Klasse für 224 * 224 Bilder aus. Wenn wir ein 384 * 384-Bild eingeben, wird für jede Klasse eine 12 * 12-Heatmap ausgegeben. Jedes Pixel der Heatmap entspricht dem Wert, den wir erhalten Anwenden des Netzwerks auf einen 224 * 224-Patch an einem bestimmten Ort. Da das Netzwerk die räumliche Größe der Eingabe um den Faktor 32 (224 * 224-> 7 * 7) verringert, wird das Gleiten um ein Pixel in der obersten Schicht um 32 Pixel im Eingabebild verschoben.
Dontloo
1
Was wäre, wenn wir mit einem fc cnn auf eine größere Eingangsgröße "gleiten" würden, könnten wir immer noch eine "Heatmap" erhalten. Wenn ja, wozu dient ein vollständig konviertes Netzwerk?
Flankechen
1
@flankechen hi, wenn ich das richtig verstanden habe, ist es weniger effizient, eine ganze CNN zu verschieben, um eine Heatmap zu erhalten, da es große Überlappungen zwischen verschiedenen Fenstern gibt, die in das Netzwerk gesendet werden, und wir werden am Ende wiederholt denselben Satz von Filtern auf diese überlappenden Bereiche anwenden . Eine bessere Wahl besteht darin, eine solche Redundanz zu speichern und das Netzwerk einmal auf das gesamte Image anzuwenden. Dies kann durch ein vollständig gefaltetes Netzwerk erfolgen.
Dontloo
1
@flankechen für vollständig konv. Netzwerke senden das gesamte Bild in das Netzwerk und schieben die Faltungsfilter, was effizienter ist als das Verschieben des gesamten Netzwerks. Abgesehen davon denke ich, dass ein vollständig verbundenes Netzwerk auch funktionieren würde.
Dontloo