Je suis en train de faire le tutoriel Udacity Deep Learning. Dans la leçon 3, ils parlent d'une convolution 1x1. Cette convolution 1x1 est utilisée dans Google Inception Module. J'ai du mal à comprendre ce qu'est une convolution 1x1.
J'ai aussi vu ce post de Yann Lecun.
Quelqu'un pourrait-il bien vouloir m'expliquer cela?
Réponses:
Supposons que j’ai une couche de convection qui délivre un tenseur en forme de où:(N,F,H,W)
Supposons que cette sortie alimente une couche de avec des filtres 1x1, un remplissage nul et une foulée 1. La sortie de cette couche de convection 1x1 aura alors une forme .F1 (N,F1,H,W)
Vous pouvez donc utiliser des filtres de convection 1x1 pour modifier la dimensionnalité dans l’espace du filtre. Si nous augmentons la dimensionnalité, si nous diminuons la dimensionnalité, dans la dimension du filtre.F1>F F1<F
En effet, dans l'article de Google Inception intitulé Going Deeper with Convolutions , ils déclarent (en gras, c'est le mien, pas l'auteur original):
Ainsi, dans l'architecture Inception, nous utilisons les filtres de convolution 1x1 pour réduire la dimensionnalité dans la dimension du filtre. Comme je l'ai expliqué ci-dessus, ces couches de convection 1x1 peuvent en général être utilisées pour modifier la dimensionnalité de l'espace de filtre (augmentation ou diminution) et dans l'architecture Inception, nous voyons l'efficacité de ces filtres 1x1 pour la réduction de la dimensionnalité, explicitement dans l'espace de dimension du filtre. , pas l'espace de dimension spatiale.
Peut-être existe-t-il d'autres interprétations des filtres de convergence 1x1, mais je préfère cette explication, en particulier dans le contexte de l'architecture Google Inception.
la source
Une convolution 1x1 mappe simplement un pixel d'entrée avec tous ses canaux à un pixel de sortie, sans rien regarder autour de lui. Il est souvent utilisé pour réduire le nombre de canaux de profondeur, car il est souvent très lent pour multiplier des volumes avec des profondeurs extrêmement grandes.
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 avec cette option, au lieu de tout multiplier par la force brute.
la source
num_weights = in_depth x out_depth x kernel_size = 256x256x4x4
. Dans le premier cas,num_weights = 256x64x1x1+64x265x4x4=256x64x17
. Prenez le ratio et cela donne 256/17 ~ 3.7. Consultez cette page papier pour une visualisation sur la relation entre les poids numériques et la profondeur d’entrée et de sortie. arxiv.org/pdf/1603.07285.pdfLa principale raison pour laquelle je n'ai pas compris les convolutions 1x1, c'est parce que je ne comprenais pas comment convolutions fonctionnaient réellement. Le facteur clé est le fonctionnement du calcul d'une convolution de plusieurs canaux / filtres. Pour comprendre cela, j'ai trouvé cette réponse utile également:any
https://datascience.stackexchange.com/questions/9175/how-do-subsequent-convolution-layers-work
En particulier, le type 2.2 est la description correcte d’une convolution.
Une autre réponse utile:
https://ai.stackexchange.com/questions/5769/in-a-cnn-does-each-new-filter-have-different-weights-for-each-input-channel-or
Cette réponse explique comment vous avez un filtre distinct pour chaque combinaison de canaux entrée / sortie . Après avoir calculé chacun de ces éléments, les résultats sont additionnés sur l’ axe du canal d’entrée en laissant le nombre de valeurs du canal de sortie .
Voici une vidéo que j'ai trouvée et qui m'a aidé à comprendre le fonctionnement d'une convolution 1x1.
https://www.coursera.org/lecture/convolutional-neural-networks/networks-in-networks-and-1x1-convolutions-ZTb8x
Voici les principales choses que j'en ai tirées:
la source
Je vais essayer d'expliquer de manière plus intuitive et plus brève avec des illustrations!
Un 1 * 1 conv (aka réseau dans le réseau )?
Supposons que vous saisissiez (n_H, n_W, n_c_prev). Vous pouvez considérer (1 * 1 * n_c_prev) comme un seul neurone (un réseau entièrement connecté - pourquoi N / w en N / w ) prenant des nombres (n_c_prev) dans l'entrée en les multipliant par (1 * 1 * n_c_prev ) puis en ajoutant puis en prenant ReLu & output (n_H, n_W) et si vous avez plusieurs filtres (n_c), alors la sortie serait (n_H, n_W, n_C).
Vous pouvez donc utiliser la couche de regroupement pour réduire les dimensions spatiales (n_H, n_W) et utiliser 1 * 1 conv pour réduire le n_c_prev (le nombre de canaux), ce qui enregistre beaucoup de calculs. Par exemple
Par conséquent, un emporter
Vous pouvez utiliser une couche de convolution 1x1 pour réduire n_C mais pas n_H, n_W.
Vous pouvez utiliser une couche de regroupement pour réduire n_H, n_W et n_C.
En d'autres termes,
la source
Une autre idée sur la réduction de la dimensionnalité dans le contexte des filtres 1x1:
Prenons par exemple une couche 4096x8x8 fc7 de FCN. Que se passe-t-il si la couche suivante (appelez-la fc8) est 2048x8x8 avec la taille de filtre 1? fc7 est très profond à l'intérieur du réseau, chacune de ses caractéristiques 4096 est sémantiquement riche, mais chaque neurone (par exemple, l'image d'entrée est 250x250x3) possède un grand champ récepteur. En d'autres termes, si un neurone est très actif, nous savons que quelque part dans son champ sémantique, une caractéristique correspondante est présente.
Prenons par exemple un neurone situé le plus à gauche dans FC8 avec un filtre 1x1. Il se connecte à tous les 4096 neurones / entités uniquement dans le même champ récepteur (coin supérieur gauche de l'image), chacun d'eux étant activé par une seule caractéristique. Certains d'entre eux (500 mêmes) sont très actifs. Si le neurone résultant est également très actif, cela signifie qu'il a probablement appris à identifier une ou plusieurs caractéristiques de ce champ réceptif. Après avoir effectué ceci 2048 fois pour les neurones les plus à gauche de la FC8, un certain nombre d’entre eux (par exemple 250) seront très actifs, ce qui signifie qu’ils ont «collecté» des caractéristiques du même champ récepteur à travers la FC7, et beaucoup très probablement plus de un.
Si vous continuez à réduire la dimensionnalité, un nombre décroissant de neurones apprendra un nombre croissant de caractéristiques issues du même champ réceptif. Et comme les paramètres spatiaux 8x8 restent les mêmes, nous ne modifions pas la "vue" de chaque neurone, nous ne diminuons donc pas la grossièreté spatiale.
Vous voudrez peut-être jeter un coup d'œil aux «réseaux entièrement convolutionnels» de Long, Shelhamer et Darrel.
la source
L'opération mathématique de convolution consiste à calculer le produit de deux fonctions (continues ou discrètes) sur toutes les positions possibles.
Les applications de traitement d’image des réseaux de neurones - y compris les réseaux de neurones de convolution - ont été examinées dans: [M. Egmont-Petersen, D. de Ridder, H. Handels. Traitement d'images avec des réseaux de neurones - une revue , Pattern Recognition , Vol. 35, n ° 10, pages 2279-2301, 2002].
la source