La journée communautaire ML est le 9 novembre ! Rejoignez - nous pour les mises à jour de tensorflow, JAX et plus En savoir plus

Classification des images

La tâche consistant à identifier ce qu'une image représente est appelée classification d'image . Un modèle de classification d'image est formé pour reconnaître diverses classes d'images. Par exemple, vous pouvez entraîner un modèle à reconnaître des photos représentant trois types d'animaux différents: les lapins, les hamsters et les chiens. TensorFlow Lite fournit des modèles pré-entraînés optimisés que vous pouvez déployer dans vos applications mobiles. En savoir plus sur la classification d'images à l'aide de TensorFlow ici .

L'image suivante montre la sortie du modèle de classification d'image sur Android.

Capture d'écran de l'exemple Android

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 classification d'images en seulement quelques lignes de code. Vous pouvez également créer votre propre pipeline d'inférence personnalisé à l'aide de la bibliothèque de support TensorFlow Lite .

L'exemple Android ci-dessous illustre l'implémentation des deux méthodes comme lib_task_api et lib_support , respectivement.

Voir l'exemple Android

Voir l'exemple iOS

Si vous utilisez une plate-forme autre qu'Android / iOS, ou si vous connaissez déjà les API TensorFlow Lite , téléchargez le modèle de démarrage et les fichiers de prise en charge (le cas échéant).

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

Description du modèle

Comment ça fonctionne

Pendant la formation, un modèle de classification d'images est alimenté en images et leurs étiquettes associées. Chaque étiquette est le nom d'un concept ou d'une classe distincte que le modèle apprendra à reconnaître.

Avec suffisamment de données d'apprentissage (souvent des centaines ou des milliers d'images par étiquette), un modèle de classification d'images peut apprendre à prédire si de nouvelles images appartiennent à l'une des classes sur lesquelles il a été formé. Ce processus de prédiction est appelé inférence . Notez que vous pouvez également utiliser l' apprentissage par transfert pour identifier de nouvelles classes d'images à l'aide d'un modèle préexistant. L'apprentissage par transfert ne nécessite pas un très grand ensemble de données d'entraînement.

Lorsque vous fournissez par la suite une nouvelle image en entrée du modèle, il affichera les probabilités de l'image représentant chacun des types d'animaux sur lesquels elle a été entraînée. Un exemple de sortie pourrait être le suivant:

Type d'animal Probabilité
Lapin 0,07
Hamster 0,02
Chien 0,91

Chaque numéro de la sortie correspond à une étiquette dans les données d'apprentissage. En associant la sortie aux trois étiquettes sur lesquelles le modèle a été entraîné, vous pouvez voir que le modèle a prédit une forte probabilité que l'image représente un chien.

Vous remarquerez peut-être que la somme de toutes les probabilités (pour lapin, hamster et chien) est égale à 1. Il s'agit d'un type de sortie courant pour les modèles à classes multiples (voir Softmax pour plus d'informations).

Résultats ambigus

Étant donné que les probabilités de sortie seront toujours totalisées à 1, si une image n'est pas reconnue avec certitude comme appartenant à l'une des classes sur lesquelles le modèle a été entraîné, vous pouvez voir la probabilité distribuée à travers les étiquettes sans qu'aucune valeur ne soit significativement plus grande.

Par exemple, ce qui suit peut indiquer un résultat ambigu:

Étiqueter Probabilité
lapin 0,31
hamster 0,35
chien 0,34
Si votre modèle renvoie fréquemment des résultats ambigus, vous aurez peut-être besoin d'un modèle différent et plus précis.

Choisir une architecture modèle

TensorFlow Lite vous fournit une variété de modèles de classification d'images qui sont tous entraînés sur l'ensemble de données d'origine. Les architectures de modèle telles que MobileNet, Inception et NASNet sont disponibles sur la page des modèles hébergés . Pour choisir le meilleur modèle pour votre cas d'utilisation, vous devez prendre en compte les architectures individuelles ainsi que certains des compromis entre les différents modèles. Certains de ces compromis de modèle sont basés sur des mesures telles que les performances, la précision et la taille du modèle. Par exemple, vous pourriez avoir besoin d'un modèle plus rapide pour créer un lecteur de codes à barres, tandis que vous préférerez peut-être un modèle plus lent et plus précis pour une application d'imagerie médicale. Notez que les modèles de classification d'image fournis acceptent différentes tailles d'entrée. Pour certains modèles, cela est indiqué dans le nom du fichier. Par exemple, le modèle Mobilenet_V1_1.0_224 accepte une entrée de 224x224 pixels. Tous les modèles nécessitent trois canaux de couleur par pixel (rouge, vert et bleu). Les modèles quantifiés nécessitent 1 octet par canal et les modèles flottants nécessitent 4 octets par canal. Les exemples de code Android et iOS montrent comment traiter des images de caméra pleine taille dans le format requis pour chaque modèle.

Utilisations et limites

Les modèles de classification d'images TensorFlow Lite sont utiles pour la classification en une seule étiquette; c'est-à-dire prédire quelle étiquette unique l'image est la plus susceptible de représenter. Ils sont formés pour reconnaître 1000 classes d'images. Pour obtenir la liste complète des classes, consultez le fichier d'étiquettes dans le fichier zip du modèle . Si vous souhaitez entraîner un modèle à reconnaître de nouvelles classes, voir Personnaliser le modèle . Pour les cas d'utilisation suivants, vous devez utiliser un type de modèle différent:
  • Prédire le type et la position d'un ou plusieurs objets dans une image (voir Détection d'objets )
  • Prédire la composition d'une image, par exemple le sujet par rapport à l'arrière-plan (voir Segmentation )
