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

Détection d'objets

Étant donné une image ou un flux vidéo, un modèle de détection d'objet peut identifier lequel parmi un ensemble connu d'objets pourrait être présent et fournir des informations sur leurs positions dans l'image.

Par exemple, cette capture d'écran de l' exemple d'application montre comment deux objets ont été reconnus et leurs positions annotées:

Capture d'écran de l'exemple Android

Commencer

Pour apprendre à utiliser la détection d'objets dans une application mobile, explorez les exemples d'applications et de guides .

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 détection d'objet de démarrage et les étiquettes qui l'accompagnent.

Télécharger le modèle de démarrage avec les métadonnées

Pour plus d'informations sur les métadonnées et les champs associés (par exemple: labels.txt ), voir Lire les métadonnées à partir des modèles

Si vous souhaitez entraîner un modèle de détection personnalisé pour votre propre tâche, consultez Personnalisation du modèle .

Pour les cas d'utilisation suivants, vous devez utiliser un type de modèle différent:

  • Prédire quelle étiquette unique l'image représente le plus probablement (voir la classification des images )
  • Prédire la composition d'une image, par exemple le sujet par rapport à l'arrière-plan (voir segmentation )

Exemples d'applications et de guides

Si vous êtes nouveau sur 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.

Android

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 détection d'objets en quelques lignes de code. Vous pouvez également créer votre propre pipeline d'inférence personnalisé à l'aide de l' API Java TensorFlow Lite Interpreter .

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

Voir l'exemple Android

iOS

Vous pouvez intégrer le modèle à l'aide de l' API Swift de l'interpréteur TensorFlow Lite . Voir l'exemple iOS ci-dessous.

Voir l'exemple iOS

Description du modèle

Cette section décrit la signature des modèles de détecteur à coup unique convertis en TensorFlow Lite à partir de l' API de détection d'objets TensorFlow .

Un modèle de détection d'objets est formé pour détecter la présence et l'emplacement de plusieurs classes d'objets. Par exemple, un modèle peut être formé avec des images qui contiennent divers morceaux de fruits, avec une étiquette qui spécifie la classe de fruits qu'ils représentent (par exemple une pomme, une banane ou une fraise), et des données spécifiant où chaque objet apparaît dans l'image.

Lorsqu'une image est ensuite fournie au modèle, il génère une liste des objets qu'il détecte, l'emplacement d'un cadre englobant contenant chaque objet et un score qui indique la certitude que la détection était correcte.

Signature d'entrée

Le modèle prend une image en entrée.

Supposons que l'image attendue est de 300x300 pixels, avec trois canaux (rouge, bleu et vert) par pixel. Celui-ci doit être transmis au modèle sous la forme d'un tampon aplati de 270 000 valeurs d'octets (300x300x3). Si le modèle est quantifié , chaque valeur doit être un seul octet représentant une valeur comprise entre 0 et 255.

Vous pouvez consulter notreexemple de code d'application pour comprendre comment effectuer ce prétraitement sur Android.

Signature de sortie

Le modèle génère quatre tableaux, mappés aux indices 0-4. Les tableaux 0, 1 et 2 décrivent N objets détectés, avec un élément dans chaque tableau correspondant à chaque objet.

Indice Nom La description
0 Emplacements Tableau multidimensionnel de [N] [4] valeurs à virgule flottante entre 0 et 1, les tableaux internes représentant des cadres de délimitation sous la forme [haut, gauche, bas, droite]
1 Des classes Tableau de N entiers (sortie sous forme de valeurs à virgule flottante) indiquant chacun l'index d'une étiquette de classe à partir du fichier d'étiquettes
2 Les scores Tableau de N valeurs à virgule flottante entre 0 et 1 représentant la probabilité qu'une classe a été détectée
3 Nombre de détections Valeur entière de N

Par exemple, imaginez qu'un modèle ait été formé pour détecter les pommes, les bananes et les fraises. Lorsqu'une image est fournie, elle produira un nombre défini de résultats de détection - dans cet exemple, 5.

Classer But Emplacement
Pomme 0,92 [18, 21, 57, 63]
banane 0,88 [100, 30, 180, 150]
fraise 0,87 [7, 82, 89, 163]
banane 0,23 [42, 66, 57, 83]
Pomme 0,11 [6, 42, 31, 58]

Score de confiance

Pour interpréter ces résultats, nous pouvons regarder le score et l'emplacement de chaque objet détecté. Le score est un nombre compris entre 0 et 1 qui indique la certitude que l'objet a été réellement détecté. Plus le nombre est proche de 1, plus le modèle est confiant.

En fonction de votre application, vous pouvez décider d'un seuil de coupure en dessous duquel vous rejetterez les résultats de détection. Pour l'exemple actuel, un seuil raisonnable est un score de 0,5 (ce qui signifie une probabilité de 50% que la détection soit valide). Dans ce cas, les deux derniers objets du tableau seraient ignorés car ces scores de confiance sont inférieurs à 0,5:

Classer But Emplacement
Pomme 0,92 [18, 21, 57, 63]
banane 0,88 [100, 30, 180, 150]
fraise 0,87 [7, 82, 89, 163]
banane 0,23 [42, 66, 57, 83]
Pomme 0,11 [6, 42, 31, 58]

