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 automatisée, 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, à la figure 1, une image présentant 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 étiquette des pixels.

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 de délimitation (Figure 2).

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

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

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 de divers domaines qui requièrent des cartes d'images précises. Exemples :

  • 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 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'entraînement d'un réseau de segmentation sémantique aux fins de 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. Accéder à la précision du réseau.

Exemple : Application de conduite automatisée

La séquence à la figure 4 montre un exemple concret de segmentation sémantique appliquée à la conduite automatisée. 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 automatisée.

Compréhension de 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 à 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 génération de classification des pixels est utilisée, 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 regroupement (en vert). Ce processus est réitéré plusieurs fois pour la première moitié du réseau. La génération de la première moitié de ce diagramme est suivie d'un nombre égal de couches de type « nonpooling » (en orange).

Utilisation de MATLAB pour la segmentation sémantique

 

Dans MATLAB, le processus d'exécution de la 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 ensemble de données, vous pouvez utiliser l'application Image Labeler de MATLAB. Vous pouvez utiliser cet ensemble de données pour procéder à l'entraînement d'un SegNet.

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

En savoir plus

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

En cas de manipulation de gros volumes de données, il est souvent impossible de charger en mémoire toutes les informations. Pour gérer de grands ensembles 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. La partie d'entraînement, servant à entraîner le SegNet
  2. La partie 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 transformer en SegNet.

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

  1. La partie d'entraînement, servant à entraîner le SegNet
  2. La partie de test, servant à évaluer la précision d'un réseau

Figure 9 : Création de l'architecture SegNet avec une 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 pour entraîner celui-ci.

En savoir plus sur la segmentation sémantique

Les produits qui prennent en charge l'utilisation de la segmentation sémantique à des fins d'analyse d'images incluent MATLAB®, Computer Vision System Toolbox™ pour l'étiquetage des pixels et Deep Learning Toolbox™ pour la création et l'entraînement du réseau.

L'entraînement et la prédiction sont pris en charge 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

Version d’évaluation

Bénéficiez d'une version d'évaluation de 30 jours.

Vous avez des questions ?

Contactez un de nos experts en Deep Learning.