Technologie

Une introduction complète à différents types de convolutions dans l'apprentissage en profondeur

Une introduction complète à différents types de convolutions dans l'apprentissage en profondeur


Vers une compréhension intuitive des convolutions à travers des visualisations

Si vous avez entendu parler de différents types de convolutions dans l'apprentissage approfondi (par exemple, 2D / 3D / 1x1 / Transposées / Dilatées (Atrous) / Séparables dans l'espace / Séparables en profondeur / Aplaties / Aplaties / Groupées / Convolution groupée / Convolution groupée), vous avez confondu leur signification. , cet article a été écrit pour que vous compreniez comment ils fonctionnent réellement.

Ici, dans cet article, je résume plusieurs types de convolution communément utilisés dans Deep Learning et tente de les expliquer de manière accessible à tous. Outre cet article, il existe plusieurs bons articles parmi d'autres sur ce sujet. Veuillez les vérifier (listés dans la référence).

J'espère que cet article pourra vous aider à développer votre intuition et à vous servir de référence utile pour vos études / recherches. S'il vous plaît n'hésitez pas à laisser des commentaires et des suggestions. Merci et amusez-vous! :)

Le contenu de cet article comprend:

  1. Convolution v.s. Corrélation croisée
  2. Convolution in Deep Learning (version monocanal, version multicanal)
  3. Convolution 3D
  4. 1 x 1 convolution
  5. Arithmétique de convolution
  6. Convolution transposée (déconvolution, artefacts en damier)
  7. Convolution diluée (convolution atrous)
  8. Séparation séparable (convolution séparable dans l'espace, convolution en profondeur)
  9. Convolution aplatie
  10. Convolution groupée
  11. Convolution groupée mélangée
  12. Convolution groupée par points

1. Convolution v.s. Corrélation croisée

La convolution est une technique largement utilisée dans le traitement du signal, le traitement d'images et d'autres domaines de l'ingénierie et des sciences. Dans Deep Learning, une sorte d’architecture de modèle, CNN (Convolutional Neural Network), tire son nom de cette technique. Cependant, la convolution dans l'apprentissage en profondeur est essentiellement la corrélation croisée dans le traitement du signal / image. Il y a une différence subtile entre ces deux opérations.

Sans plonger trop dans les détails, voici la différence. Dans le traitement du signal / image, la convolution est définie comme suit:

1*Tg4Eh8XvDI5M5pjA0R4RRQ - Une introduction complète à différents types de convolutions dans l'apprentissage en profondeur

Il est défini comme l’intégrale du produit des deux fonctions après l’inversion et le décalage de l’une. La visualisation suivante a démontré l'idée.

Convolution dans le traitement du signal. Le filtre g est inversé puis glisse le long de l’axe horizontal. Pour chaque position, nous calculons l'aire de l'intersection entre f et g inversé. La zone d'intersection est la valeur de convolution à cette position spécifique. L'image est adoptée et modifiée à partir de ce lien.

Ici, la fonction g est le filtre. C’est inversé, puis glisse le long de l’axe horizontal. Pour chaque position, nous calculons l'aire de l'intersection entre F et inversé g. Cette zone d'intersection est la valeur de convolution à cette position spécifique.

D'autre part, la corrélation croisée est connue sous le nom de produit à points glissants ou de produit intérieur glissant à deux fonctions. Le filtre en corrélation croisée n'est pas inversé. Il glisse directement dans la fonction f. La zone d'intersection entre F et g est la corrélation croisée. Le graphique ci-dessous montre la différence entre corrélation et corrélation croisée.

Différence entre convolution et corrélation croisée dans le traitement du signal. L'image est adoptée et modifiée à partir de Wikipedia.

Dans Deep Learning, les filtres en convolution ne sont pas inversés. Rigoureusement, c’est une corrélation croisée. Nous effectuons essentiellement la multiplication et l’addition d’éléments. Mais c’est une convention de simplement appeler cela de la convolution en apprentissage en profondeur. C'est bien parce que les poids des filtres sont appris pendant l'entraînement. Si, dans l'exemple ci-dessus, la fonction inversée g est la bonne, alors, après avoir appris le filtre, le filtre appris ressemblera à la fonction inversée g. Ainsi, il n'est pas nécessaire d'inverser le filtre avant l'entraînement, comme dans la convolution réelle.

2. Convolution dans l'apprentissage en profondeur

La convolution a pour but d'extraire des fonctionnalités utiles de l'entrée. En traitement d'image, il existe une grande variété de filtres que l'on peut choisir pour la convolution. Chaque type de filtres permet d’extraire différents aspects ou caractéristiques de l’image d’entrée, par ex. bords horizontaux / verticaux / diagonaux. De même, dans le réseau de neurones convolutifs, différentes caractéristiques sont extraites par convolution à l'aide de filtres dont les poids sont automatiquement appris pendant l'entraînement. Toutes ces caractéristiques extraites sont ensuite «combinées» pour prendre des décisions.

La convolution présente quelques avantages, tels que le partage de pondérations et l'invariant de traduction. La convolution prend également en compte la relation spatiale des pixels. Celles-ci pourraient être très utiles, en particulier dans de nombreuses tâches de vision par ordinateur, car elles impliquent souvent l’identification d’objets dans lesquels certains composants ont une certaine relation spatiale avec d’autres composants (par exemple, le corps d’un chien est généralement relié à une tête, quatre pattes et une queue).

2.1. Convolution: la version monocanal

Convolution pour un seul canal. L'image est adoptée à partir de cela lien.

Dans Deep Learning, la convolution est la multiplication et l'addition élément par élément. Pour une image avec 1 canal, la convolution est illustrée dans la figure ci-dessous. Ici le filtre est une matrice 3 x 3 avec élément [[0, 1, 2], [2, 2, 0], [0, 1, 2]]. Le filtre glisse à travers l'entrée. À chaque position, il effectue une multiplication et une addition élément par élément. Chaque position de glissement se termine par un numéro. Le résultat final est alors une matrice 3 x 3. (Notez que stride = 1 et padding = 0 dans cet exemple. Ces concepts seront décrits dans la section Arithmétique ci-dessous.

2.2. Convolution: la version multicanal

Dans de nombreuses applications, nous traitons des images avec plusieurs canaux. Un exemple typique est l'image RVB. Chaque canal RVB met en évidence différents aspects de l'image d'origine, comme illustré dans l'image suivante.

Différents canaux soulignent différents aspects de l'image brute. L'image a été prise à Yuanyang, Yunnan, Chine.

Les couches du réseau de neurones de convolution sont un autre exemple de données multicanaux. Une couche réseau convolutif est généralement composée de plusieurs canaux (généralement des centaines de canaux). Chaque canal décrit différents aspects de la couche précédente. Comment pouvons-nous faire la transition entre les couches avec une profondeur différente? Comment pouvons-nous transformer une couche avec la profondeur n à la couche suivante avec la profondeur m?

Avant de décrire le processus, nous aimerions clarifier quelques terminologies: couches, canaux, cartes de caractéristiques, filtres et noyaux. D'un point de vue hiérarchique, les concepts de couches et de filtres sont au même niveau, alors que les canaux et les noyaux sont à un niveau inférieur. Les chaînes et les cartes de caractéristiques sont la même chose. Une couche peut avoir plusieurs canaux (ou cartes de caractéristiques): une couche d'entrée a 3 canaux si les entrées sont des images RVB. «Canal» est généralement utilisé pour décrire la structure d'une «couche». De même, le terme "noyau" est utilisé pour décrire la structure d’un "filtre".

Différence entre «couche» («filtre») et «canal» («noyau»).

La différence entre le filtre et le noyau est un peu délicate. Parfois, ils sont utilisés de manière interchangeable, ce qui peut créer des confusions. Essentiellement, ces deux termes présentent une différence subtile. Un «noyau» fait référence à un tableau 2D de poids. Le terme «filtre» désigne les structures 3D de plusieurs noyaux empilés. Pour un filtre 2D, le filtre est identique au noyau. Mais pour un filtre 3D et la plupart des convolutions en apprentissage en profondeur, un filtre est une collection de noyaux. Chaque noyau est unique et met l'accent sur différents aspects du canal d'entrée.

Avec ces concepts, la convolution multicanal va comme suit. Chaque noyau est appliqué sur un canal d'entrée de la couche précédente pour générer un canal de sortie. Ceci est un processus par noyau. Nous répétons ce processus pour tous les noyaux afin de générer plusieurs canaux. Chacun de ces canaux est ensuite ajouté pour former un seul canal de sortie. L'illustration suivante devrait rendre le processus plus clair.

Ici, la couche d'entrée est une matrice de 5 x 5 x 3, avec 3 canaux. Le filtre est une matrice de 3 x 3 x 3. Tout d'abord, chacun des noyaux du filtre est appliqué séparément à trois canaux du calque d'entrée. Trois convolutions sont effectuées, ce qui donne 3 canaux de taille 3 x 3.

Première étape de la convolution 2D pour les multicanaux: chacun des noyaux du filtre est appliqué à trois canaux de la couche d’entrée séparément. L'image est adoptée à partir de ce lien.

Ensuite, ces trois canaux sont additionnés (ajout d’éléments) pour ne former qu’un seul canal (3 x 3 x 1). Ce canal est le résultat de la convolution de la couche d'entrée (matrice 5 x 5 x 3) à l'aide d'un filtre (matrice 3 x 3 x 3).

La deuxième étape de la convolution 2D pour les multi-canaux: ces trois canaux sont ensuite additionnés (addition élément par élément) pour ne former qu’un seul canal. L'image est adoptée à partir de ce lien.

De manière équivalente, nous pouvons penser à ce processus comme faisant glisser une matrice de filtre 3D à travers la couche d'entrée. Notez que la couche d’entrée et le filtre ont la même profondeur (numéro de canal = numéro de noyau). Le filtre 3D ne se déplace que dans les 2 sens, hauteur et largeur de l’image (c’est pourquoi cette opération est appelée convolution 2D alors qu’un filtre 3D est utilisé pour traiter les données volumétriques 3D). À chaque position de glissement, nous effectuons une multiplication et une addition élément par élément, ce qui donne un nombre unique. Dans l'exemple ci-dessous, le glissement s'effectue à 5 positions horizontalement et 5 positions verticalement. Globalement, nous obtenons un seul canal de sortie.

Une autre façon de penser à la convolution 2D: considérer le processus comme un glissement d’une matrice de filtre 3D à travers le calque d’entrée. Notez que la couche d’entrée et le filtre ont la même profondeur (numéro de canal = numéro de noyau). Le filtre 3D ne se déplace que dans les 2 sens, hauteur et largeur de l’image (c’est pourquoi cette opération est appelée convolution 2D alors qu’un filtre 3D est utilisé pour traiter les données volumétriques 3D). La sortie est une matrice à une couche.

Nous pouvons maintenant voir comment on peut faire des transitions entre les couches avec une profondeur différente. Disons que la couche d’entrée a Vacarme canaux, et nous voulons que la couche de sortie a Dout canaux. Ce que nous devons faire, c'est simplement appliquer Dout filtres à la couche d'entrée. Chaque filtre a Vacarme graines. Chaque filtre fournit un canal de sortie. Après l'application Dout filtres, nous avons Dout canaux, qui peuvent ensuite être empilés pour former la couche de sortie.

Convolution 2D standard. Cartographie d'une couche avec la profondeur Vacarme vers une autre couche avec profondeur Dout, en utilisant des filtres Dout.

3. Convolution 3D

Dans la dernière illustration de la section précédente, nous voyons que nous avons effectivement effectué une convolution sur un volume 3D. Mais généralement, nous appelons toujours cette opération convolution 2D dans Deep Learning. C’est une convolution 2D sur une donnée volumétrique 3D. La profondeur du filtre est identique à la profondeur de la couche d'entrée. Le filtre 3D ne se déplace que dans les 2 sens (hauteur et largeur de l'image). La sortie d'une telle opération est une image 2D (avec 1 canal seulement).

Naturellement, il existe des convolutions 3D. Ils sont la généralisation de la convolution 2D. Ici, en convolution 3D, la profondeur du filtre est inférieure à celle de la couche en entrée (taille du noyau <taille du canal). En conséquence, le filtre 3D peut se déplacer dans toutes les 3 directions (hauteur, largeur, canal de l'image). À chaque position, la multiplication par élément et l'addition fournissent un nombre. Comme le filtre glisse dans un espace 3D, le les numéros de sortie sont également disposés dans un espace 3D. La sortie est alors une donnée 3D.

En convolution 3D, un filtre 3D peut se déplacer dans toutes les 3 directions (hauteur, largeur, canal de l'image). À chaque position, la multiplication par élément et l'addition fournissent un nombre. Comme le filtre glisse dans un espace 3D, le les numéros de sortie sont également disposés dans un espace 3D. La sortie est alors une donnée 3D.

Semblables aux convolutions 2D qui codent les relations spatiales d'objets dans un domaine 2D, les convolutions 3D peuvent décrire les relations spatiales d'objets dans l'espace 3D. Une telle relation 3D est importante pour certaines applications, telles que les segmentations / reconstructions 3D d'imagerie biomédicale, par exemple. Scanner et IRM où des objets tels que des vaisseaux sanguins sillonnent dans l’espace 3D.

4. 1 x 1 convolution

Puisque nous avons parlé du fonctionnement en profondeur dans la section précédente de la convolution 3D, examinons une autre opération intéressante, la convolution 1 x 1.

Vous pouvez vous demander pourquoi cela est utile. Devons-nous simplement multiplier un nombre pour chaque nombre de la couche d'entrée? Oui et non. L'opération est triviale pour les couches avec un seul canal. Là, on multiplie chaque élément par un nombre.

Les choses deviennent intéressantes si la couche d'entrée a plusieurs canaux. L'image suivante illustre le fonctionnement d'une convolution 1 x 1 pour une couche d'entrée de dimension H x W x D. Après une convolution 1 x 1 avec une taille de filtre de 1 x 1 x D, le canal de sortie correspond à la dimension H x W x appliquer N telles convolutions 1 x 1, puis concaténer les résultats ensemble, nous pourrions avoir une couche de sortie de dimension H x W x N.

Convolution 1 x 1, où la taille du filtre est 1 x 1 x D.

Initialement, 1 x 1 convolutions étaient proposées dans le document Réseau-dans-réseau. Ils ont ensuite été très utilisés dans le document Google Inception. Quelques avantages de 1 x 1 convolutions sont:

  • Réduction de la dimensionnalité pour des calculs efficaces
  • Incorporation efficace dans les petites dimensions ou mise en commun des fonctionnalités
  • Appliquer à nouveau la non-linéarité après la convolution

Les deux premiers avantages peuvent être observés dans l'image ci-dessus. Après une convolution de 1 x 1, nous réduisons considérablement la dimension en profondeur. Disons que si l'entrée d'origine a 200 canaux, la convolution 1 x 1 incorporera ces canaux (caractéristiques) dans un seul canal. Le troisième avantage est que, après la convolution 1 x 1, une activation non linéaire telle que ReLU peut être ajoutée. La non-linéarité permet au réseau d’apprendre des fonctions plus complexes.

Le document Inception de Google décrit ces avantages:

«Un gros problème avec les modules ci-dessus, du moins sous cette forme naïve, est que même un nombre modeste de convolutions 5x5 peut être prohibitif au-dessus d'une couche convolutive avec un grand nombre de filtres.
Cela nous amène à la deuxième idée de l’architecture proposée: appliquer judicieusement des réductions de dimensions et des projections chaque fois que les exigences en calcul augmenteraient trop. Ceci est basé sur le succès des imbrications: même les imbriquées de petites dimensions peuvent contenir beaucoup d’informations sur un bloc d’image relativement grand… C’est-à-dire que 1 x 1 convolutions sont utilisées pour calculer les réductions avant les coûteuses convolutions 3 x 3 et 5 x 5. En plus d'être utilisées en tant que réductions, elles incluent également l'utilisation de l'activation linéaire rectifiée, ce qui en fait un double objectif. ”

Un point de vue intéressant sur la convolution 1 x 1 vient de Yann LeCun «Dans les réseaux convolutionnels, il n’existe pas de« couches entièrement connectées ». Il n'y a que des couches de convolution avec des noyaux de convolution 1x1 et une table de connexion complète. ”

5. Arithmétique de convolution

Nous savons maintenant comment traiter la profondeur dans la convolution. Passons maintenant à la gestion de la convolution dans les deux autres directions (hauteur et largeur), ainsi qu’à l’importante arithmétique de convolution.

Voici quelques terminologies:

  • Taille du noyau: le noyau est discuté dans la section précédente. La taille du noyau définit le champ de vision de la convolution.
  • Stride: définit la taille de pas du noyau lors du défilement de l'image. Stride of 1 signifie que le noyau glisse pixel par pixel dans l’image. Stride of 2 signifie que le noyau glisse dans l’image en se déplaçant de 2 pixels par étape (c’est-à-dire en ignorant 1 pixel). Nous pouvons utiliser stride (> = 2) pour sous-échantillonner une image.
  • Padding: le padding définit le traitement de la bordure d'une image. Une convolution complétée (le même remplissage dans Tensorflow) maintiendra les dimensions de sortie spatiales égales à l’image d’entrée, en complétant le cas échéant les 0 autour des limites de l’entrée. En revanche, la convolution non rajoutée (remplissage «valide» dans Tensorflow) n’effectue la convolution que sur les pixels de l’image en entrée, sans addition de 0 autour des limites de l’entrée. La taille de sortie est inférieure à la taille d'entrée.

Cette illustration suivante décrit une convolution 2D utilisant une taille de noyau de 3, une foulée de 1 et un remplissage de 1.

Il existe un excellent article sur l'arithmétique détaillée («Un guide sur l'arithmétique de convolution pour un apprentissage en profondeur»). Vous pouvez vous y reporter pour obtenir des descriptions détaillées et des exemples de différentes combinaisons de taille de noyau, de foulée et de remplissage. Ici, je viens de résumer les résultats pour le cas le plus général.

Pour une image d'entrée de taille i, de noyau k, de remplissage de p et de foulée de s, l'image de sortie de la convolution a la taille o:

1*T2rAHZD0fQIaWOOPPMvZTQ - Une introduction complète à différents types de convolutions dans l&#39;apprentissage en profondeur

6. Convolution transposée (déconvolution)

Pour de nombreuses applications et dans de nombreuses architectures de réseau, nous souhaitons souvent effectuer des transformations allant dans le sens opposé d’une convolution normale, c’est-à-dire que nous souhaitons effectuer un échantillonnage à la hausse. Quelques exemples incluent la génération d’images haute résolution et la cartographie de la carte des caractéristiques de faible dimension dans un espace de grande dimension, telle que la codification automatique ou la segmentation sémantique. (Dans le dernier exemple, la segmentation sémantique commence par extraire des cartes de caractéristiques dans le codeur, puis restaure la taille de l'image d'origine dans le décodeur afin qu'il puisse classifier chaque pixel de l'image d'origine.)

Traditionnellement, on pouvait réaliser un sur-échantillonnage en appliquant des schémas d'interpolation ou en créant des règles manuellement. Les architectures modernes telles que les réseaux de neurones, par contre, ont tendance à laisser le réseau apprendre automatiquement la transformation appropriée, sans intervention humaine. Pour y parvenir, nous pouvons utiliser la convolution transposée.

La convolution transposée est également connue dans la littérature sous le nom de «déconvolution» ou «convolution à pas fractionné». Cependant, il convient de noter que le nom de «déconvolution» est moins approprié, car la convolution transposée n’est pas la déconvolution réelle telle que définie dans le traitement du signal / image. Techniquement parlant, la déconvolution dans le traitement du signal inverse l’opération de convolution. Ce n'est pas le cas ici. Pour cette raison, certains auteurs s'opposent vivement à l'appel d'une convolution transposée en tant que déconvolution. Les gens appellent cela la déconvolution principalement à cause de la simplicité. Nous verrons plus tard pourquoi l'appel d'une opération de type convolution transposée est naturel et plus approprié.

Il est toujours possible de mettre en œuvre une convolution transposée avec une convolution directe. Pour un exemple dans l'image ci-dessous, nous appliquons une convolution transposée avec un noyau 3 x 3 sur une entrée 2 x 2 complétée avec une bordure 2 x 2 de zéros en utilisant les pas d'unité. La sortie suréchantillonnée est au format 4 x 4.

Échantillonnage croissant d'une entrée 2 x 2 sur une sortie 4 x 4. L'image est adoptée à partir de ce lien.

Chose intéressante, on peut mapper la même image d'entrée 2 x 2 sur une taille d'image différente, en appliquant un rembourrage et une foulée fantaisie. Ci-dessous, la convolution transposée est appliquée sur la même entrée 2 x 2 (avec un zéro inséré entre les entrées) complétée par une bordure 2 x 2 de zéros en utilisant les pas d'unité. La sortie est maintenant au format 5 x 5.

Échantillonnage croissant d'une entrée 2 x 2 sur une sortie 5 x 5. L'image est adoptée à partir de ce lien.

Voir la convolution transposée dans les exemples ci-dessus pourrait nous aider à construire certaines intuitions. Mais pour généraliser son application, il est intéressant de voir comment elle est mise en œuvre par la multiplication matricielle par ordinateur. À partir de là, nous pouvons également voir pourquoi «convolution transposée» est un nom approprié.

En convolution, définissons C comme notre noyau, Grand comme image d'entrée, Petit comme image de sortie de convolution. Après la convolution (multiplication de matrice), nous sous-échantillonnons la grande image en une petite image de sortie. L’implémentation de la convolution dans la multiplication matricielle est la suivante: C X Grand = petit.

L'exemple suivant montre comment une telle opération fonctionne. Il aplatit l'entrée dans une matrice de 16 x 1 et transforme le noyau en une matrice éparse (4 x 16). La multiplication de la matrice est ensuite appliquée entre la matrice creuse et l'entrée aplatie. Après cela, la matrice résultante (4 x 1) est ensuite reconvertie en une sortie 2 x 2.

Multiplication matricielle pour convolution: d'une grande image d'entrée (4 x 4) à une petite image de sortie (2 x 2).

Maintenant, si on multiplie la transposition de la matrice CT des deux côtés de l'équation, et utiliser la propriété que la multiplication d'une matrice avec sa matrice transposée donne une matrice d'unité, alors nous avons la formule suivante CT x Petit = Grand, comme illustré dans la figure ci-dessous.

Multiplication matricielle pour convolution: d'une petite image d'entrée (2 x 2) à une grande image de sortie (4 x 4).

Comme vous pouvez le voir ici, nous effectuons un sur-échantillonnage d'une petite image à une grande image. C'est ce que nous voulons réaliser. Et maintenant, vous pouvez également voir d'où vient le nom «convolution transposée».

L'arithmétique générale pour la convolution transposée se trouve dans les relations 13 et 14 de cet excellent article («Guide de l'arithmétique de convolution pour un apprentissage en profondeur»).

6.1. Artefacts en damier.

Les artefacts en damier sont un comportement désagréable observé lors de l’utilisation de la convolution transposée.

Quelques exemples d'artefacts en damier. Les images sont adoptées à partir de cet article.

Le document «Déconvolution et artefacts en damier» contient une excellente description de ce comportement. S'il vous plaît consulter cet article pour plus de détails. Ici, je viens de résumer quelques points clés.

Les artefacts en damier résultent d'un «chevauchement inégal» de la convolution transposée. Un tel chevauchement met davantage la peinture métaphorique à certains endroits qu'à d'autres.

Dans l'image ci-dessous, le calque supérieur est le calque d'entrée et le calque inférieur est le calque de sortie après convolution transposée. Lors de la convolution transposée, une couche de petite taille est mappée sur une couche de taille supérieure.

Dans l'exemple (a), la foulée est égale à 1 et la taille du fichier est égale à 2. Comme indiqué en rouge, le premier pixel de l'entrée correspond aux premier et second pixels de la sortie. Comme indiqué en vert, le deuxième pixel de l'entrée correspond aux deuxième et troisième pixels de la sortie. Le deuxième pixel de la sortie reçoit des informations des premier et deuxième pixels de l’entrée. Globalement, les pixels de la partie centrale de la sortie reçoivent la même quantité d’informations de l’entrée. Ici, il existe une région où les noyaux se chevauchent. Lorsque la taille du filtre est augmentée à 3 dans l'exemple (b), la partie centrale qui reçoit la plupart des informations est réduite. Mais ce n’est peut-être pas grave, car le chevauchement est encore égal. Les pixels dans la partie centrale de la sortie reçoivent la même quantité d'informations de l'entrée.

L'image est adoptée et modifiée à partir du papier (lien).

Passons maintenant à l'exemple ci-dessous: stride = 2. Dans l'exemple (a) où filter size = 2, tous les pixels de la sortie reçoivent la même quantité d'informations provenant de l'entrée. Ils reçoivent tous des informations d'un seul pixel sur l'entrée. Il n'y a pas de chevauchement de convolution transposée ici.

L'image est adoptée et modifiée à partir du papier (lien).

Si nous modifions la taille du filtre à 4 dans l'exemple (b), la région régulièrement recouverte se rétrécit. Mais on peut quand même utiliser la partie centrale de la sortie comme sortie valide, chaque pixel recevant la même quantité d’informations de l’entrée.

Cependant, les choses deviennent intéressantes si nous modifions la taille du filtre en 3 et 5 dans l'exemple (c) et (d). Dans ces deux cas, chaque pixel de la sortie reçoit une quantité d'informations différente de celle des pixels adjacents. On ne peut pas trouver une région continue et se chevauchant uniformément sur la sortie.

La convolution transposée présente un chevauchement inégal lorsque la taille du filtre n'est pas divisible par la foulée. Ce «chevauchement inégal» met plus de peinture à certains endroits que d’autres, créant ainsi des effets de damier. En fait, la région inégalement recouverte a tendance à être plus extrême dans deux dimensions. Là, deux modèles se multiplient ensemble, l'inégalité se corrige.

Deux choses pourraient être faites pour réduire ces artefacts, tout en appliquant une convolution transposée. Tout d’abord, assurez-vous d’utiliser une taille de fichier divisée par votre foulée, en évitant le problème de chevauchement. Deuxièmement, on peut utiliser une convolution transposée avec stride = 1, ce qui permet de réduire les effets de damier. Cependant, les artefacts peuvent toujours filtrer, comme le montrent de nombreux modèles récents.

Le document propose en outre une meilleure approche de sur-échantillonnage: redimensionner d'abord l'image (en utilisant une interpolation du plus proche voisin ou une interpolation bilinéaire), puis une couche de convolution. Ce faisant, les auteurs évitent les effets de damier. Vous voudrez peut-être l'essayer pour vos applications.

7. Convolution diluée (convolution atrous)

La convolution diluée a été introduite dans le document (lien) et dans le document «Agrégation de contexte multi-échelle par convolutions dilatées» (lien).

C'est la convolution standard discrète:

1*nfD Cw0HrJ2oTa34wV927Q - Une introduction complète à différents types de convolutions dans l&#39;apprentissage en profondeur
La convolution standard.

La convolution dilatée suit:

1*h1oxT0rHBvv04uai3IvfDw - Une introduction complète à différents types de convolutions dans l&#39;apprentissage en profondeur

Quand l = 1, la convolution dilatée devient la convolution standard.

Intuitivement, les convolutions dilatées «gonflent» le noyau en insérant des espaces entre les éléments du noyau. Ce paramètre supplémentaire l (taux de dilatation) indique à quel point nous voulons élargir le noyau. Les implémentations peuvent varier, mais il y a généralement l-1 espaces insérés entre les éléments du noyau. L'image suivante montre la taille du noyau lorsque l = 1, 2, et 4.

Champ réceptif pour la convolution dilatée. Nous observons essentiellement un grand champ de réception sans ajouter de coûts supplémentaires.

Dans l'image, les points rouges 3 x 3 indiquent qu'après la convolution, l'image de sortie est avec 3 x 3 pixels. Bien que les trois circonvolutions dilatées fournissent la sortie avec la même dimension, le champ de réception observé par le modèle est radicalement différent. Le réceptif déposé est 3 x 3 pour l = 1. C'est 7 x 7 pour l = 2. Le réceptif déposé augmente à 15 x 15 pour l = 3. Fait intéressant, le nombre de paramètres associés à ces opérations est essentiellement identique. Nous «observons» un grand dossier réceptif sans ajouter de coûts supplémentaires. De ce fait, la convolution dilatée est utilisée pour augmenter à moindre coût le champ de réception des unités de sortie sans augmenter la taille du noyau, ce qui est particulièrement efficace lorsque plusieurs convolutions dilatées sont empilées les unes après les autres.

Les auteurs de l’article «Agrégation de contextes multi-échelles par convolutions dilatées» construisent un réseau à partir de plusieurs couches de convolutions dilatées, où le taux de dilatation l augmente de façon exponentielle à chaque couche. En conséquence, le champ de réception effectif augmente de façon exponentielle alors que le nombre de paramètres ne croît que de manière linéaire avec des couches!

La convolution dilatée dans le papier est utilisée pour agréger systématiquement des informations contextuelles multi-échelles sans perte de résolution. Le document montre que le module proposé augmente la précision des systèmes de segmentation sémantique à la pointe de la technologie à cette époque (2016). S'il vous plaît consulter le papier pour plus d'informations.

8. Convolutions séparables

Les convolutions séparables sont utilisées dans certaines architectures de réseaux neuronaux, telles que MobileNet (Link). On peut effectuer une convolution séparable spatialement (convolution séparable spatialement) ou en profondeur (convolution séparable en profondeur).

8.1. Convolutions séparables dans l'espace

La convolution séparable dans l’espace agit sur les dimensions spatiales 2D des images, c’est-à-dire la hauteur et la largeur. Conceptuellement, la convolution spatialement séparable décompose une convolution en deux opérations distinctes. Pour un exemple présenté ci-dessous, un noyau Sobel, qui est un noyau 3x3, est divisé en un noyau 3x1 et 1x3.

Un noyau Sobel peut être divisé en un noyau 3 x 1 et un noyau 1 x 3.

En convolution, le noyau 3x3 se convole directement avec l'image. Dans une convolution spatialement séparable, le noyau 3x1 se convole d'abord avec l'image. Ensuite, le noyau 1x3 est appliqué. Cela nécessiterait 6 paramètres au lieu de 9 tout en effectuant les mêmes opérations.

De plus, il faut moins de multiplications de matrice en convolution séparable dans l’espace que de convolution. Pour un exemple concret, la convolution sur une image 5 x 5 avec un noyau 3 x 3 (stride = 1, padding = 0) nécessite de scanner le noyau à 3 positions horizontalement (et 3 positions verticalement). Soit 9 positions au total, indiquées par les points de l’image ci-dessous. À chaque position, 9 multiplications par élément sont appliquées. Dans l’ensemble, c’est 9 x 9 = 81 multiplications.

Convolution standard avec 1 canal.

D'autre part, pour la convolution spatialement séparable, nous appliquons d'abord un filtre 3 x 1 sur l'image 5 x 5. Nous analysons ce noyau à 5 positions horizontalement et 3 positions verticalement. C'est 5 x 3 = 15 positions au total, indiquées par des points sur l’image ci-dessous. À chaque position, 3 multiplications par élément sont appliquées. C'est 15 x 3 = 45 multiplications. Nous avons maintenant obtenu une matrice 3 x 5. Cette matrice est maintenant convolutionnée avec un noyau de 1 x 3, qui scanne la matrice à 3 positions horizontalement et 3 positions verticalement. Pour chacune de ces 9 positions, 3 multiplications par élément sont appliquées. Cette étape nécessite 9 x 3 = 27 multiplications. Ainsi, dans l’ensemble, la convolution séparable dans l’espace prend 45 + 27 = 72 multiplications, ce qui est inférieur à la convolution.

Convolution séparable dans l'espace avec 1 canal.

Généralisons un peu les exemples ci-dessus. Supposons maintenant que nous appliquons des convolutions sur une image N x N avec un noyau m x m, avec stride = 1 et padding = 0. La convolution traditionnelle nécessite (N-2) x (N-2) x m x m multiplications. La convolution spatiale séparable nécessite N x (N-2) x m + (N-2) x (N-2) x m = (2N-2) x (N-2) x m multiplications. Le rapport des coûts de calcul entre la convolution spatialement séparable et la convolution standard est

Pour les couches où la taille de l'image N est supérieure à la taille du filtre (N >> m), ce rapport devient 2 / m. Cela signifie que dans cette situation asymptotique (N >> m), le coût de calcul d'une convolution séparable dans l'espace est de 2/3 de la convolution standard pour un filtre 3 x 3. C'est 2/5 pour un filtre 5 x 5, 2/7 pour un filtre 7 x 7, et ainsi de suite.

Bien que les convolutions spatialement séparables réduisent les coûts, il est rarement utilisé dans l'apprentissage en profondeur. Une des raisons principales est que tous les noyaux ne peuvent pas être divisés en deux, des noyaux plus petits. Si nous remplaçons toutes les convolutions traditionnelles par la convolution spatialement séparable, nous nous limitons à la recherche de tous les noyaux possibles pendant l’entraînement. Les résultats de l'entraînement peuvent être sous-optimaux.

8.2. Convolutions séparables en profondeur

Passons maintenant aux convolutions séparables en profondeur, qui sont beaucoup plus couramment utilisées dans l’apprentissage en profondeur (par exemple, dans MobileNet et Xception). Les convolutions séparables en profondeur sont composées de deux étapes: les convolutions en profondeur et les 1x1.

Avant de décrire ces étapes, il convient de revenir sur la convolution 2D et la convolution 1 x 1 dont nous avons parlé dans mes sections précédentes. Récapitulons rapidement les convolutions 2D standard. Par exemple, supposons que la couche d’entrée ait une taille de 7 x 7 x 3 (hauteur x largeur x canaux) et que le filtre ait une taille de 3 x 3 x 3. Après la convolution 2D avec un filtre, la couche de sortie de taille 5 x 5 x 1 (avec seulement 1 canal).

Convolution 2D standard pour créer une sortie avec 1 couche, en utilisant 1 filtre.

En règle générale, plusieurs filtres sont appliqués entre deux couches de réseau neuronal. Disons que nous avons 128 filtres ici. Après avoir appliqué ces 128 convolutions 2D, nous avons 128 cartes de sortie 5 5 x 5 x 1. Nous empilons ensuite ces cartes dans une seule couche de taille 5 x 5 x 128. Ce faisant, nous transformons la couche d'entrée (7 x 7 x 3) en couche de sortie (5 x 5 x 128). The spatial dimensions, i.e. height & width, are shrunk, while the depth is extended.

Standard 2D convolution to create output with 128 layer, using 128 filters.

Now with depthwise separable convolutions, let’s see how we can achieve the same transformation.

First, we apply depthwise convolution to the input layer. Instead of using a single filter of size 3 x 3 x 3 in 2D convolution, we used 3 kernels, separately. Each filter has size 3 x 3 x 1. Each kernel convolves with 1 channel of the input layer (1 channel only, not all channels!). Each of such convolution provides a map of size 5 x 5 x 1. We then stack these maps together to create a 5 x 5 x 3 image. After this, we have the output with size 5 x 5 x 3. We now shrink the spatial dimensions, but the depth is still the same as before.

Depthwise separable convolution — first step: Instead of using a single filter of size 3 x 3 x 3 in 2D convolution, we used 3 kernels, separately. Each filter has size 3 x 3 x 1. Each kernel convolves with 1 channel of the input layer (1 channel only, not all channels!). Each of such convolution provides a map of size 5 x 5 x 1. We then stack these maps together to create a 5 x 5 x 3 image. After this, we have the output with size 5 x 5 x 3.

As the second step of depthwise separable convolution, to extend the depth, we apply the 1x1 convolution with kernel size 1x1x3. Convolving the 5 x 5 x 3 input image with each 1 x 1 x 3 kernel provides a map of size 5 x 5 x 1.

Thus, after applying 128 1x1 convolutions, we can have a layer with size 5 x 5 x 128.

Depthwise separable convolution — second step: apply multiple 1 x 1 convolutions to modify depth.

With these two steps, depthwise separable convolution also transform the input layer (7 x 7 x 3) into the output layer (5 x 5 x 128).

The overall process of depthwise separable convolution is shown in the figure below.

The overall process of depthwise separable convolution.

So, what’s the advantage of doing depthwise separable convolutions? Efficiency! One needs much less operations for depthwise separable convolutions compared to 2D convolutions.

Let’s recall the computation costs for our example of 2D convolutions. There are 128 3x3x3 kernels that move 5x5 times. That is 128 x 3 x 3 x 3 x 5 x 5 = 86,400 multiplications.

How about the separable convolution? In the first depthwise convolution step, there are 3 3x3x1 kernels that moves 5x5 times. That is 3x3x3x1x5x5 = 675 multiplications. In the second step of 1 x 1 convolution, there are 128 1x1x3 kernels that moves 5x5 times. That is 128 x 1 x 1 x 3 x 5 x 5 = 9,600 multiplications. Thus, overall, the depthwise separable convolution takes 675 + 9600 = 10,275 multiplications. This is only about 12% of the cost of the 2D convolution!

So, for an image with arbitrary size, how much time can we save if we apply depthwise separable convolution. Let’s generalize the above examples a little bit. Now, for an input image of size H x W x D, we want to do 2D convolution (stride=1, padding=0) with Nc kernels of size h x h x D, where h is even. This transform the input layer (H x W x D) into the output layer (H-h+1 x W-h+1 x Nc). The overall multiplications needed is

Nc x h x h x D x (H-h+1) x (W-h+1)

On the other hand, for the same transformation, the multiplication needed for depthwise separable convolution is

D x h x h x 1 x (H-h+1) x (W-h+1) + Nc x 1 x 1 x D x (H-h+1) x (W-h+1) = (h x h + Nc) x D x (H-h+1) x (W-h+1)

The ratio of multiplications between depthwise separable convolution and 2D convolution is now:

For most modern architectures, it is common that the output layer has many channels, e.g. several hundreds if not several thousands. For such layers (Nc >> h), then the above expression reduces down to 1 / h / h. It means for this asymptotic expression, if 3 x 3 filters are used, 2D convolutions spend 9 times more multiplications than a depthwise separable convolutions. For 5 x 5 filters, 2D convolutions spend 25 times more multiplications.

Is there any drawback of using depthwise separable convolutions? Sure, there are. The depthwise separable convolutions reduces the number of parameters in the convolution. As such, for a small model, the model capacity may be decreased significantly if the 2D convolutions are replaced by depthwise separable convolutions. As a result, the model may become sub-optimal. However, if properly used, depthwise separable convolutions can give you the efficiency without dramatically damaging your model performance.

9. Flattened convolutions

The flattened convolution was introduced in the paper “Flattened convolutional neural networks for feedforward acceleration”. Intuitively, the idea is to apply filter separation. Instead of applying one standard convolution filter to map the input layer to an output layer, we separate this standard filter into 3 1D filters. Such idea is similar as that in the spatial separable convolution described above, where a spatial filter is approximated by two rank-1 filters.

The image is adopted from the paper.

One should notice that if the standard convolution filter is a rank-1 filter, such filter can always be separated into cross-products of three 1D filters. But this is a strong condition and the intrinsic rank of the standard filter is higher than one in practice. As pointed out in the paper “As the difficulty of classification problem increases, the more number of leading components is required to solve the problem… Learned filters in deep networks have distributed eigenvalues and applying the separation directly to the filters results in significant information loss.”

To alleviate such problem, the paper restricts connections in receptive fields so that the model can learn 1D separated filters upon training. The paper claims that by training with flattened networks that consists of consecutive sequence of 1D filters across all directions in 3D space provides comparable performance as standard convolutional networks, with much less computation costs due to the significant reduction of learning parameters.

10. Grouped Convolution

Grouped convolution was introduced in the AlexNet paper (link) in 2012. The main reason of implementing it was to allow the network training over two GPUs with limited memory (1.5 GB memory per GPU). The AlexNet below shows two separate convolution paths at most of the layers. It’s doing model-parallelization across two GPUs (of course one can do multi-GPUs parallelization if more GPUs are available).

This image is adopted from the AlexNet paper.

Here we describe how the grouped convolutions work. First of all, conventional 2D convolutions follow the steps showing below. In this example, the input layer of size (7 x 7 x 3) is transformed into the output layer of size (5 x 5 x 128) by applying 128 filters (each filter is of size 3 x 3 x 3). Or in general case, the input layer of size (Hin x Win x Din) is transformed into the output layer of size (Hout x Wout x Dout) by applying Dout kernels (each is of size h x w x Din).

Standard 2D convolution.

In grouped convolution, the filters are separated into different groups. Each group is responsible for a conventional 2D convolutions with certain depth. The following examples can make this clearer.

Grouped convolution with 2 filter groups.

Above is the illustration of grouped convolution with 2 filter groups. In each filter group, the depth of each filter is only half of the that in the nominal 2D convolutions. They are of depth Din / 2. Each filter group contains Dout /2 filters. The first filter group (red) convolves with the first half of the input layer ([:, :, 0:Din/2]), while the second filter group (blue) convolves with the second half of the input layer ([:, :, Din/2:Din]). As a result, each filter group creates Dout/2 channels. Overall, two groups create 2 x Dout/2 = Dout channels. We then stack these channels in the output layer with Dout channels.

10.1. Grouped convolution v.s. depthwise convolution

You may already observe some linkage and difference between grouped convolution and the depthwise convolution used in the depthwise separable convolution. If the number of filter groups is the same as the input layer channel, each filter is of depth Din / Din = 1. This is the same filter depth as in depthwise convolution.

On the other hand, each filter group now contains Dout / Din filters. Overall, the output layer is of depth Dout. This is different from that in depthwise convolution, which does not change the layer depth. The layer depth is extended later by 1x1 convolution in the depthwise separable convolution.

There are a few advantages of doing grouped convolution.

The first advantage is the efficient training. Since the convolutions are divided into several paths, each path can be handled separately by different GPUs. This procedure allows the model training over multiple GPUs, in a parallel fashion. Such model-parallelization over multi-GPUs allows more images to be fed into the network per step, compared to training with everything with one GPU. The model-parallelization is considered to be better than data parallelization. The later one split the dataset into batches and then we train on each batch. However, when the batch size becomes too small, we are essentially doing stochastic than batch gradient descent. This would result in slower and sometimes poorer convergence.

The grouped convolutions become important for training very deep neural nets, as in the ResNeXt shown below

The image is adopted from the ResNeXt paper.

The second advantage is the model is more efficient, i.e. the model parameters decrease as number of filter group increases. In the previous examples, filters have h x w x Din x Dout parameters in a nominal 2D convolution. Filters in a grouped convolution with 2 filter groups has (h x w x Din/2 x Dout/2) x 2 parameters. The number of parameters is reduced by half.

The third advantage is a bit surprising. Grouped convolution may provide a better model than a nominal 2D convolution. This another fantastic blog (link) explains it. Here is a brief summary.

The reason links to the sparse filter relationship. The image below is the correlation across filters of adjacent layers. The relationship is sparse.

The correlation matrix between filters of adjacent layers in a Network-in-Network model trained on CIFAR10. Pairs of highly correlated filters are brighter, while lower correlated filters are darker. The image is adopted from this article.

How about the correlation map for grouped convolution?

The correlations between filters of adjacent layers in a Network-in-Network model trained on CIFAR10, when trained with 1, 2, 4, 8 and 16 filter groups. The image is adopted from this article.

The image above is the correlation across filters of adjacent layers, when the model is trained with 1, 2, 4, 8, and 16 filter groups. The article proposed one reasoning (link): “The effect of filter groups is to learn with a block-diagonal structured sparsity on the channel dimension… the filters with high correlation are learned in a more structured way in the networks with filter groups. In effect, filter relationships that don’t have to be learned are on longer parameterized. In reducing the number of parameters in the network in this salient way, it is not as easy to over-fit, and hence a regularization-like effect allows the optimizer to learn more accurate, more efficient deep networks.”

1*ttS2Ty0Owiqdlfnnq  BLA - Une introduction complète à différents types de convolutions dans l&#39;apprentissage en profondeur
AlexNet conv1 filter separation: as noted by the authors, filter groups appear to structure learned filters into two distinct groups, black-and-white and color filters. The image is adopted from the AlexNet paper.

In addition, each filter group learns a unique representation of the data. As noticed by the authors of the AlexNet, filter groups appear to structure learned filters into two distinct groups, black-white filter and color filters.

11. Shuffled Grouped Convolution

Shuffled grouped convolution was introduced in the ShuffleNet from Magvii Inc (Face++). ShuffleNet is a computation-efficient convolution architecture, which is designed specially for mobile devices with very limited computing power (e.g. 10–150 MFLOPs).

The ideas behind the shuffled grouped convolution are linked to the ideas behind grouped convolution (used in MobileNet and ResNeXt for examples) and depthwise separable convolution (used in Xception).

Overall, the shuffled grouped convolution involves grouped convolution and channel shuffling.

In the section about grouped convolution, we know that the filters are separated into different groups. Each group is responsible for a conventional 2D convolutions with certain depth. The total operations are significantly reduced. For examples in the figure below, we have 3 filter groups. The first filter group convolves with the red portion in the input layer. Similarly, the second and the third filter group convolves with the green and blue portions in the input. The kernel depth in each filter group is only 1/3 of the total channel count in the input layer. In this example, after the first grouped convolution GConv1, the input layer is mapped to the intermediate feature map. This feature map is then mapped to the output layer through the second grouped convolution GConv2.

Grouped convolution is computationally efficient. But the problem is that each filter group only handles information passed down from the fixed portion in the previous layers. For examples in the image above, the first filter group (red) only process information that is passed down from the first 1/3 of the input channels. The blue filter group (blue) only process information that is passed down from the last 1/3 of the input channels. As such, each filter group is only limited to learn a few specific features. This property blocks information flow between channel groups and weakens representations during training. To overcome this problem, we apply the channel shuffle.

The idea of channel shuffle is that we want to mix up the information from different filter groups. In the image below, we get the feature map after applying the first grouped convolution GConv1 with 3 filter groups. Before feeding this feature map into the second grouped convolution, we first divide the channels in each group into several subgroups. The we mix up these subgroups.

Channel shuffle.

After such shuffling, we continue performing the second grouped convolution GConv2 as usual. But now, since the information in the shuffled layer has already been mixed, we essentially feed each group in GConv2 with different subgroups in the feature map layer (or in the input layer). As a result, we allow the information flow between channels groups and strengthen the representations.

12. Pointwise grouped convolution

The ShuffleNet paper (link) also introduced the pointwise grouped convolution. Typically for grouped convolution such as in MobileNet (link) or ResNeXt (link), the group operation is performed on the 3x3 spatial convolution, but not on 1 x 1 convolution.

The shuffleNet paper argues that the 1 x 1 convolution are also computationally costly. It suggests applying group convolution for 1 x 1 convolution as well. The pointwise grouped convolution, as the name suggested, performs group operations for 1 x 1 convolution. The operation is identical as for grouped convolution, with only one modification — performing on 1x1 filters instead of NxN filters (N>1).

In the ShuffleNet paper, authors utilized three types of convolutions we have learned: (1) shuffled grouped convolution; (2) pointwise grouped convolution; and (3) depthwise separable convolution. Such architecture design significantly reduces the computation cost while maintaining the accuracy. For examples the classification error of ShuffleNet and AlexNet is comparable on actual mobile devices. However, the computation cost has been dramatically reduced from 720 MFLOPs in AlexNet down to 40–140 MFLOPs in ShuffleNet. With relatively small computation cost and good model performance, ShuffleNet gained popularity in the field of convolutional neural net for mobile devices.

Thank you for reading the article. Please feel free to leave questions and comments below.

Reference

Blogs & articles

  • “An Introduction to different Types of Convolutions in Deep Learning” (Link)
  • “Review: DilatedNet — Dilated Convolution (Semantic Segmentation)” (Link)
  • “ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices” (Link)
  • “Separable convolutions “A Basic Introduction to Separable Convolutions” (Link)
  • Inception network “A Simple Guide to the Versions of the Inception Network” (Link)
  • “A Tutorial on Filter Groups (Grouped Convolution)” (Link)
  • “Convolution arithmetic animation” (Link)
  • “Up-sampling with Transposed Convolution” (Link)
  • “Intuitively Understanding Convolutions for Deep Learning” (Link)

Papers

  • Network in Network (Link)
  • Multi-Scale Context Aggregation by Dilated Convolutions (Link)
  • Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs (Link)
  • ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices (Link)
  • A guide to convolution arithmetic for deep learning (Link)
  • Going deeper with convolutions (Link)
  • Rethinking the Inception Architecture for Computer Vision (Link)
  • Flattened convolutional neural networks for feedforward acceleration (Link)
  • Xception: Deep Learning with Depthwise Separable Convolutions (Link)
  • MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (Link)
  • Deconvolution and Checkerboard Artifacts (Link)
  • ResNeXt: Aggregated Residual Transformations for Deep Neural Networks (Link)
Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close