Reduzieren Faltungen Bilder?


8

Ich suche nach einer guten Erklärung dafür, wie Windungen beim Deep Learning funktionieren, wenn sie auf Mehrkanalbilder angewendet werden. Nehmen wir zum Beispiel an, ich habe ein 100 x 100 Pixel großes Bild mit drei Kanälen, RGB. Der Eingangstensor hätte dann die Abmessungen 100 x 100 x 3.

Wenn ich eine Faltung mit N Filtern und einem Schritt von eins anwende, lautet die Ausgabedimension:

100 x 100 x 3 x N?

oder

100 x 100 x N?

Mit anderen Worten, "flacht" die angewendete Faltung das Bild ab oder wird die Faltung kanalweise angewendet?

Antworten:


7

In allen Implementierungen für CNNs, die Bilder verarbeiten, die ich gesehen habe, ist die Ausgabe in einer beliebigen Ebene

Width x Height x Channels

oder eine Permutation. Dies ist die gleiche Anzahl von Dimensionen wie die Eingabe. Durch die Faltungsschichten werden keine zusätzlichen Dimensionen hinzugefügt. Jeder Feature-Map-Kanal in der Ausgabe eines CNN-Layers ist ein "abgeflachtes" 2D-Array, das durch Hinzufügen der Ergebnisse mehrerer 2D-Kernel erstellt wird (eines für jeden Kanal im Input-Layer).

Normalerweise wird erwartet, dass sogar Graustufen-Eingabebilder so dargestellt werden Width x Height x 1, dass sie zum gleichen Muster passen und dass das gleiche Ebenenmodell verwendet werden kann.

Es ist durchaus möglich, ein Layer-Design zu erstellen, das eine Standard-2D + -Kanaleingabeebene in eine 3D + -Kanalebene konvertiert. Es ist nicht etwas, was ich zuvor gesehen habe, aber Sie können nie ausschließen, dass es bei einem bestimmten Problem nützlich sein könnte.

Möglicherweise werden auch 3D + -Kanalfaltungen in CNNs angezeigt, die auf Videos angewendet werden. In diesem Fall ist die Struktur jedoch eine Variation von

Width x Height x Frames x Channels

Vielen Dank. Ich habe hier tatsächlich eine andere gute Erklärung gefunden, die die Form des Faltungskerns enthält: Link
David Ruiz

2

Dies hängt von der Anzahl der ausgewählten Filter ab. Angenommen, Sie haben 64 Filter ausgewählt.

Ihr Gewichtstensor hat die Form [3, 3, 3, 64] (3. 3 ist die Anzahl der Kanäle in der Eingangsschicht und 64 ist die Anzahl der Kanäle in der Ausgangsschicht) und die Form des Bias-Tensors [64].

Die Ausgabe erfolgt, wenn Pad = "SAME" und Schritt 1 für ein Eingabebild von 224 * 224 * 3 = 224 * 224 * 64

Die Ausgabe erfolgt, wenn Pad = "Valid" und Schritt 1 für ein Eingabebild von 224 * 224 * 3 = 221 * 221 * 64

Wenn Sie nun mit einer Eingabe von 221 * 221 * 64 128 Filter in der nächsten Ebene erstellen möchten, lautet Ihre Gewichtsvektorform [3, 3, 64, 128] und Ihre Bias-Vecotr-Form [128].

und Ausgabeform - wenn Pad = "SAME" [221, 221, 128] - wenn Pad = "VALID" [198, 198, 128] unter Berücksichtigung von Schritt = [1,1,1,1]

Sie können diese Ergebnisse überprüfen, während Sie das Diagramm mit layername.get_shape () erstellen.


1
Technisch gesehen hängt die Antwort auf die Frage des OP nicht von der Anzahl der Filter ab. Ihr erster Satz könnte also eine Änderung / Klarstellung vertragen. Die Beispielwerte sind jedoch nützlich, um insbesondere die Form des Gewichtsarrays zu verdeutlichen.
Neil Slater

1

Die Ausgabedimension einer Faltung beim tiefen Lernen hängt von mehreren Faktoren ab

  1. die Größe des Filters (auch bekannt als Kernel)
  2. das Auffüllen (ob Sie Nullen um Ihr Bild hinzufügen oder nicht und wie viele)
  3. die Anzahl der Filter, die Sie verwenden
  4. der Schritt

Die einfachste Abhängigkeit besteht in der Anzahl der Filter N. Sie erhalten die Anzahl der Feature-Maps, über die Ihre Ausgabe verfügt. Für den Eingang, der die RGB-Kanäle sein kann, dh 3, kann für den Ausgang diese Nummer frei gewählt werden.

Der nächste Faktor ist das Null-Auffüllen. Wenn Sie eine Filtergröße von (3,3) und eine "gültige" Auffüllung verwenden, dh NO-Nullen um das Bild hinzufügen, erhalten Sie eine Ausgabe der Dimension.

(100, 100, 3) -> (98, 98, N)

Weil Sie einen Schritt von 1 verwenden. Wenn Sie den Filter am Ende des Bildes in jede Richtung über das Bild bewegen, trifft der Filter nach 98 Schritten den Rand.

Wenn Sie jedoch die Auffüllung "SAME" verwenden, kompensieren Sie die Filtergröße - bei einer Filtergröße von (3,3), die einer Nullzeile um das Bild entspricht -, erhalten Sie Folgendes:

(100, 100, 3) -> (100, 100, N)

Mit einem Schritt von 2 verschieben Sie beispielsweise die Position des Filters um zwei Pixel. Deshalb bekommst du

(100, 100, 3) -> (50, 50, N)

1

Die drei RGB-Kanäle werden von verschiedenen Kerneln gefaltet und in jede Feature-Map eingefügt. Sie haben also 100 x 100 x N als erste Ausgabeebene.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.