Vision par ordinateurVision par ordinateur
Vision par ordinateur10 min de lecture

Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

La reconnaissance faciale, les publicités ciblées et la reconnaissance d’images ont toutes un point en commun. Elles utilisent les meilleurs réseaux neuronaux convolutifs.

Mis à jour le 25 sept. 2021
Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet
Sommaire

Regardez la vidéo et soutenez-moi sur YouTube!

Les réseaux neuronaux convolutifs

Les réseaux neuronaux convolutifs, aussi appelés CNNs, sont le type de réseau neuronal le plus utilisé et le plus performant pour les applications de vision par ordinateur. Une fois que vous les comprenez, vous êtes prêt à plonger dans ce domaine et à devenir un spécialiste! Les réseaux neuronaux convolutifs forment une famille de réseaux neuronaux profonds qui utilisent principalement des convolutions pour accomplir la tâche demandée.

Une… convolution?

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Une convolution. Image de Irhum Shafkat

Comme son nom l’indique, la convolution est le processus par lequel l’image originale, notre input dans une application de vision par ordinateur, est convoluée à l’aide de filtres qui détectent de petites caractéristiques importantes d’une image, comme les contours. Le réseau apprend de façon autonome les valeurs des filtres qui détectent les caractéristiques importantes pour obtenir l’output souhaité, comme le nom de l’objet dans une image précise envoyée en input. Ces filtres sont essentiellement des carrés de 3 par 3 ou de 5 par 5, ce qui leur permet de détecter la direction du contour : vers la gauche, la droite, le haut ou le bas. Comme vous pouvez le voir dans cette image, le processus de convolution calcule un produit scalaire entre le filtre et les pixels qui lui font face. Il se déplace ensuite vers la droite et recommence, jusqu’à convoluer toute l’image. Une fois le processus terminé, nous obtenons l’output de la première couche de convolution, que l’on appelle une carte de caractéristiques. Nous faisons ensuite la même chose avec un autre filtre, ce qui nous donne plusieurs cartes de filtres. Elles sont toutes envoyées à la couche suivante en tant qu’inputs pour produire de nombreuses autres cartes de caractéristiques, jusqu’à atteindre la fin du réseau avec de l’information générale extrêmement détaillée sur le contenu de l’image.

L’entraînement d’un CNN

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Processus d’entraînement. Image de 3Brown1Blue

Habituellement, pour apprendre les paramètres des filtres utilisés pendant les convolutions, appelés poids, nous employons une technique appelée rétropropagation. Cette technique exige d’abord une propagation avant dans votre réseau. Autrement dit, vous lui fournissez un ou plusieurs exemples et obtenez une prédiction. Cette prédiction correspond à ce que vous voulez que votre modèle accomplisse, par exemple vous dire si l’image envoyée contient un chat ou un chien. Vous utilisez ensuite une technique d’apprentissage, dans ce cas la rétropropagation. Elle calcule l’erreur entre notre prédiction et la vraie réponse que nous devions obtenir, puis propage cette erreur dans tout le réseau en modifiant les poids des filtres en fonction de celle-ci. Une fois que l’erreur propagée atteint la première couche, un autre exemple est fourni au réseau et tout le processus d’apprentissage est répété. Notre algorithme s’améliore ainsi de façon itérative.

La fonction d’activation

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

La fonction d’activation ReLU

Cette fonction d’activation détermine l’output final de chaque calcul de convolution et introduit des non-linéarités dans notre réseau, ce qui lui permet de modéliser des données non linéaires. Il peut ainsi empiler les convolutions et introduire le concept de « profondeur », puisque l’empilement de transformations linéaires revient à n’avoir qu’une seule transformation linéaire. L’introduction de cette non-linéarité est donc essentielle à nos réseaux neuronaux profonds. La fonction d’activation la plus populaire s’appelle ReLU, pour Rectified Linear Unit. Elle est utilisée juste après une convolution dans ce que nous appelons une « unité de convolution », ou « conv », comme le montre l’image ci-dessous. Elle ramène à zéro tout résultat négatif, ce qui rend l’output de la convolution plus clairsemé. Autrement dit, nous avons beaucoup de zéros et quelques paramètres importants. Le réseau est ainsi « forcé » à se concentrer sur ces paramètres et devient beaucoup plus efficace à entraîner en temps de calcul, puisqu’une multiplication par zéro donne toujours zéro. Cela aide aussi à surmonter le problème de disparition du gradient, ce qui permet aux modèles d’apprendre plus rapidement et d’obtenir de meilleurs résultats, comme nous le verrons plus loin.

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Les couches de pooling

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Max-pooling. Image de GeeksForGeeks

