Cette page a été traduite par l'API Cloud Translation.
Switch to English

Détection d'objets

Détectez plusieurs objets dans une image, avec des cadres de délimitation. Reconnaissez 90 classes d'objets différentes.

Commencer

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.

Exemple Android Exemple iOS

Si vous utilisez une plate-forme autre qu'Android ou iOS, ou si vous êtes déjà familiarisé avec 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 Medatada

Pour plus d'informations sur le modèle de démarrage, voir Modèle de démarrage .

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

Qu'est-ce que la 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 notre exemple d'application montre comment deux objets ont été reconnus et leurs positions annotées:

Capture d'écran de l'exemple Android

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

Lorsque nous fournissons ensuite une image au modèle, celui-ci affichera une liste des objets qu'il détecte, l'emplacement d'une boîte englobante contenant chaque objet et un score qui indique la confiance que la détection était correcte.

Sortie du modèle

Imaginez qu'un modèle ait été formé pour détecter les pommes, les bananes et les fraises. Lorsque nous lui transmettons une image, il produira un nombre défini de résultats de détection - dans cet exemple, 5.

Classe 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 notre exemple, nous pourrions décider qu'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, nous ignorerions les deux derniers objets du tableau, car ces scores de confiance sont inférieurs à 0,5:

Classe 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 que nous proposons, 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 sont générés avec l'outil décrit ici .

Nom du modèle Taille du modèle Dispositif 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.

Modèle de démarrage

Nous vous recommandons de commencer avec ce modèle COCO SSD MobileNet v1 quantifié pré-entraîné.

Télécharger le modèle de départ et les étiquettes

Utilisations et limites

Le modèle de détection d'objets que nous fournissons peut identifier et localiser jusqu'à 10 objets dans une image. Il est formé pour reconnaître 90 classes d'objets. Pour une liste complète des classes, consultez le fichier d'étiquettes incorporé dans le modèle avec visualisation des métadonnées .

Si vous souhaitez entraîner un modèle à reconnaître de nouvelles classes, consultez Personnaliser le 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 )

Contribution

Le modèle prend une image en entrée. L'image attendue est de 300x300 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 (300x300x3). Puisque le modèle est quantifié , chaque valeur doit être un seul octet représentant une valeur comprise entre 0 et 255.

Production

Le modèle produit quatre tableaux, mappés aux indices 0-4. Les tableaux 0, 1 et 2 décrivent 10 objets détectés, avec un élément dans chaque tableau correspondant à chaque objet. Il y aura toujours 10 objets détectés.

Indice Nom La description
0 Emplacements Tableau multidimensionnel de [10] [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 10 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 10 valeurs à virgule flottante entre 0 et 1 représentant la probabilité qu'une classe a été détectée
3 Nombre et détections Tableau de longueur 1 contenant une valeur à virgule flottante exprimant le nombre total de résultats de détection

Personnaliser le modèle

Les modèles pré-entraînés que nous proposons 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 appelée 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.

Apprenez à effectuer un apprentissage par transfert dans la formation et à servir un détecteur d'objet mobile en temps réel en 30 minutes .