Aucours de ces dernières années, les exploits réalisés par les algorithmes d’Intelligence Artificielle sont de plus en plus nombreux et de plus en plus impressionnants. Une classe bien particulière d’algorithmes a été très médiatisée et ses performances ont surpassé celles de l’Homme dans différents domaines : les réseaux de neurones.

Résultat de recherche d'images pour "convolutional neural network"
Source : Hacker Noon

C’est quoi, un réseau de neurones ?

Il s’agit d’un modèle mathématique qui effectue une suite ordonnée d’opérations matricielles. Si on regarde de plus près, un réseau de neurones est un empilement de petites unités de calculs connectées entre-elles dont l’objectif est de répondre à des problématiques jusqu’alors trop gourmande en termes de calculs par les algorithmes existants.

Source : Analytics India Magazine

La première esquisse de réseau de neurones n’est pas tout récente : c’est en 1957 que Frank Rosenblatt propose l’idée du perceptron. Le perceptron, c’est l’unité de calcul des réseaux de neurones, la plus petite entité que l’on rencontre dans ces architectures. Un perceptron peut être considéré comme un neurone à part entière, au même titre qu’un neurone biologique dans le cerveau humain.

Source : gatech.edu

Dans un perceptron, nous allons placer en entrée une liste de valeurs (\(x\)). Chacune de ces valeurs va être multipliée par un coefficient, appelé un poids (\(w\)). Ensuite, chacune des valeurs multipliées par le poids est sommée (\(\Sigma\)), et l’on applique une fonction, dite fonction d’activation (\(f\)), à cette somme.

Et … c’est tout ! Un neurone c’est en fait une fonction évaluée en une somme de nombres ! Mais on peut remarquer qu’en sortie (output), nous obtenons encore un nombre. Pourquoi alors ne pas utiliser ce nombre comme une entrée d’un autre neurone ? En empilant successivement horizontalement et verticalement ces neurones, on obtient alors les fameux réseaux de neurones.

Une structure classique de réseau de neurones : le perceptron multi-couche.

Mais si l’on fournit, en entrée, une liste de valeurs, comment peut-on placer une image en entrée d’un réseau de neurones ? Et d’ailleurs, une image, ça ressemble à quoi sur le disque dur de mon ordinateur ?

Une image en informatique

La lumière

Pour bien comprendre comment un réseau de neurones perçoit une image, commençons par étudier la façon dont une image est stockée sur un support numérique. On sait, g̶r̶â̶c̶e̶ ̶a̶u̶x̶ ̶T̶P̶ ̶d̶e̶ ̶p̶h̶y̶s̶i̶q̶u̶e̶ ̶d̶u̶ ̶c̶o̶l̶l̶è̶g̶e̶, grâce à Issac Newton, que la lumière est la superposition de trois composantes : le rouge(R pour red), le vert (G pour green) et le bleu (B pour blue). On appelle cela les composantes RGB.

La lumière est donc composée de ces trois composantes. Une lumière bleue aura les composantes R et G faibles, tandis qu’une lumière rouge aura les composantes G et B faibles.

La lumière et notre cerveau

Dans notre oeil, au fond de la rétine, nous disposons de capteurs de lumière, appelés cônes et bâtonnets. C’est notamment ces cônes qui sont responsables de la captation de l’information lumineuse, qui est ensuite transmise vers notre cerveau via le nerf optique. Chaque cône capte une information du spectre lumineux (une longueur d’onde), et en fonction de leur position dans la rétine, certains seront plus sensibles au rouge, alors que d’autres le seront pour le vert ou le bleu.

Source : Ask A Biologist. Les cônes situés vers le haut de la rétine sont plus sensibles à la composante G alors que ceux situés vers le bas sont plus sensibles à la composante B.

Pour plus d’informations, je vous renvoie à la (superbe) vidéo de la chaîne Youtube e-penser.

Cette vidéo fait partie d’une série que je vous conseille de regarder (la chaîne Youtube est très intéressante si vous ne la connaissez pas).

Les pixels

En informatique, une image est représentée par des blocs de couleurs ordonnés sous forme de tableau, où chaque bloc est un pixel.

Un appareil photo, lui, dispose aussi de photorécepteurs, semblables aux cônes présents dans notre oeil. La particularité est que pour chaque cellule photovoltaïque (récepteur), il y aura 3 cônes : un pour le rouge, un pour le vert et un pour le bleu. On retrouve les composantes RGB de la lumière.

Comment stocker le résultat au format numérique ? Pour chaque cellule, on stocke trois valeurs, une pour chaque composante. Chaque valeur est situé entre 0 et 255, car elles sont codées sur un octet.

Un pixel est donc une liste de trois valeurs, ordonnées selon la nomenclature RGB.

Source : Zach Rattner

Tout naturellement, plus il y a de cellules photovoltaïques, plus on enregistre de pixels et plus la taille de l’image est grande.

Si l’image possède une largeur de M pixels et une hauteur de N pixels, alors l’image est enregistré sous format d’un tableau en 3 dimensions de taille M par N par 3.

Source : Python Machine Learning

Et voilà comment une image est stockée : c’est un tableau où chaque élément du tableau est une liste de 3 valeurs. Dans le jargon du Deep Learning, on appelle cela un tenseur (à ne pas confondre avec l’objet mathématique du même nom, mais bien plus complexe).

La convolution

