Je regarde l'architecture InceptionV3 (GoogLeNet) et je ne comprends pas pourquoi avons-nous besoin de couches conv1x1?
Je sais comment fonctionne la convolution, mais je constate un bénéfice avec une taille de patch> 1.
Vous pouvez penser à 1x1xD
la convolution comme technique de réduction de dimensionnalité lorsqu'elle est placée quelque part dans un réseau.
Si vous avez un volume d'entrée de 100x100x512
et vous le convoluez avec un ensemble de D
filtres chacun de taille 1x1x512
vous réduisez le nombre de fonctions de 512 à D. Le volume de sortie est donc 100x100xD
.
Comme vous pouvez le voir, (1x1x512)xD
la convolution est mathématiquement équivalente à une couche entièrement connectée. La principale différence est que, tandis que la couche FC nécessite que l'entrée ait une taille fixe, la couche convolutionnelle peut accepter en entrée tous les volumes avec une étendue spatiale supérieure ou égale à 100x100
.
UNE 1x1xD
la convolution peut remplacer n'importe quelle couche entièrement connectée en raison de cette équivalence.
En outre, 1x1xD
les circonvolutions réduisent non seulement les caractéristiques en entrée de la couche suivante, mais introduisent également de nouveaux paramètres et une nouvelle non-linéarité dans le réseau qui aideront à augmenter la précision du modèle.
Quand le 1x1xD
la convolution est placée à la fin d'un réseau de classification, elle agit exactement comme une couche FC, mais au lieu de la considérer comme une technique de réduction de dimensionnalité, il est plus intuitif de la considérer comme une couche qui produira un tenseur de forme WxHxnum_classes
.
L'étendue spatiale du tenseur de sortie (identifié par W
et H
) est dynamique et est déterminée par les emplacements de l'image d'entrée analysée par le réseau.
Si le réseau a été défini avec une entrée de 200x200x3
et nous lui donnons en entrée une image de cette taille, la sortie sera une carte avec W = H = 1
et profondeur = num_classes
. Mais, si l'image d'entrée a une étendue spatiale supérieure à 200x200
que le réseau convolutionnel analysera différents emplacements de l'image d'entrée (comme le fait une convolution standard) et produira un tenseur avec W > 1
et H > 1
. Ce n'est pas possible avec une couche FC qui contraint le réseau à accepter une entrée de taille fixe et à produire une sortie de taille fixe.
Une convolution 1x1 mappe simplement le pixel d'entrée à un pixel de sortie, sans rien regarder autour d'elle. Il est souvent utilisé pour réduire le nombre de canaux de profondeur, car il est souvent très lent de multiplier les volumes avec des profondeurs extrêmement importantes.
input (256 depth) -> 1x1 convolution (64 depth) -> 4x4 convolution (256 depth)
input (256 depth) -> 4x4 convolution (256 depth)
Celui du bas est environ 3,7 fois plus lent.
Théoriquement, le réseau de neurones peut "choisir" les "couleurs" d'entrée à utiliser, au lieu de tout multiplier par la force brute.