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 changer 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 débutez avec TensorFlow Lite et que vous travaillez avec Android ou iOS, nous vous recommandons 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 illustre l'implémentation des deux méthodes en tant que lib_task_api et lib_interpreter , respectivement.

Voir l'exemple Android

Voir l'exemple iOS

Si vous utilisez une plate-forme 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 en profondeur de pointe pour la segmentation d'images sémantiques, où 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 des images prédit si chaque pixel d'une image est associé à une certaine classe. Cela contraste avec la détection d'objet , qui détecte les objets dans des régions rectangulaires, et la classification d'image , 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 regroupement de pyramides spatiales atrous (ASPP) pour segmenter de manière robuste des 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 de former efficacement BN à la foulée de sortie = 16 et atteint une performance élevée à la foulée de sortie = 8 pendant l'évaluation.
  4. DeepLabv3+ : Nous étendons DeepLabv3 pour inclure un module décodeur simple mais efficace pour affiner les résultats de segmentation, en particulier le long des limites des objets. De plus, dans cette structure d'encodeur-décodeur, on peut contrôler arbitrairement la résolution des caractéristiques extraites de l'encodeur par une convolution atreuse pour trouver un compromis entre la précision et la durée d'exécution.

Références 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 Dispositif GPU CPU
Deeplab v3 2,7 Mo Pixel 3 (Android 10) 16ms 37ms*
Pixel 4 (Android 10) 20ms 23ms*
iPhone XS (iOS 12.4.1) 16ms 25ms**

* 4 fils utilisés.

** 2 fils utilisés sur iPhone pour le meilleur résultat de performance.

Lectures complémentaires et ressources