Qu'est-ce que la segmentation sémantique ?

La segmentation sémantique est un algorithme de Deep Learning qui associe une étiquette ou une catégorie à chaque pixel d'une image. Elle permet de reconnaître un ensemble de pixels qui forment des catégories distinctes. Par exemple, un véhicule autonome doit identifier des véhicules, des piétons, des panneaux de signalisation, des trottoirs et autres éléments de l'environnement routier.

La segmentation sémantique intervient dans de nombreuses applications telles que la conduite autonome, l'imagerie médicale et les contrôles industriels.

La séparation d'images en deux classes est un exemple simple de segmentation sémantique. Par exemple, dans la figure 1, une image montrant une personne à la plage est associée à une version montrant les pixels de l'image segmentés en deux classes distinctes : la personne et l'arrière-plan.

Figure 1 : Image et pixels étiquetés.

La segmentation sémantique n'est pas limitée à deux catégories. Vous pouvez changer le nombre de catégories pour classifier le contenu de l'image. Cette même image pourrait être segmentée en quatre classes : la personne, le ciel, la mer et l'arrière-plan, par exemple.

En quoi la segmentation sémantique diffère-t-elle de la détection d'objets ?

La segmentation sémantique peut être une alternative intéressante à la détection d'objets parce qu'elle permet à l'objet considéré de couvrir plusieurs zones de l'image au niveau du pixel. Cette technique détecte proprement les objets de forme irrégulière, contrairement à la détection d'objets, où les objets doivent s'insérer dans un cadre délimité (Figure 2).

Figure 2 : Détection d'objets, avec des cadres délimités identifiant les objets.

Comment la segmentation sémantique est-elle utilisée ?

La segmentation sémantique étiquette les pixels d'une image ; aussi est-elle plus précise que d'autres formes de détection d'objets. C'est ce qui rend la segmentation sémantique utile dans des applications variées requièrant des images cartographiques précises. Par exemple :

  • Conduite autonome : pour identifier un parcours conduisible pour les véhicules en distinguant la route des obstacles tels que les piétons, trottoirs, poteaux et autres véhicules.
  • Contrôles industriels : pour détecter les défauts dans des matériaux, comme le contrôle des composants électroniques.
  • Imagerie satellite : pour identifier les montagnes, les rivières, les déserts et autres types de terrains.
  • Imagerie médicale : pour analyser et détecter les anomalies cancéreuses dans les cellules.
  • Vision robotique : pour identifier les objets et le terrain et s'y déplacer.

Figure 3 : Segmentation sémantique d'une image satellite multispectrale.

Comment fonctionne la segmentation sémantique

Le processus d'apprentissage d'un réseau de segmentation sémantique pour classifier des images respecte les étapes suivantes :

  1. Analyser un ensemble d'images aux pixels étiquetés.
  2. Créer un réseau de segmentation sémantique.
  3. Entraîner le réseau à classifier des images selon des catégories de pixels.
  4. Evaluer la précision du réseau.

Exemple : Application de conduite autonome

La séquence dans la figure 4 montre un exemple concret de segmentation sémantique appliquée à la conduite autonome. Les images de la route sont automatiquement segmentées par rapport aux autres véhicules. La prochaine section montre comment ces réseaux sont créés.

Figure 4 : Segmentation sémantique pour une application de conduite autonome.

Comprendre l'architecture

Une approche commune de la segmentation sémantique consiste à créer un SegNet, qui est basé sur une architecture CNN, réseau de neurones à convolution. Une architecture CNN type est illustrée dans la figure 5.

Ce réseau CNN classifie l'image entière en une image comportant de nombreuses catégories prédéfinies.

Figure 5 : Structure type d'un CNN.

