Convolutional neural network : Les bases pour comprendre
L’intelligence artificielle a considérablement évolué ces dernières années, réduisant de plus en plus le fossé entre les facultés humaines et celles des machines. L’un des aspects de cette évolution concerne la vision par ordinateur. Les recherches dans ce domaine consistent à faire en sorte que les machines voient le monde à la manière des humains. Les machines pourront ensuite utiliser ces connaissances pour exécuter certaines tâches comme la reconnaissance d’images et de vidéos, la mise en place de systèmes de recommandation ou encore d’analyse et de classification d’images. Tout cela est dû à un algorithme particulier : le convolutional neural network. Qu’est-ce que c’est ? Comment cela fonctionne-t-il ? Des éléments de réponse dans cet article.
Comprendre le réseau neuronal convolutif ou convolutional neural network
Le convolutional neural network ou réseau neuronal convolutif (CNN ou ConvNet) est en fait un algorithme d’apprentissage profond. Il consiste à prendre une image d’entrée, à attribuer une importance à différents aspects de l’image pour ensuite les différencier les uns des autres. Cela vous semble encore un peu confus ? Ce qui va suivre va vous aider à mieux comprendre. Le convolutional neural network architecture est similaire à la connectivité des neurones de notre cerveau et s’inspire plus précisément de l’organisation du cortex visuel. Nos neurones ne réagissent à un stimulus qu’au niveau du champ de réception, correspondant à une région assez restreinte du champ visuel. Plusieurs champs de réception se chevauchent ainsi pour couvrir l’ensemble de la zone visuelle.
L’intérêt de cet algorithme est qu’il n’y a pas beaucoup de traitements à réaliser en amont, contrairement à la plupart des algorithmes de classification. Avec les méthodes traditionnelles, le filtre est conçu à la main. Avec un peu d’entraînement, les ConvNet sont en mesure de maîtriser ces filtres.
Quel est l’intérêt des réseaux ConvNets ?
Si une image n’est qu’une matrice de valeurs de pixels. Dans ce cas, ne serait-il pas plus simple d’aplatir l’image lors de la classification ? Ainsi, une matrice d’image 3×3 serait aplatie en un vecteur 9×1. Cela semble un peu trop simpliste. S’il s’agit d’images binaires basiques, cela permettra une classification avec une précision moyenne. Mais cette méthode se montre inefficace quand l’image est trop complexe, avec beaucoup de pixels.
Le convolutional neural network présente une meilleure alternative. En effet, il peut capturer facilement les dépendances spatiales et temporelles d’une image, grâce à l’utilisation d’un filtre pertinent. Son architecture a été conçue de manière à comprendre plus facilement la sophistication de l’image. Elle arrive à réduire la réutilisation des poids et de différents paramètres pour mieux s’adapter aux données de l’ensemble de l’image.
Pour bien comprendre, prenons un exemple bien précis, celui d’une image RVB (rouge, vert, bleu). Séparons-la en trois plans représentant chacun l’une de ces couleurs. Il existe de multiples espaces de couleurs dans lesquelles ces images sont représentées. Il existe ainsi une grande quantité de couleurs à effectuer surtout lorsque les dimensions de l’image sont importantes. Comme le cas d’une image 8K, par exemple.
La mission du convNet est de réduire ces images à leur forme la plus simple à traiter, sans pourtant perdre les caractéristiques indispensables à une bonne prédiction. Cela est aussi important si vous prévoyez de mettre en place une architecture destinée à l’apprentissage des caractéristiques, mais aussi à des données plus massives.
Concrètement, à quoi servira une CNN ?
Les différentes architectures de CNN permettent d’établir des algorithmes qui améliorent le fonctionnement des IA. Parmi celles qui jouent déjà un rôle clé dans le fonctionnement de l’IA, on peut citer :
- LeNet
- AlexNet
- VGGNet
- GoogLeNet
- ResNet
- ZFNet
Qu’est-ce que la couche de convolution et le noyau ?
Une couche de convolution est un ensemble de convolutions. L’élément au centre de la première partie de la couche convolutive est le noyau. Cette première couche capture les caractéristiques de l’image d’entrée telles que l’orientation du gradient, les bords, la couleur, etc. Le noyau parcourt l’image de la gauche vers la droite pour l’analyser sur toute sa largeur. Il refait la même chose jusqu’à ce qu’il ait parcouru toute l’image.
Les ConvNets ne se limitent pas à une seule couche convolutive. Plus on rajoute des couches, plus l’architecture s’adapte aux caractéristiques de l’image. Il devient ainsi plus simple d’avoir une compréhension plus globale des images dans l’ensemble des données, comme le ferait un être humain.
Que se passe-t-il après une convolution ?
Une convolution conduit à deux résultats distincts : une caractéristique convoluée de dimension réduite et une autre de dimension plus importante. Si le Valid Padding est utilisé, alors la dimension de la caractéristique convoluée est réduite par rapport à celle à l’entrée. Dans le cas d’une dimension augmentée, on a donc utilisé le Same Padding.
Qu’est-ce que la couche de mise en commun ?
La couche de mise en commun réduit la taille spatiale de la caractéristique convoluée. Ce faisant, on diminue la puissance de calcul indispensable au traitement des données. Cette couche permet aussi d’extraire les caractéristiques dominantes qui ne varient pas en matière de rotation et de position. Cela permet de garder le processus d’apprentissage efficace.
Il existe deux façons de réaliser la mise en commun : le max pooling et l’average pooling. Lors d’un max pooling, la valeur maximale de la partie de l’image couverte par le noyau est renvoyée à la sortie. Dans le cas d’un average pooling, c’est la moyenne de toutes valeurs de la partie couverte par le noyau qui est renvoyée à la sortie. Cela va sans dire, le max pooling est plus efficace. Le max pooling est aussi intéressant dans la mesure où il fonctionne comme suppresseur de bruit. Il élimine les activations bruyantes et réalise un débruitage, en plus de la réduction de la dimension.
Combinée avec la couche convolutionnelle, la couche de mise en commun forme le réseau neuronal convolutionnel. Le nombre de chacune de ces couches varie en fonction de la complexité de l’image. On augmente les couches lorsqu’on veut capturer plus de détails de bas niveau. Toutefois, ça implique une grande puissance de calcul.
À ce stade, nous avons établi un modèle qui permet de comprendre les différentes caractéristiques de l’image. Il ne reste plus qu’à aplatir la sortie finale avant de l’introduire dans le réseau neuronal ordinaire. Ce n’est qu’à partir de là que la classification peut commencer.
La nécessité de la couche entièrement connectée ou FC dans la classification
Pour effectuer la classification, il est nécessaire de comprendre les caractéristiques de haut niveau représentées par la sortie de la couche convolutive. La couche entièrement connectée permet d’apprendre les combinaisons non linéaires de ces caractéristiques. Cela vous semble encore un peu flou ? Ce qui va suivre va vous aider à mieux comprendre.
Une fois que l’image d’entrée est adaptée aux perceptions à plusieurs niveaux, il faut l’aplatir dans un vecteur colonne. Cette sortie aplatie est transmise à un réseau neuronal à action directe. Une rétropropagation est ensuite appliquée à chaque itération de la formation. Grâce à une technique de classification softmax, le modèle est en mesure de distinguer les caractéristiques dominantes de celles de bas niveau avant de les classer.
Comment créer un convolutional neural network ?
Nous connaissons maintenant ce qu’est un convolutionial neural network et son utilité. Une question se pose. Comment créer cette CNN ? Il existe des outils spécialement conçus pour vous aider à créer la CNN. La manière la plus simple de créer une CNN est d’utiliser Keras dans Python. Il existe plusieurs modèles qui vous permettront de construire un convolutional neural network Keras. Le plus simple à utiliser est Sequential. Il vous permettra de construire votre CNN couche par couche.
Il est également possible de construire un convolutional neural network pytorch. Vous aurez à disposition des modules très bien conçus comme torch.nn qui vous aideront à créer votre CNN. Il contient, en plus des couches, une méthode forward qui renvoie à la sortie, ce qui est assez pratique.
Vous souhaitez vous former au Big Data ? Retrouvez les formation Data Full Stack et Data Analyst qui vous forment aux métiers de Data Analyst, Data Scientist, Data Engineer et AI Scientist.
Merci pour votre lecture ! Si vous souhaitez lire nos prochains articles autour de la Data et de l’IA, vous pouvez nous suivre sur Facebook, LinkedIn et Twitter pour être notifié lorsqu’un nouvel article est publié !