Les images contiennent de nombreuses informations importantes. Si elles sont faciles à déceler pour nos yeux habitués, elles représentent un vrai challenge en analyse de données. L’ensemble de ces techniques est connu sous le nom d’« image processing » ou traitement d’image. Dans cet article, vous découvrirez les algorithmes, techniques et outils classiques permettant de traiter les données sous forme d’images.
Qu'est-ce que l’image processing ?
Comme son nom l’indique, le traitement d’image consiste à traiter des images, ce qui peut inclure de nombreuses techniques différentes, et le résultat final peut se présenter sous la forme d’une autre image, d’une variation ou simplement d’un paramètre de cette image. Ce résultat peut ensuite être utilisé pour une analyse plus approfondie ou une prise de décision.
Il s’agit de la partie centrale de la vision par ordinateur (ou « computer vision ») qui joue un rôle crucial dans de nombreux exemples du monde réel comme la robotique, les voitures autonomes et la détection d’objets. Le traitement d’images nous permet de transformer et de manipuler des milliers d’images à la fois et d’en extraire des informations utiles.
Mais qu'est-ce qu'un image ?
Une image peut être représentée comme une fonction en 2D F(x,y) où x et y sont des coordonnées spatiales. Il s’agit donc d’un tableau de pixels disposés en colonnes et en rangées. La valeur de F en un point x,y est connue comme l’intensité d’une image à ce point. Si x, y et la valeur de l’amplitude sont finis, on parle d’image numérique.
Une image peut également être représentée en 3D dont les coordonnées sont x, y et z. Les pixels sont alors disposés sous la forme d’une matrice. C’est ce qu’on appelle une image RVB (ou RGB en anglais). Si l’image est en niveaux de gris, il n’y a qu’un seul canal : z = 1.
Techniques classiques d’image processing
Historiquement, les images étaient traitées avec des méthodes d’analyse mathématique, nous allons en présenter quelques-unes ci-dessous :
- Le flou gaussien, ou lissage gaussien, est le résultat de l’application sur une image, c’est-à-dire sur une matrice telle que défini ci-dessus, d’une fonction gaussienne. Il est utilisé pour réduire le bruit de l’image et atténuer les détails. L’effet visuel de cette technique de flou est similaire à celui de regarder une image à travers un écran translucide. Elle est parfois utilisée comme technique d’augmentation de données pour du deep learning dont nous parlerons plus en détail ci-dessous.
- La transformée de Fourier décompose une image en composantes sinus et cosinus. Elle a de multiples applications comme la reconstruction d’images, la compression d’images ou le filtrage d’images. Puisque nous parlons d’images, nous allons prendre en considération la transformée de Fourier discrète.
Considérons une sinusoïde, elle est composée de trois éléments :
- L’amplitude – liée au contraste
- La fréquence spatiale – liée à la luminosité
- La phase – liée à l’information sur la couleur
La détection des contours est une technique de traitement d’image permettant de trouver les limites des objets dans les images, elle fonctionne en détectant les discontinuités de la luminosité. Plus précisément, les bords sont définis comme les maxima locaux du gradient de l’image, c’est-à-dire les zones où il y a une grande variation de valeurs entre deux zones de pixels. L’algorithme de détection des contours le plus courant est celui de Sobel.
Image Processing avec des réseaux de neurones
L’apparition des réseaux de neurones et des puissances de calcul accrues a permis de révolutionner le traitement d’image. En particulier, les réseaux de convolution qui s’inspirent des techniques citées précédemment excellent dans la détection et la reconnaissance d’objets ou de personnes. Comment fonctionnent-ils ?
Un réseau neuronal convolutif, ou CNN en abrégé, comporte trois types de couches principales :
- La couche convolutionnelle (CONV) : Elle est responsable de l’exécution de l’opération de convolution. L’élément impliqué dans l’exécution de l’opération de convolution est appelé le noyau/filtre (matrice). Le noyau effectue des décalages horizontaux et verticaux jusqu’à ce que l’image entière soit traversée. Son fonctionnement est similaire à la technique de détection des contours.
- Couche de mise en commun (POOL) : Cette couche est responsable de la réduction de la dimensionnalité. Elle permet de diminuer la puissance de calcul nécessaire au traitement des données. Il existe deux types de mise en commun : La mise en commun maximale et la mise en commun moyenne. La mise en commun maximale renvoie la valeur maximale de la zone couverte par le noyau sur l’image. La mise en commun moyenne renvoie la moyenne de toutes les valeurs de la partie de l’image couverte par le noyau.
- Couche entièrement connectée (FC) : La couche entièrement connectée (FC) est présente à la fin des architectures CNN. Elle est similaire à une couche traditionnelle de réseaux de neurones et permet, après application d’une fonction d’activation, de renvoyer la sortie attendue par le réseau, par exemple une classification.
L’ajout de fonctions non linéaires (« RELU ») au sein des réseaux ou d’architectures spécifiques permettent de répondre à des problématiques plus complexes. Les exemples sont nombreux : DenseNet, U-Net, VGG…
Generative Adversarial Networks
Les données labellisées étant parfois trop peu nombreuses pour l’entraînement de réseaux complexes, les modèles génératifs dits GAN pour Generative Adversarial Networks sont particulièrement utilisés aujourd’hui.
Les GANs sont composés de deux modèles : Generator et Discriminator. Le générateur apprend à créer de fausses images qui semblent réalistes afin de tromper le discriminateur et le discriminateur apprend à distinguer les fausses images des vraies.
Le générateur n’est pas autorisé à voir les images réelles, il peut donc produire de mauvais résultats dans la phase de démarrage, tandis que le discriminateur est autorisé à voir les images réelles, mais elles sont mélangées avec les images fausses produites par le générateur, qu’il doit classer comme réelles ou fausses.
Un certain bruit est introduit dans le générateur afin qu’il soit capable de produire des exemples différents à chaque fois et non le même type d’image. Sur la base des scores prédits par le discriminateur, le générateur essaie d’améliorer ses résultats. Après un certain temps, le générateur sera capable de produire des images qui seront plus difficiles à distinguer. Le discriminateur s’améliore également car il obtient du générateur des images de plus en plus réalistes à chaque tour.
Les types de GAN les plus populaires sont les GAN convolutifs profonds (DCGAN), les GAN conditionnels (cGAN), les StyleGAN, CycleGAN etc.
Les GANs sont parfaits pour la génération et la manipulation d’images : vieillissement du visage, mélange de photos, super résolution, peinture de photos, traduction de vêtements.
Conclusion
Il existe beaucoup de techniques d’image processing, et comme dans beaucoup de cas aujourd’hui, les réseaux de neurones permettent d’obtenir beaucoup d’informations et des conclusions très précises. Python est le langage de prédilection pour ce genre de tâches, avec des outils comme OpenCv, Scikit Image, Tensorflow ou Pytorch.
Les formations dispensées par DataScientest proposent de nombreux outils pour apprendre à traiter les données sous forme d’image et à utiliser les réseaux de neurones les plus complexes.