Google I/O est terminé ! Suivez les sessions TensorFlow Afficher les sessions

Détection d'objet, détection d'objet

À partir d'une image ou d'un flux vidéo, un modèle de détection d'objets 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 d'un exemple Android

Commencer

Pour savoir comment utiliser la détection d'objets dans une application mobile, explorez les exemples d'applications et les 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'objets 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 (ex : labels.txt ) voir Lire les métadonnées des modèles

Si vous souhaitez former 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 la classification des images )
  • Prédire la composition d'une image, par exemple sujet versus arrière-plan (voir segmentation )

Exemples d'applications et guides

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.

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 illustre l'implémentation des deux méthodes en tant que 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étecteurs à un seul coup convertis en TensorFlow Lite à partir de l' API de détection d'objets TensorFlow .

Un modèle de détection d'objet 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, ainsi qu'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'une boîte englobante qui contient chaque objet et un score qui indique la confiance que la détection était correcte.

Signature d'entrée

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

Supposons que l'image attendue soit de 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 (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 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 La description
0 Emplacements Tableau multidimensionnel de [N][4] valeurs à virgule flottante comprises entre 0 et 1, les tableaux internes représentant les boîtes englobantes sous la forme [haut, gauche, bas, droite]
1 Des classes Tableau de N entiers (sortis sous forme de valeurs à virgule flottante) indiquant chacun 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 a été formé pour détecter des pommes, des bananes et des fraises. Lorsqu'une image lui est fournie, elle produira 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]

Note 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é véritablement 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 annulerez les résultats de détection. Pour l'exemple actuel, un seuil sensible 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 à tort comme des objets alors qu'ils ne le sont pas) ou les faux négatifs (objets authentiques qui sont raté 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 le faux positif.

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

Références de performances

Les chiffres 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) 22ms 46ms*
Pixel 4 (Android 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11ms**

* 4 fils utilisés.

** 2 fils 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 de téléchargement 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 de 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 sa propre précision (quantifiée par la valeur mAP) et ses propres caractéristiques 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 le Edge TPU de Google sur 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é-formés que nous fournissons 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 connue sous le nom d'apprentissage par transfert pour réentraîner un modèle afin qu'il reconnaisse les classes qui ne se trouvent 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 d'entraînement pour chacune des nouvelles étiquettes que vous souhaitez entraîner. 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 la détection de quelques coups Colab comme exemple de réglage fin d'un modèle pré-entraîné avec quelques exemples.

Pour un réglage précis 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

,

À partir d'une image ou d'un flux vidéo, un modèle de détection d'objets 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 d'un exemple Android

Commencer

Pour savoir comment utiliser la détection d'objets dans une application mobile, explorez les exemples d'applications et les 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'objets 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 (ex : labels.txt ) voir Lire les métadonnées des modèles

Si vous souhaitez former 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 la classification des images )
  • Prédire la composition d'une image, par exemple sujet versus arrière-plan (voir segmentation )

Exemples d'applications et guides

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.

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 illustre l'implémentation des deux méthodes en tant que 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étecteurs à un seul coup convertis en TensorFlow Lite à partir de l' API de détection d'objets TensorFlow .

Un modèle de détection d'objet 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, ainsi qu'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'une boîte englobante qui contient chaque objet et un score qui indique la confiance que la détection était correcte.

Signature d'entrée

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

Supposons que l'image attendue soit de 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 (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 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 La description
0 Emplacements Tableau multidimensionnel de [N][4] valeurs à virgule flottante comprises entre 0 et 1, les tableaux internes représentant les boîtes englobantes sous la forme [haut, gauche, bas, droite]
1 Des classes Tableau de N entiers (sortis sous forme de valeurs à virgule flottante) indiquant chacun 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 a été formé pour détecter des pommes, des bananes et des fraises. Lorsqu'une image lui est fournie, elle produira 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]

Note 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é véritablement 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 annulerez les résultats de détection. Pour l'exemple actuel, un seuil sensible 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 à tort comme des objets alors qu'ils ne le sont pas) ou les faux négatifs (objets authentiques qui sont raté 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 le faux positif.

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

Références de performances

Les chiffres 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) 22ms 46ms*
Pixel 4 (Android 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11ms**

* 4 fils utilisés.

** 2 fils 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 de téléchargement 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 de 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 sa propre précision (quantifiée par la valeur mAP) et ses propres caractéristiques 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 le Edge TPU de Google sur 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é-formés que nous fournissons 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 connue sous le nom d'apprentissage par transfert pour réentraîner un modèle afin qu'il reconnaisse les classes qui ne se trouvent 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 d'entraînement pour chacune des nouvelles étiquettes que vous souhaitez entraîner. 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 la détection de quelques coups Colab comme exemple de réglage fin d'un modèle pré-entraîné avec quelques exemples.

Pour un réglage précis 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