Ensuite, toujours pour simplifier notre réseau et réduire le nombre de paramètres, nous avons les couches de pooling. Nous utilisons habituellement une fenêtre de 2 pixels par 2 et prenons sa valeur maximale pour créer le premier pixel de notre carte de caractéristiques. Nous répétons ensuite ce processus sur toute la carte de caractéristiques, ce qui réduit ses dimensions x et y, puis le nombre de paramètres dans le réseau à mesure que nous avançons en profondeur. Tout cela est accompli en conservant l’information la plus importante.

Ces trois types de couches, soit les couches de convolution, d’activation et de pooling, peuvent être répétés plusieurs fois dans un réseau. Nous les appelons nos couches « conv », comme le montre l’image ci-dessus, et elles rendent le réseau de plus en plus profond. C’est de là que vient le terme « apprentissage profond ».

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Les dernières couches d’une architecture de CNN pour la vision par ordinateur

Enfin, les couches entièrement connectées apprennent une fonction non linéaire à partir des outputs de la dernière couche de pooling. Elles sont représentées par les couches « FC » dans l’image ci-dessous. Le volume multidimensionnel produit par les couches de pooling est aplati en un vecteur unidimensionnel qui contient le même nombre total de paramètres. Nous utilisons ensuite ce vecteur dans un petit réseau neuronal entièrement connecté composé d’une ou de plusieurs couches pour la classification d’images ou d’autres tâches, ce qui produit un output par image, comme la classe de l’objet. Bien sûr, il s’agit de la forme la plus simple des réseaux neuronaux convolutifs.

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Une architecture de CNN de base pour la classification d’objets dans Imagenet. Image de Andrew Gibiansky

Les CNNs de pointe

Bref historique

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Résultats annuels de l’ILSVRC. Image de Prabhu

De nombreuses architectures convolutives ont été créées depuis LeNet-5 de Yann LeCun en 1998. Plus récemment, grâce aux progrès de nos GPUs, le premier réseau neuronal profond a été appliqué à la plus populaire compétition de reconnaissance d’objets : AlexNet en 2012. Cette compétition est l’ImageNet Large Scale Visual Recognition Competition (ILSVRC), où les meilleurs algorithmes de détection d’objets s’affrontaient chaque année sur le plus grand jeu de données de vision par ordinateur jamais créé, Imagenet. Le domaine a explosé juste après cette année-là. De nouvelles architectures ont commencé à battre les précédentes et à constamment améliorer leurs résultats, jusqu’à aujourd’hui.

L’architecture de CNN la plus prometteuse : DenseNet [1]

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

L’histoire des CNNs. Image tirée de A Survey of the Recent Architectures of Deep Convolutional Neural Networks

Aujourd’hui, la plupart des architectures de pointe offrent des performances semblables, avec certains cas d’utilisation précis où elles sont meilleures. Vous pouvez voir ici un aperçu rapide des architectures les plus puissantes. C’est pourquoi je ne présenterai dans cet article que mon réseau favori, celui qui donne les meilleurs résultats dans mes recherches : DenseNet. Il s’agit aussi, à mon avis, de l’architecture de CNN la plus intéressante et prometteuse. Dites-moi dans les commentaires si vous souhaitez que je présente un autre type d’architecture de réseau!

La famille DenseNet est apparue pour la première fois en 2016 dans l’article intitulé « Densely Connected Convolutional Networks » de Facebook AI Research. Il s’agit d’une famille parce qu’elle comprend de nombreuses versions de profondeurs différentes, allant de 121 couches et 0,8 million de paramètres à une version de 264 couches et 15,3 millions de paramètres. C’est moins que l’architecture ResNet profonde de 101 couches!

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Un DenseNet profond comprenant trois blocs denses. Les couches entre deux blocs adjacents sont appelées couches de transition et modifient la taille des cartes de caractéristiques par convolution et pooling. Image tirée de l’article sur DenseNet

Comme vous pouvez le voir ici, l’architecture DenseNet utilise les mêmes concepts de convolution, de pooling et de fonction d’activation ReLU pour fonctionner. Le détail important et l’innovation de cette architecture de réseau sont les blocs denses.

Voici un exemple de bloc dense à cinq couches.

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

Un bloc dense à 5 couches. Chaque couche reçoit toutes les cartes de caractéristiques précédentes en input. Image tirée de l’article sur DenseNet

Dans ces blocs denses, chaque couche reçoit en input toutes les cartes de caractéristiques précédentes, ce qui facilite le processus d’entraînement en atténuant le problème de disparition du gradient. Ce problème apparaît dans les réseaux très profonds. Lorsque nous rétropropageons l’erreur dans un réseau aussi profond, celle-ci est réduite à chaque étape et finit par atteindre 0. Ces connexions permettent essentiellement de propager l’erreur plus loin sans trop la réduire. Elles encouragent aussi la réutilisation des caractéristiques et réduisent le nombre de paramètres pour la même raison, puisque le réseau réutilise l’information des cartes de caractéristiques précédentes plutôt que de générer plus de paramètres. Il accède ainsi à la « connaissance collective » du réseau et réduit le risque de surapprentissage grâce à cette diminution du nombre total de paramètres. Comme je l’ai dit, cette approche fonctionne extrêmement bien et réduit le nombre de paramètres d’environ 5 fois comparativement à une architecture ResNet de pointe comprenant le même nombre de couches.

Comme vous pouvez le voir ci-dessous, la famille DenseNet originale est composée de 4 blocs denses, de couches de transition qui effectuent elles aussi de la convolution et du pooling, puis d’une dernière couche de classification si nous travaillons sur une tâche de classification d’images comme l’ILSVRC. La taille des blocs denses est la seule chose qui change entre les versions de la famille DenseNet afin de rendre le réseau plus profond.

Exemple visuel tiré de Les réseaux neuronaux convolutifs de pointe expliqués : DenseNet

La famille DenseNet. Image tirée de l’article sur DenseNet

Conclusion

Bien sûr, il ne s’agissait que d’une introduction aux réseaux neuronaux convolutifs et, plus précisément, à l’architecture DenseNet. Je vous invite fortement à approfondir ces architectures si vous voulez faire un choix réfléchi pour votre application. Les liens vers l’article [1] et le GitHub [2] de DenseNet se trouvent ci-dessous pour obtenir plus d’information. Dites-moi si vous souhaitez que je présente une autre architecture!


Si vous aimez mon travail et souhaitez rester à jour dans le domaine de l’IA, vous devriez absolument me suivre sur mes autres réseaux sociaux (LinkedIn, Twitter) et vous abonner à mon infolettre hebdomadaire sur l’IA!

Pour me soutenir :

  • La meilleure façon de me soutenir est de me suivre sur Medium ou de vous abonner à ma chaîne YouTube si vous préférez le format vidéo.
  • Soutenez mon travail sur Patreon
  • Rejoignez notre communauté Discord : Learn AI Together et partagez vos projets, vos articles scientifiques et vos meilleurs cours, trouvez des coéquipiers pour Kaggle et bien plus encore!

Références

[1] G. Huang, Z.Liu, L. Maaten, k. Weinberger, Densely Connected Convolutional Networks (2016), https://arxiv.org/pdf/1608.06993.pdf

[2] G. Huang, Z.Liu, L. Maaten, k. Weinberger, Densely Connected Convolutional Networks : GitHub (2019), https://github.com/liuzhuang13/DenseNet

Discussion

Commentaires

Chargement

Aucun compte requis. Votre nom et votre commentaire seront publics, alors n'incluez pas de renseignements privés. Consultez la page de confidentialité pour les détails.

Continuez à apprendre

Vous voulez le côté pratique de l'IA, sans le brouillard marketing ?

Je partage ce qui est utile sur YouTube, Substack et dans mes guides d'ingénierie IA.

FAQ

Qu’est-ce qu’un réseau neuronal convolutif?

Un CNN applique des filtres appris aux images pour détecter des caractéristiques locales comme les contours, les textures et les formes.

Qu’est-ce qui distingue DenseNet d’un CNN standard?

Chaque couche reçoit les cartes de caractéristiques des couches précédentes, ce qui crée des connexions denses dans tout le réseau.

Pourquoi réutiliser les caractéristiques entre les couches?

La réutilisation des caractéristiques réduit l’apprentissage redondant et permet aux couches ultérieures d’accéder à des signaux visuels simples et complexes.

Comment DenseNet atténue-t-il la disparition du gradient?

Les connexions courtes offrent aux gradients des chemins plus directs pour atteindre les premières couches pendant l’entraînement.

DenseNet est-il toujours la meilleure architecture de vision?

Non. Les CNNs modernes obtiennent des résultats semblables sur de nombreux benchmarks, avec des différences pratiques de mémoire, de vitesse et de cas d’utilisation visé.

À quoi servent les couches de transition dans DenseNet?

Elles se trouvent entre les blocs denses et utilisent la convolution et le pooling pour réduire la taille des cartes de caractéristiques, ce qui garde le réseau gérable à mesure qu’il gagne en profondeur.