Le seuil que vous utilisez doit être basé sur le fait que vous êtes plus à l'aise avec les faux positifs (objets qui sont mal identifiés, ou les zones de l'image qui sont identifiées à tort comme des objets alors qu'elles ne le sont pas), ou les faux négatifs (objets authentiques qui sont manqué parce que leur confiance était faible).

Par exemple, dans l'image suivante, une poire (qui n'est pas un objet que le modèle a été entraîné à détecter) a été identifiée à tort comme une «personne». Ceci est un exemple de faux positif qui pourrait être ignoré en sélectionnant un seuil approprié. Dans ce cas, un seuil de 0,6 (ou 60%) exclurait confortablement le faux positif.

Capture d'écran d'un exemple Android montrant un faux positif

Emplacement

Pour chaque objet détecté, le modèle renvoie un tableau de quatre nombres représentant un rectangle englobant qui entoure sa position. Pour le modèle de démarrage fourni, les numéros sont classés comme suit:

[ Haut, la gauche, bas, droite ]

La valeur supérieure représente la distance entre le bord supérieur du rectangle et le haut de l'image, en pixels. La valeur de gauche représente la distance entre le bord gauche et la gauche de l'image d'entrée. Les autres valeurs représentent les bords inférieur et droit de la même manière.

Benchmarks de performance

Les numéros de référence de performance pour notre modèle de démarrage sont générés avec l'outil décrit ici .

Nom du modèle Taille du modèle Appareil GPU CPU
COCO SSD MobileNet v1 27 Mo Pixel 3 (Android 10) 22 ms 46 ms *
Pixel 4 (Android 10) 20 ms 29 ms *
iPhone XS (iOS 12.4.1) 7,6 ms 11 ms **

* 4 fils utilisés.

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

Personnalisation du modèle

Modèles pré-formés

Des modèles de détection optimisés pour les mobiles avec une variété de caractéristiques de latence et de précision peuvent être trouvés dans le zoo de détection . Chacun d'eux suit les signatures d'entrée et de sortie décrites dans les sections suivantes.

La plupart des zips téléchargés contiennent un fichier model.tflite . S'il n'y en a pas, un flatbuffer TensorFlow Lite peut être généré à l'aide de ces instructions . Les modèles SSD du zoo de détection d'objets TF2 peuvent également être convertis en TensorFlow Lite en suivant les instructions ici . Il est important de noter que les modèles de détection ne peuvent pas être convertis directement à l'aide du convertisseur TensorFlow Lite , car ils nécessitent une étape intermédiaire de génération d'un modèle source adapté aux mobiles. Les scripts liés ci-dessus effectuent cette étape.

Les scripts d'exportation TF1 et TF2 ont tous deux des paramètres qui peuvent activer un plus grand nombre d'objets de sortie ou un post-traitement plus lent et plus précis. Veuillez utiliser --help avec les scripts pour voir une liste exhaustive des arguments pris en charge.

Actuellement, l'inférence sur l'appareil n'est optimisée qu'avec les modèles SSD. Une meilleure prise en charge d'autres architectures telles que CenterNet et EfficientDet est à l'étude.

Comment choisir un modèle à personnaliser?

Chaque modèle est livré avec sa propre précision (quantifiée par la valeur mAP) et ses propres caractéristiques de latence. Vous devez choisir un modèle qui convient le mieux à votre cas d'utilisation et au matériel prévu. Par exemple, les modèles Edge TPU sont idéaux pour l'inférence sur le Edge TPU de Google sur le Pixel 4.

Vous pouvez utiliser notre outil de référence pour évaluer les modèles et choisir l'option la plus efficace disponible.

Affiner les modèles sur des données personnalisées

Les modèles pré-entraînés que nous fournissons sont formés pour détecter 90 classes d'objets. Pour obtenir la liste complète des classes, consultez le fichier d'étiquettes dans les métadonnées du modèle .

Vous pouvez utiliser une technique connue sous le nom d'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 détecter plusieurs types de légumes, bien qu'il n'y ait qu'un seul légume dans les données d'entraînement d'origine. Pour ce faire, vous aurez besoin d'un ensemble d'images de formation pour chacune des nouvelles étiquettes que vous souhaitez former. La méthode recommandée consiste à utiliser la bibliothèque TensorFlow Lite Model Maker , qui simplifie le processus d'entraînement d'un modèle TensorFlow Lite à l'aide d'un jeu de données personnalisé, avec quelques lignes de codes. Il utilise l'apprentissage par transfert pour réduire la quantité de données et de temps d'entraînement requis. Vous pouvez également tirer des leçons de la détection de Few-shot Colab comme exemple de réglage fin d'un modèle pré-entraîné avec quelques exemples.

Pour une mise au point avec des ensembles de données plus volumineux, consultez ces guides pour entraîner vos propres modèles avec l'API de détection d'objets TensorFlow: TF1 , TF2 . Une fois formés, ils peuvent être convertis dans un format compatible TFLite avec les instructions ici: TF1 , TF2