Une fois que le modèle de démarrage est exécuté sur votre appareil cible, vous pouvez expérimenter différents modèles pour trouver l'équilibre optimal entre les performances, la précision et la taille du modèle.

Personnaliser le modèle

Les modèles pré-entraînés fournis sont formés pour reconnaître 1000 classes d'images. Pour obtenir la liste complète des classes, consultez le fichier d'étiquettes dans le fichier zip du modèle . Vous pouvez également utiliser l'apprentissage par transfert pour réentraîner un modèle afin de reconnaître les classes qui ne font pas partie de l'ensemble d'origine. Par exemple, vous pouvez réentraîner le modèle pour faire la distinction entre différentes espèces d'arbres, même s'il n'y a pas d'arbres dans les données d'apprentissage d'origine. Pour ce faire, vous aurez besoin d'un ensemble d'images de formation pour chacune des nouvelles étiquettes que vous souhaitez former. Apprenez à effectuer un apprentissage par transfert avec TFLite Model Maker ou dans le codelab Reconnaître les fleurs avec TensorFlow .

Benchmarks de performance

Les performances du modèle sont mesurées en termes de temps nécessaire à un modèle pour exécuter l'inférence sur un matériel donné. Plus le temps est court, plus le modèle est rapide. Les performances dont vous avez besoin dépendent de votre application. Les performances peuvent être importantes pour des applications telles que la vidéo en temps réel, où il peut être important d'analyser chaque image avant que l'image suivante ne soit dessinée (par exemple, l'inférence doit être plus rapide que 33 ms pour effectuer une inférence en temps réel sur un flux vidéo à 30 ips) . Les performances des modèles MobileNet quantifiés TensorFlow Lite vont de 3,7 ms à 80,3 ms. Les chiffres de référence de performance sont générés avec l' outil d'analyse comparative .
Nom du modèle Taille du modèle Appareil NNAPI CPU
Mobilenet_V1_1.0_224_quant 4,3 Mo Pixel 3 (Android 10) 6 ms 13 ms *
Pixel 4 (Android 10) 3,3 ms 5 ms *
iPhone XS (iOS 12.4.1) 11 ms **

* 4 fils utilisés.

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

Précision du modèle

La précision est mesurée en fonction de la fréquence à laquelle le modèle classe correctement une image. Par exemple, on peut s'attendre à ce qu'un modèle avec une précision déclarée de 60% classe correctement une image en moyenne 60% du temps.

La liste des modèles hébergés fournit des statistiques de précision Top-1 et Top-5. Top-1 fait référence à la fréquence à laquelle l'étiquette correcte apparaît comme l'étiquette avec la probabilité la plus élevée dans la sortie du modèle. Top-5 fait référence à la fréquence à laquelle l'étiquette correcte apparaît dans les 5 probabilités les plus élevées dans la sortie du modèle.

La précision du Top 5 des modèles MobileNet quantifiés TensorFlow Lite va de 64,4 à 89,9%.

Taille du modèle

La taille d'un modèle sur disque varie en fonction de ses performances et de sa précision. La taille peut être importante pour le développement mobile (où elle peut avoir un impact sur la taille de téléchargement des applications) ou lorsque vous travaillez avec du matériel (où le stockage disponible peut être limité).

Les tailles des modèles MobileNet quantifiés TensorFlow Lite vont de 0,5 à 3,4 Mo.

Lectures et ressources supplémentaires

Utilisez les ressources suivantes pour en savoir plus sur les concepts liés à la classification des images: