• 15 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 26/06/2024

Qu'est ce qu'un réseau de neurones convolutif (ou CNN) ?

Motivation : apprendre les features

Dans la partie précédente, nous avons étudié la notion de features en vision et les méthodes traditionnellement utilisées pour faire de la classification d'images. Celles-ci consistent à extraire les features de chaque image du jeu de données, puis à entraîner un classifieur sur ces features

Ces techniques d'apprentissage supervisé peuvent fournir de très bons résultats, et leur performance dépend fortement de la qualité des features préalablement trouvées. Il existe plusieurs méthodes d'extraction et de description de features. L'algorithme SIFT étudié précédemment est très populaire, puisqu'il parvient à détecter et à décrire efficacement des features pertinentes.

En pratique, l'erreur de classification n'est jamais nulle. Les résultats peuvent alors être améliorés en créant de nouvelles méthodes d'extraction de features, plus adaptées aux images étudiées, ou en utilisant un "meilleur" classifieur. 

Mais en 2012, une révolution se produit : lors de la compétition annuelle de vision par ordinateur ILSVRC, un nouvel algorithme de Deep Learning explose les records ! Il s'agit d'un réseau de neurones convolutif appelé AlexNet.  

Les réseaux de neurones convolutifs ont une méthodologie similaire à celle des méthodes traditionnelles d'apprentissage supervisé : ils reçoivent des images en entrée, détectent les features de chacune d'entre elles, puis entraînent un classifieur dessus.

Cependant, les features sont apprises automatiquement ! Les CNN réalisent eux-mêmes tout le boulot fastidieux d'extraction et description de features : lors de la phase d'entraînement, l'erreur de classification est minimisée afin d'optimiser les paramètres du classifieur ET les features ! De plus, l'architecture spécifique du réseau permet d'extraire des features de différentes complexités, des plus simples au plus sophistiquées.  L'extraction et la hiérarchisation automatiques des features, qui s'adaptent au problème donné, constituent une des forces des réseaux de neurones convolutifs : plus besoin d'implémenter un algorithme d'extraction "à la main", comme SIFT ou Harris-Stephens. 

Contrairement aux techniques d'apprentissage supervisé, les réseaux de neurones convolutifs apprennent les features de chaque image. C'est là que réside leur force : les réseaux font tout le boulot d'extraction de features automatiquement, contrairement aux techniques d'apprentissage  

Aujourd'hui, les réseaux de neurones convolutifs, aussi appelés CNN ou ConvNet pour Convolutional Neural Network, sont toujours les modèles les plus performants pour la classification d'images. Cette partie leur est donc naturellement consacrée.

Rappel sur les réseaux de neurones

Pour bien comprendre les réseaux de neurones convolutifs, il est important de connaître les bases des réseaux de neurones tout court : je vous encourage donc à (re)lire les chapitres ici ! 

Les principaux éléments à retenir sont les suivants :

  • Un réseau de neurones est un système composé de neurones, généralement répartis en plusieurs couches connectées entre elles

  • Un tel système s'utilise pour résoudre divers problèmes statistiques, mais nous nous intéressons ici qu'au problème de classification (très courant). Dans ce cas, le réseau calcule à partir de l'entrée un score (ou probabilité) pour chaque classe. La classe attribuée à l'objet en entrée correspond à celle de score le plus élevé 

  • Chaque couche reçoit en entrée des données et les renvoie transformées. Pour cela, elle calcule une combinaison linéaire puis applique éventuellement une fonction non-linéaire, appelée fonction d'activation. Les coefficients de la combinaison linéaire définissent les paramètres (ou poids) de la couche

  • Un réseau de neurones est construit en empilant les couches : la sortie d'une couche correspond à l'entrée de la suivante.

  • Cet empilement de couches définit la sortie finale du réseau comme le résultat d'une fonction différentiable de l'entrée

  • La dernière couche calcule les probabilités finales en utilisant pour fonction d'activation la fonction logistique (classification binaire) ou la fonction softmax (classification multi-classes)

  • Une fonction de perte (loss function) est associée à la couche finale pour calculer l'erreur de classification. Il s'agit en général de l'entropie croisée

  • Les valeurs des poids des couches sont appris par rétropropagation du gradient : on calcule progressivement (pour chaque couche, en partant de la fin du réseau) les paramètres qui minimisent la fonction de perte régularisée. L'optimisation se fait avec une descente du gradient stochastique

Les réseaux de neurones convolutifs

Quelle est la différence entre un réseau de neurones et un réseau de neurones convolutif ?

Le premier bloc fait la particularité de ce type de réseaux de neurones, puisqu'il fonctionne comme un extracteur de features. Pour cela, il effectue du template matching en appliquant des opérations de filtrage par convolution. La première couche filtre l'image avec plusieurs noyaux de convolution, et renvoie des "feature maps", qui sont ensuite normalisées (avec une fonction d'activation) et/ou redimensionnées.

Ce procédé peut être réitéré plusieurs fois : on filtre les features maps obtenues avec de nouveaux noyaux, ce qui nous donne de nouvelles features maps à normaliser et redimensionner, et qu'on peut filtrer à nouveau, et ainsi de suite. Finalement, les valeurs des dernières feature maps sont concaténées dans un vecteur. Ce vecteur définit la sortie du premier bloc, et l'entrée du second.

Le second bloc n'est pas caractéristique d'un CNN : il se retrouve en fait à la fin de tous les réseaux de neurones utilisés pour la classification. Les valeurs du vecteur en entrée sont transformées (avec plusieurs combinaisons linéaires et fonctions d'activation) pour renvoyer un nouveau vecteur en sortie. Ce dernier vecteur contient autant d'éléments qu'il y a de classes : l'élément $\(i\)$ représente la probabilité que l'image appartienne à la classe $\(i\)$. Chaque élément est donc compris entre 0 et 1, et la somme de tous vaut 1. Ces probabilités sont calculées par la dernière couche de ce bloc (et donc du réseau), qui utilise une fonction logistique (classification binaire) ou une fonction softmax (classification multi-classe) comme fonction d'activation.

Comme pour les réseaux de neurones ordinaires, les paramètres des couches sont déterminés par rétropropagation du gradient : l'entropie croisée est minimisée lors de la phase d'entraînement. Mais dans le cas des CNN, ces paramètres désignent en particulier les features des images.

Les différents types de couches d'un CNN sont expliquées dans le chapitre suivant.

Exemple de certificat de réussite
Exemple de certificat de réussite