Wie funktioniert die DepthConcat-Operation in "Mit Windungen tiefer gehen"?

Antworten:

9

Ich denke nicht, dass die Ausgabe des Inception-Moduls unterschiedlich groß ist.

Geben Sie hier die Bildbeschreibung ein

Bei Faltungsschichten wird häufig eine Polsterung verwendet, um die räumliche Auflösung beizubehalten.

Die Pool-Schicht unten rechts (blauer Rahmen) unter anderen Faltungsschichten scheint unangenehm zu sein. Im Gegensatz zu herkömmlichen Pooling-Subsampling-Schichten (roter Rahmen, Schritt> 1) verwendeten sie jedoch einen Schritt von 1 in dieser Pooling-Schicht . Stride-1-Pooling-Schichten funktionieren tatsächlich auf die gleiche Weise wie Faltungsschichten, wobei jedoch die Faltungsoperation durch die Max-Operation ersetzt wird.

Die Auflösung nach der Pooling-Schicht bleibt also ebenfalls unverändert, und wir können die Pooling- und die Faltungsschicht in der Dimension "Tiefe" miteinander verketten.

Geben Sie hier die Bildbeschreibung ein

Wie in der obigen Abbildung aus dem Papier gezeigt, behält das Inception-Modul tatsächlich die räumliche Auflösung bei.

dontloo
quelle
6

Ich hatte die gleiche Frage im Kopf wie Sie, als Sie dieses Whitepaper gelesen haben, und die Ressourcen, auf die Sie verwiesen haben, haben mir geholfen, eine Implementierung zu finden.

In dem Fackelcode, auf den Sie verwiesen haben , heißt es:

--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :

Das Wort "Tiefe" in Deep Learning ist etwas mehrdeutig. Glücklicherweise bietet diese SO-Antwort Klarheit:

In Deep Neural Networks bezieht sich die Tiefe auf die Tiefe des Netzwerks. In diesem Zusammenhang wird die Tiefe jedoch zur visuellen Erkennung verwendet und in die 3. Dimension eines Bildes übersetzt.

In diesem Fall haben Sie ein Bild und die Größe dieser Eingabe beträgt 32 x 32 x 3 (Breite, Höhe, Tiefe). Das neuronale Netzwerk sollte in der Lage sein, basierend auf diesen Parametern zu lernen, da die Tiefe auf die verschiedenen Kanäle der Trainingsbilder übertragen wird.

DepthConcat verkettet also Tensoren entlang der Tiefenabmessung, die die letzte Abmessung des Tensors und in diesem Fall die dritte Abmessung eines 3D-Tensors ist.

DepthConcat muss die Tensoren in allen Dimensionen außer der Tiefenabmessung gleich machen, wie der Brennercode sagt:

-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.

z.B

A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3). 

Geben Sie hier die Bildbeschreibung ein

Im obigen Diagramm sehen wir ein Bild des DepthConcat-Ergebnistensors, wobei der weiße Bereich der Nullpunkt ist, der rote der A-Tensor und der grüne der B-Tensor.

Hier ist der Pseudocode für DepthConcat in diesem Beispiel:

  1. Schauen Sie sich Tensor A und Tensor B an und finden Sie die größten räumlichen Abmessungen, in diesem Fall die 16 Breiten- und 16 Höhengrößen von Tensor B. Da Tensor A zu klein ist und nicht den räumlichen Abmessungen von Tensor B entspricht, muss er aufgefüllt werden.
  2. Füllen Sie die räumlichen Dimensionen von Tensor A mit Nullen auf, indem Sie der ersten und zweiten Dimension Nullen hinzufügen, um die Größe von Tensor A (16, 16, 2) zu erhalten.
  3. Verketten Sie den gepolsterten Tensor A mit dem Tensor B entlang der Tiefenabmessung (3. Dimension).

Ich hoffe, das hilft jemand anderem, der die gleiche Frage beim Lesen dieses White Papers hat.

AshleyS
quelle
Ja. Perfekte Einführung. Dies ist in Tiefenrichtung verkettet. Nicht in räumlicher Richtung.
Shamane Siriwardhana