Comment fonctionne l'opération DepthConcat dans «Aller plus loin avec les circonvolutions»?

12

Pour aller plus loin avec les circonvolutions, je suis tombé sur une couche DepthConcat , un bloc de construction des modules de création proposés , qui combine la sortie de plusieurs tenseurs de taille variable. Les auteurs appellent cela "concaténation de filtres". Il semble y avoir une implémentation pour Torch , mais je ne comprends pas vraiment ce qu'elle fait. Quelqu'un peut-il expliquer en termes simples?

moi
la source

Réponses:

9

Je ne pense pas que la sortie du module de démarrage soit de tailles différentes.

entrez la description de l'image ici

Pour les couches convolutives, les gens utilisent souvent un rembourrage pour conserver la résolution spatiale.

La couche de regroupement en bas à droite (cadre bleu) parmi d'autres couches convolutionnelles peut sembler gênante. Cependant, contrairement aux couches de sous-échantillonnage de regroupement conventionnelles (cadre rouge, foulée> 1), ils ont utilisé une foulée de 1 dans cette couche de regroupement . Les couches de regroupement Stride-1 fonctionnent en fait de la même manière que les couches convolutives, mais avec l'opération de convolution remplacée par l'opération max.

Ainsi, la résolution après la couche de regroupement reste également inchangée, et nous pouvons concaténer les couches de regroupement et convolutionnelles ensemble dans la dimension "profondeur".

entrez la description de l'image ici

Comme le montre la figure ci-dessus de l'article, le module de démarrage conserve en fait la résolution spatiale.

dontloo
la source
6

J'avais la même question en tête lorsque vous avez lu ce livre blanc et les ressources auxquelles vous avez fait référence m'ont aidé à trouver une mise en œuvre.

Dans le code Torch auquel vous avez fait référence , il est dit:

--[[ 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 :

Le mot «profondeur» dans le Deep learning est un peu ambigu. Heureusement, cette réponse SO apporte une certaine clarté:

Dans les réseaux de neurones profonds, la profondeur fait référence à la profondeur du réseau, mais dans ce contexte, la profondeur est utilisée pour la reconnaissance visuelle et se traduit par la 3ème dimension d'une image.

Dans ce cas, vous avez une image et la taille de cette entrée est 32x32x3 (largeur, hauteur, profondeur). Le réseau neuronal devrait être en mesure d'apprendre sur la base de ces paramètres à mesure que la profondeur se traduit par les différents canaux des images d'entraînement.

Donc DepthConcat concatène les tenseurs le long de la dimension de profondeur qui est la dernière dimension du tenseur et dans ce cas la 3ème dimension d'un tenseur 3D.

DepthConcat doit rendre les tenseurs identiques dans toutes les dimensions sauf la dimension de profondeur, comme le dit le code Torch :

-- 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.

par exemple

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). 

entrez la description de l'image ici

Dans le diagramme ci-dessus, nous voyons une image du tenseur de résultat DepthConcat, où la zone blanche est le remplissage zéro, le rouge est le tenseur A et le vert est le tenseur B.

Voici le pseudo-code de DepthConcat dans cet exemple:

  1. Regardez le tenseur A et le tenseur B et trouvez les plus grandes dimensions spatiales, qui dans ce cas seraient les 16 largeurs et 16 hauteurs du tenseur B. Étant donné que le tenseur A est trop petit et ne correspond pas aux dimensions spatiales du tenseur B, il devra être rembourré.
  2. Remplissez les dimensions spatiales du tenseur A avec des zéros en ajoutant des zéros aux première et deuxième dimensions pour créer la taille du tenseur A (16, 16, 2).
  3. Concaténer le tenseur rembourré A avec le tenseur B le long de la profondeur (3ème) dimension.

J'espère que cela aide quelqu'un d'autre qui pense à la même question en lisant ce livre blanc.

AshleyS
la source
yeah.perfect introduction. Ceci est concaténé dans le sens de la profondeur. Pas dans les directions spatiales.
Shamane Siriwardhana