Détection d'objet

Étant donné une image ou un flux vidéo, un modèle de détection d'objet peut identifier lesquels d'un ensemble connu d'objets pourraient être présents 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 savoir comment utiliser la détection d'objets dans une application mobile, explorez les exemples d'applications et de guides .

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

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

Pour plus d'informations sur les métadonnées et les champs associés (ex : labels.txt ) voir Lire les métadonnées 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 autre type de modèle :

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

Exemples d'applications et 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 seulement. 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 en utilisant respectivement la bibliothèque de tâches et l'API de l'interpréteur .

Voir l'exemple Android

IOS

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

Voir un exemple iOS

Description du modèle

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

Un modèle de détection d'objet est entraîné pour détecter la présence et l'emplacement de plusieurs classes d'objets. Par exemple, un modèle peut être entraîné avec des images contenant divers morceaux de fruits, ainsi qu'une étiquette spécifiant 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, celui-ci génère une liste des objets qu'il détecte, l'emplacement d'un cadre de délimitation contenant chaque objet et un score qui indique le degré de confiance dans la détection correcte.

Signature d'entrée

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

Supposons que l'image attendue fasse 300 x 300 pixels, avec trois canaux (rouge, bleu et vert) par pixel. Cela doit être transmis au modèle sous la forme d'un tampon aplati de 270 000 valeurs d'octets (300 x 300 x 3). 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 notre exemple 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 Description
0 Emplacements Tableau multidimensionnel de [N][4] valeurs à virgule flottante comprises 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 (sortis sous forme de valeurs à virgule flottante), chacun indiquant l'index d'une étiquette de classe à partir du fichier d'étiquettes
2 Partitions Tableau de N valeurs à virgule flottante comprises entre 0 et 1 représentant la probabilité qu'une classe ait é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 des pommes, des bananes et des fraises. Lorsqu'une image lui est fournie, elle génère un nombre défini de résultats de détection - dans cet exemple, 5.

Classe Score 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]

Indice de confiance

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

En fonction de votre application, vous pouvez décider d'un seuil en dessous duquel vous ignorerez 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 :

Classe Score 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 mal identifiés ou zones de l'image identifiées par erreur comme des objets alors qu'elles ne le sont pas) ou avec 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 ». Il s'agit d'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 les faux positifs.

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

Emplacement

Pour chaque objet détecté, le modèle renverra 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, 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.

Repères de performances

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 performances.

Personnalisation du modèle

Modèles pré-entraînés

Des modèles de détection optimisés pour les mobiles avec diverses 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 de téléchargement contiennent un fichier model.tflite . S'il n'y en a pas, un tampon plat TensorFlow Lite peut être généré à l'aide de ces instructions . Les modèles SSD du TF2 Object Detection Zoo 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 TensorFlow Lite Converter , 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 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 ses propres caractéristiques de précision (quantifiées par la valeur mAP) et de latence. Vous devez choisir un modèle qui fonctionne le mieux pour votre cas d'utilisation et le matériel prévu. Par exemple, les modèles Edge TPU sont idéaux pour l'inférence sur 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 proposons sont formés pour détecter 90 classes d'objets. Pour une liste complète des classes, consultez le fichier labels dans les métadonnées du modèle .

Vous pouvez utiliser une technique appelée apprentissage par transfert pour recycler un modèle afin qu'il reconnaisse les classes qui ne figurent pas dans l'ensemble d'origine. Par exemple, vous pouvez réentraîner le modèle pour détecter plusieurs types de légumes, même s'il n'y a 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 de formation d'un modèle TensorFlow Lite à l'aide d'un ensemble de données personnalisé, avec quelques lignes de codes. Il utilise l'apprentissage par transfert pour réduire la quantité de données et le temps de formation requis. Vous pouvez également apprendre de Colab Few-shot Detection comme exemple de réglage fin d'un modèle pré-entraîné avec quelques exemples.

Pour affiner les réglages 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