Ce mot est la clé de voûte qui permet aux réseaux de neurones de traiter efficacement les images. La convolution est une opération mathématique qui existe depuis longtemps, mais c’est principalement Yann LeCun, chercheur en intelligence artificielle et ancien directeur du FAIR (laboratoire de recherche de Facebook) qui a popularisé la méthode dans les années 90.

Notion de voisinage

L’idée sous-jacente est qu’il y a une forte notion de voisinage sur les images. Un pixel dépend fortement de ses voisins : comme on peut le voir sur l’image de vue sur la mer, les pixels qui représente la mer sont relativement similaires entre-eux, selon une teinte bleue. Si l’on regroupe et que l’on forme un voisinage, celui-ci se répète sur toute la surface de la mer. C’est d’ailleurs ce qu’il se passe dans nos yeux et dans les capteurs des appareils photos : entre deux pixels consécutifs, il est très rare de voir leur teinte changer brusquement. Si l’on dispose d’une teinte bleue, les pixels voisins auront une teinte similaire, légèrement plus foncée ou plus claire.

Résultat de recherche d'images pour "convolution CNN animation"
Source : https://github.com/vdumoulin/conv_arithmetic

En partant de ce principe, la convolution agrège localement les pixelsselon une petite fenêtre, ce qui permet de détecter des caractéristiques particulières sur des images (des yeux sur un visage, les oreilles d’un chat, …). Et cette convolution n’est pas faite au hasard : il y a des neurones spécialement développés pour cette technique, les filtres de convolution.

Filtres de convolution

Un filtre de convolution est un tableau de valeurs, souvent de taille 2×2 ou 3×3, qui va faire office de masque sur l’image.

$$\begin{pmatrix}
1 &0 &1 \\
0 & 1 & 0\\
1 & 0 & 1
\end{pmatrix}$$

Ce filtre sera appliqué à chaque fenêtre de 3×3 pixels d’une image. L’action réalisée par ce filtre est un produit terme à terme (produit de Hadamard). Chaque élément de la partie de l’image sélectionnée sera multipliée par l’élément situé à la même position que dans le filtre.

$$\underset{\text{Une partie de l’image}}{\underbrace{\begin{pmatrix}
1 &0 &1 \\
0 & 1 & 0\\
1 & 0 & 1
\end{pmatrix}}} \odot \underset{\text{Filtre de convolution}}{\underbrace{\begin{pmatrix}
1 &1 &1 \\
0 & 1 & 1\\
0 & 0 & 1
\end{pmatrix}}} =\underset{\text{Partie de l’image convoluée}}{\underbrace{\begin{pmatrix}
1 & 0 &1 \\
0 & 1 & 0\\
0 & 0 & 1
\end{pmatrix}}}$$

L’action du filtre sur la partie de l’image fournit donc une matrice en sortie, que l’on nomme image convoluée.

Enfin, si l’on somme les coefficients de la partie de l’image qui a été convoluée, on retrouve bien le nombre 4. En décalant la fenêtre d’un pas horizontal et vertical fixé et en répétant ce processus sur toute l’image, on obtient au final une image convoluée réduite, qui présente deux avantages :

  • D’abord, on a pu déterminer certaines caractéristiques particulières sur l’images qui permettent de répondre à la problématique.
  • Ayant construit une image réduite, les temps de calculs suivants à effectuer par le réseau de neurones seront également réduits.

L’animation suivante permet de comprendre ce processus de décalage et de convolution :

L’animation suivante permet de comprendre ce processus de décalage et de convolution :

Source : IceCream Labs. Dans cet exemple, la convolution réduit la taille de l’image avec laquelle on travaille, et c’est souvent le cas avec les réseaux de neurones convolutifs.

Réseaux de neurones convolutifs

C’est donc une architecture de réseau de neurone particulière qui permet de traiter efficacement les images (les CNN en anglais). Il y a deux parties bien distinctes dans ces réseaux :

  • Les couches de convolution : la résultat d’une convolution étant encore une image, il est tout à fait possible d’utiliser plusieurs convolutions à la suite. On y stocke également des couches effectuant divers traitement tels que le pooling ou le dropout.
  • Les couches de perceptrons : ce sont ensuite ces couches qui permettront d’effectuer une prédiction (couches fully connected).

Les paramètres liés aux couches de convolution, tels que le nombre de filtres, la taille des filtres ou la quantité de couches dépend de ce que l’on souhaite étudier. Mais l’architecture reste la même, et c’est aujourd’hui celle qui est la plus répandue et la plus optimisée pour travailler avec des images.

Architecture du réseau de neurones convolutif VGG16

En résumé

Si l’on devait résumer en quelques lignes le chemin parcouru jusqu’ici pour comprendre comment une image est traitée par un réseau de neurones :

  • D’abord, on considère une image RGB de largeur M et longueur N que l’on donnera en entrée au réseau de neurones.
  • Ensuite, on applique des filtres de convolution sur l’image par l’intermédiaire d’une fenêtre qui se déplace sur l’image et qui “capte” l’information de cette zone.
  • En utilise ensuite une couche de perceptrons pour effectuer l’action souhaitée.

Pour terminer

Sachez qu’il existe une grande diversité d’architectures de réseaux de neurones pouvant traiter les images (et pas uniquement). Si vous avez aimé cet article et que vous souhaitez approfondir le sujet, je vous invite à lire les articles et livres suivants :