Segmentation

La segmentation d'image est le processus de partitionnement d'une image numérique en plusieurs segments (ensembles de pixels, également appelés objets image). Le but de la segmentation est de simplifier et/ou de modifier la représentation d'une image en quelque chose de plus significatif et plus facile à analyser.

L'image suivante montre la sortie du modèle de segmentation d'image sur Android. Le modèle créera un masque sur les objets cibles avec une grande précision.

Commencer

Si vous êtes nouveau sur TensorFlow Lite et que vous travaillez avec Android ou iOS, il est recommandé d'explorer les exemples d'applications suivants qui peuvent vous aider à démarrer.

Vous pouvez tirer parti de l'API prête à l'emploi de la bibliothèque de tâches TensorFlow Lite pour intégrer des modèles de segmentation d'images en quelques lignes de code seulement. Vous pouvez également intégrer le modèle à l'aide de l' API Java TensorFlow Lite Interpreter .

L'exemple Android ci-dessous montre l'implémentation des deux méthodes respectivement lib_task_api et lib_interpreter .

Voir l'exemple Android

Voir un exemple iOS

Si vous utilisez une plateforme autre qu'Android ou iOS, ou si vous connaissez déjà les API TensorFlow Lite , vous pouvez télécharger notre modèle de segmentation d'image de démarrage.

Télécharger le modèle de démarrage

Description du modèle

DeepLab est un modèle d'apprentissage profond de pointe pour la segmentation sémantique d'images, dont l'objectif est d'attribuer des étiquettes sémantiques (par exemple, personne, chien, chat) à chaque pixel de l'image d'entrée.

Comment ça fonctionne

La segmentation sémantique d'image prédit si chaque pixel d'une image est associé à une certaine classe. Cela contraste avec la détection d'objets , qui détecte les objets dans des régions rectangulaires, et la classification d'images , qui classe l'image globale.

L'implémentation actuelle inclut les fonctionnalités suivantes :

  1. DeepLabv1 : Nous utilisons la convolution atreuse pour contrôler explicitement la résolution à laquelle les réponses des caractéristiques sont calculées dans les réseaux de neurones à convolution profonde.
  2. DeepLabv2 : Nous utilisons le pooling de pyramides spatiales atreuses (ASPP) pour segmenter de manière robuste les objets à plusieurs échelles avec des filtres à plusieurs taux d'échantillonnage et des champs de vision efficaces.
  3. DeepLabv3 : Nous augmentons le module ASPP avec une fonctionnalité au niveau de l'image [5, 6] pour capturer des informations à plus longue portée. Nous incluons également des paramètres de normalisation par lots [7] pour faciliter la formation. En particulier, nous appliquons une convolution atreuse pour extraire les caractéristiques de sortie à différentes foulées de sortie pendant l'entraînement et l'évaluation, ce qui permet efficacement l'entraînement du BN à une foulée de sortie = 16 et atteint une performance élevée à une foulée de sortie = 8 pendant l'évaluation.
  4. DeepLabv3+ : nous étendons DeepLabv3 pour inclure un module de décodage simple mais efficace afin d'affiner les résultats de segmentation, en particulier le long des limites des objets. De plus, dans cette structure codeur-décodeur, on peut contrôler arbitrairement la résolution des caractéristiques du codeur extraites par convolution atreuse pour faire un compromis entre précision et durée d'exécution.

Repères de performances

Les numéros de référence de performance sont générés avec l'outil décrit ici .

Nom du modèle Taille du modèle Appareil GPU CPU
Deeplab v3 2,7 Mo Pixel 3 (Android 10) 16 ms 37 ms*
Pixel 4 (Android 10) 20 ms 23 ms*
iPhone XS (iOS 12.4.1) 16 ms 25 ms**

* 4 fils utilisés.

** 2 threads utilisés sur iPhone pour le meilleur résultat de performances.

Lectures complémentaires et ressources