Cette question se résume à "comment fonctionnent exactement les couches de convolution .
Supposons que j'ai une image en niveaux de gris . L'image a donc un canal. Dans la première couche, j'applique une convolution avec des filtres et un remplissage. Ensuite, j'ai une autre couche de convolution avec convolutions et des filtres . Combien de cartes d'entités ai-je?3 × 3 k 1 5 × 5 k 2
Convolution de type 1
La première couche est exécutée. Après cela, j'ai cartes de fonctionnalités (une pour chaque filtre). Chacun d'eux a la taille . Chaque pixel a été créé en prenant pixels de l'image d'entrée rembourrée. n × m 3 ⋅ 3 = 9
Ensuite, la deuxième couche est appliquée. Chaque filtre unique est appliqué séparément à chacune des cartes d' entités . Il en des cartes d' pour chacune des cartes d' . Il y a donc cartes d' après la deuxième couche. Chaque pixel de chacune des nouvelles cartes d'entités a été créé en prenant "pixels" de la carte d'entités rembourrée d'avant.k 1 k 1 × k 2 5 ⋅ 5 = 25
Le système doit apprendre les .
Convolution de type 2.1
Comme auparavant: la première couche est exécutée. Après cela, j'ai cartes de fonctionnalités (une pour chaque filtre). Chacun d'eux a la taille . Chaque pixel a été créé en prenant pixels de l'image d'entrée rembourrée. n × m 3 ⋅ 3 = 9
Contrairement à avant: Ensuite, la deuxième couche est appliquée. Chaque filtre est appliqué à la même région, mais toutes les cartes d' entités précédentes. Il en des cartes d' au total après l'exécution de la deuxième couche. Chaque pixel de chacune des nouvelles cartes d' été créé en prenant "pixels" des cartes d' rembourrées d'avant.k 2 ⋅ 5 ⋅ 5 = 25 ⋅ k 2
Le système doit apprendre les .
Convolution de type 2.2
Comme ci-dessus, mais au lieu d'avoir paramètres par filtre qui doivent être appris et simplement copiés pour les autres cartes d' entrée, vous avez paramètres à apprendre.
Question
- Le type 1 ou le type 2 est-il généralement utilisé?
- Quel type est utilisé dans Alexnet ?
- Quel type est utilisé dans GoogLeNet ?
- Si vous dites type 1: Pourquoi les circonvolutions un sens? Ne multiplient-ils pas seulement les données par une constante?
- Si vous dites type 2: veuillez expliquer le coût quadratique ("Par exemple, dans un réseau de vision profonde, si deux couches convolutionnelles sont chaînées, toute augmentation uniforme du nombre de leurs filtres entraîne une augmentation quadratique du calcul")
Pour toutes les réponses, veuillez fournir des preuves (articles, manuels, documentation des cadres) que votre réponse est correcte.
Question bonus 1
Le regroupement est-il toujours appliqué uniquement par carte d'entités ou est-il également effectué sur plusieurs cartes d'entités?
Question bonus 2
Je suis relativement sûr que le type 1 est correct et je me suis trompé avec le papier GoogLe. Mais il y a aussi des circonvolutions 3D. Disons que vous avez 1337 cartes de caractéristiques de taille et que vous appliquez un filtre . Comment faites-vous glisser le filtre sur les cartes d'entités? (De gauche à droite, de haut en bas, de la première carte d'entités à la dernière carte d'entités?) Est-ce important tant que vous le faites de manière cohérente?3 × 4 × 5
Ma recherche
- J'ai lu les deux articles d'en haut, mais je ne sais toujours pas ce qui est utilisé.
- J'ai lu la documentation des lasagnes
- J'ai lu la documentation de theano
- J'ai lu les réponses sur Comprendre les réseaux de neurones convolutifs (sans suivre tous les liens)
- J'ai lu les réseaux neuronaux convolutionnels (LeNet) . Surtout la figure 1 me rend relativement sûr que le type 2.1 est le bon. Cela correspondrait également au commentaire «coût quadratique» dans GoogLe Net et à une expérience pratique que j'ai eue avec Caffee.
la source
Réponses:
Je ne suis pas sûr des alternatives décrites ci-dessus, mais la méthodologie couramment utilisée est:
Avant l'application de la non-linéarité, chaque sortie de filtre dépend linéairement de toutes les cartes d' avant dans le patch, vous vous retrouvez donc avec des filtres après les deuxièmes couches. Le nombre total de paramètres est de .k2 3˙3˙k1+k1˙5˙5˙k2
Bonus 1: La mise en commun se fait par carte d'entités, séparément.
Bonus 2: L'ordre de "glissement" n'a pas d'importance. En fait, chaque sortie est calculée sur la base de la couche précédente, de sorte que les réponses du filtre de sortie ne dépendent pas les unes des autres. Ils peuvent être calculés en parallèle.
la source
Je viens de me débattre avec cette même question pendant quelques heures. Je pensais que je partagerais l'insite qui m'a aidé à le comprendre.
La réponse est que les filtres de la deuxième couche convolutionnelle n'ont pas la même dimensionnalité que les filtres de la première couche. En général, le filtre doit avoir le même nombre de dimensions que ses entrées . Donc, dans la première couche conv, l'entrée a 2 dimensions (car c'est une image). Ainsi, les filtres ont également deux dimensions. S'il y a 20 filtres dans la première couche conv, la sortie de la première couche conv est une pile de 20 cartes d'entités 2D. Ainsi, la sortie de la première couche conv est en 3 dimensions, où la taille de la troisième dimension est égale au nombre de filtres dans la première couche.
Maintenant, cette pile 3D forme l'entrée de la deuxième couche conv. Étant donné que l'entrée de la deuxième couche est 3D, les filtres doivent également être 3D. Faites en sorte que la taille des filtres de la deuxième couche dans la troisième dimension soit égale au nombre de cartes d'entités qui étaient les sorties de la première couche.
Maintenant, vous vous retrouvez simplement sur les 2 premières dimensions; lignes et colonnes. Ainsi, la convolution de chaque filtre de 2e couche avec la pile de cartes d'entités (sortie de la première couche) donne une seule carte d'entités.
La taille de la troisième dimension de la sortie de la deuxième couche est donc égale au nombre de filtres dans la deuxième couche.
la source
Consultez cette conférence et cette visualisation
Habituellement, il est utilisé une convolution de type 2.1. Dans l'entrée, vous avez une image NxMx1, puis après la première convolution, vous obtiendrez N_1xM_1xk_1, donc votre image après la première convolution aura k_1 canaux. La nouvelle dimension N_1 et M_1 dépendra de votre foulée S et du rembourrage P: N_1 = (N - 3 + 2P) / S + 1, vous calculez M_1 par analogie. Pour la première couche conv, vous aurez des poids 3x3xk_1 + k_1. Il est ajouté k_1 pour les biais dans la fonction non linéaire.
Dans la deuxième couche, vous avez une image d'entrée de taille N_1xM_1xk_1, où k_1 est le nouveau nombre de canaux. Et après la deuxième convolution, vous obtenez une image N_2xM_2xk_2 (tableau). Vous avez 5x5xk_2xk_1 + k_2 paramètres dans la deuxième couche.
Pour une convolution 1x1 avec des filtres k_3 et une entrée NxMxC (C est le nombre de canaux d'entrée), vous obtiendrez une nouvelle image (tableau) NxMxk_3, donc 1x1 est logique. Ils ont été présentés dans cet article
Bonus 1: la mise en commun est appliquée par carte de fonctionnalités.
Pour plus de détails, veuillez consulter les diapositives du cours CNN sur Stanford - vous avez une bonne visualisation de la façon dont la convolution est sommée à partir de plusieurs canaux d'entrée.
la source
La première couche est composée de noyaux de taille pour donner cartes d' empilées en profondeur.k1 3⋅3⋅1 k1
La deuxième couche est constituée de noyaux de taille pour donner des cartes de caractéristiques qui sont empilées en profondeur.k2 5⋅5⋅k1 k2
C'est-à-dire que les noyaux d'une couche convolutionnelle s'étendent sur la profondeur de la sortie de la couche précédente.
Une couche avec couche convolutionnelle a en fait noyaux de taille .k n 1 ⋅ 1 ⋅ k n - 11×1 kn 1⋅1⋅kn−1
Spéculation:
La question bonus 2 n'est pas quelque chose que je connais, mais je suppose que le paramètre de profondeur dans la convolution devient une dimension supplémentaire.
Par exemple, si la sortie d'un calque est de taille , une convolution 3D avec remplissage donnera une sortie de taille m ⋅ n ⋅ k n + 1 ⋅ k nm⋅n⋅kn m⋅n⋅kn+1⋅kn
la source