Pour établir une classification au niveau des pixels plutôt qu'au niveau de l'image entière, vous pouvez ajouter une implémentation inverse d'un CNN. Le processus de suréchantillonnage est effectué le même nombre de fois que le processus de sous-échantillonnage pour s'assurer que l'image finale possède les mêmes dimensions que l'image d'entrée. Enfin, une couche de classification des pixels est utilisée en sortie, qui mappe chaque pixel à une certaine classe. Cela forme une architecture codeur/décodeur, qui permet la segmentation sémantique.

Figure 6 : Réseau CNN exécutant des fonctions orientées image à chaque couche, puis sous-échantillonnant l'image à l'aide d'une couche de pooling (en vert). Ce processus est réitéré plusieurs fois pour la première moitié du réseau. La sortie de la première moitié de ce diagramme est suivie d'un nombre égal de couches de unpooling (en orange).

Utiliser MATLAB pour la segmentation sémantique

 

Dans MATLAB, le processus de segmentation sémantique suit les cinq étapes ci-après :

  1. Étiqueter les données ou obtenir des données étiquetées.
  2. Créer un datastore pour les images originales et les images étiquetées.
  3. Partitionner les datastores.
  4. Importer un CNN et le transformer en SegNet.
  5. Entraîner et évaluer le réseau.

ÉTAPE 1 : Étiqueter les données ou obtenir des données étiquetées.

Les modèles de Deep Learning sont élaborés à partir de nombreuses données et la segmentation sémantique ne fait pas exception. Une possibilité consiste à rechercher des données étiquetées sur Internet. Si vous possédez votre propre jeu de données, vous pouvez utiliser l'application Image Labeler de MATLAB. Vous pouvez utiliser ce jeu de données pour procéder à l'apprentissage d'un SegNet.

Image 7 : Application MATLAB Image Labeler permettant d'étiqueter les images pour la segmentation sémantique. 

En savoir plus

ÉTAPE 2 : Créer un datastore pour les images originales et les images étiquetées.

Quand on manipule de gros volumes de données, il est souvent impossible de charger en mémoire toutes les informations. Pour gérer de grands jeux de données, vous pouvez utiliser un datastore. Un datastore contient l'emplacement des fichiers auxquels vous souhaitez accéder et il vous permet de les lire en mémoire uniquement lorsque vous avez besoin de les exploiter.

Pour créer un SegNet, il vous faut deux datastores :

  1. ImageDatastore, qui contient les images originales
  2. PixelLabelDatastore, qui contient les images étiquetées

ÉTAPE 3 : Partitionner les datastores.

Lors de la création d'un SegNet, vous devez partitionner le datastore en deux :

  1. Le jeu d'apprentissage, servant à entraîner le SegNet
  2. Le jeu de test, servant à évaluer la précision d'un réseau

Figure 8 : Scène routière montrant l'image en couleur (à gauche) et les pixels étiquetés correspondants (à droite).

ÉTAPE 4 : Importer un CNN et le convertir en SegNet.

Charger un réseau préentraîné, par exemple VGG16, et utiliser la commande SegNetLayers pour créer l'architecture codeur/décodeur nécessaire à l'étiquetage au niveau pixel.

Figure 9 : Création de l'architecture SegNet avec une seule ligne de code dans MATLAB.

ÉTAPE 5 : Entraîner et évaluer le réseau.

Lors de la dernière étape, vous définissez les hyperparamètres pour le réseau et vous l'entraînez.

En savoir plus sur la segmentation sémantique

Les produits qui supportent l'utilisation de la segmentation sémantique pour l'analyse d'images incluent MATLAB®Computer Vision Toolbox™ pour l'étiquetage des pixels et Deep Learning Toolbox™ pour la création et l'apprentissage du réseau.

L'apprentissage et la prédiction sont supportés par les GPU compatibles CUDA® dotés d'une capacité de calcul 3.0 ou supérieure. L'utilisation d'un GPU est conseillée et nécessite Parallel Computing Toolbox™.

Références logicielles

Obtenez gratuitement la version d'essai

Bénéficiez de 30 jours de découverte.