La tâche de détection d'objets MediaPipe vous permet de détecter la présence et l'emplacement de plusieurs classes d'objets dans des images ou des vidéos. Par exemple, un détecteur d'objets peut localiser des chiens dans une image. Cette tâche fonctionne sur des données d'image avec un modèle de machine learning (ML), accepte des données statiques ou un flux vidéo continu en entrée et génère une liste de résultats de détection. Chaque résultat de détection représente un objet qui apparaît dans l'image ou la vidéo.
Premiers pas
Pour commencer à utiliser cette tâche, suivez l'un de ces guides d'implémentation pour la plate-forme sur laquelle vous travaillez:
- Android – Exemple de code – Guide
- Python – Exemple de code – Guide
- Web – Exemple de code – Guide
- iOS – Exemple de code – Guide
Ces guides spécifiques à la plate-forme vous expliquent comment implémenter de manière basique cette tâche, y compris un modèle recommandé et un exemple de code avec les options de configuration recommandées.
Détails de la tâche
Cette section décrit les fonctionnalités, les entrées et les sorties de cette tâche.
Fonctionnalités
- Traitement des images d'entrée : le traitement comprend la rotation, le redimensionnement, la normalisation et la conversion d'espaces colorimétriques.
- Label map locale (Libellé de la carte en paramètres régionaux) : définissez la langue utilisée pour les noms à afficher.
- Seuil de score : filtrez les résultats en fonction des scores de prédiction.
- Détection des k meilleurs : filtrez les résultats de détection des nombres.
- Liste d'autorisation et de refus des libellés : spécifiez les catégories détectées.
Entrées de tâche | Sorties de tâche |
---|---|
L'API Object Detector accepte l'un des types de données suivants en entrée :
|
L'API Object Detector renvoie les résultats suivants pour les objets détectés :
|
Options de configuration
Cette tâche propose les options de configuration suivantes:
Nom de l'option | Description | Plage de valeurs | Valeur par défaut |
---|---|---|---|
running_mode |
Définit le mode d'exécution de la tâche. Il existe trois modes: IMAGE: mode pour les entrées d'une seule image. VIDEO: mode des images décodées d'une vidéo. LIVE_STREAM: mode de diffusion en direct des données d'entrée, par exemple à partir d'une caméra. Dans ce mode, resultListener doit être appelé pour configurer un écouteur afin de recevoir les résultats de manière asynchrone. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
Définit la langue des libellés à utiliser pour les noms à afficher fournis dans les métadonnées du modèle de la tâche, le cas échéant. La valeur par défaut est en pour l'anglais. Vous pouvez ajouter des libellés localisés aux métadonnées d'un modèle personnalisé à l'aide de l'API TensorFlow Lite Metadata Writer.
|
Code de paramètres régionaux | en |
max_results |
Définit le nombre maximal facultatif de résultats de détection les plus élevés à renvoyer. | N'importe quel nombre positif | -1 (tous les résultats sont renvoyés) |
score_threshold |
Définit le seuil de score de prédiction qui remplace celui fourni dans les métadonnées du modèle (le cas échéant). Les résultats inférieurs à cette valeur sont rejetés. | N'importe quelle superposition | Non défini |
category_allowlist |
Définit la liste facultative des noms de catégories autorisés. Si cet ensemble n'est pas vide, les résultats de détection dont le nom de catégorie ne figure pas dans cet ensemble seront filtrés. Les noms de catégories en double ou inconnus sont ignorés.
Cette option s'exclut mutuellement avec category_denylist . L'utilisation des deux entraîne une erreur. |
N'importe quelle chaîne | Non défini |
category_denylist |
Définit la liste facultative des noms de catégories non autorisés. Si cet ensemble n'est pas vide, les résultats de détection dont le nom de catégorie figure dans cet ensemble seront filtrés. Les noms de catégories en double ou inconnus sont ignorés. Cette option s'exclut mutuellement avec category_allowlist . L'utilisation des deux entraîne une erreur. |
N'importe quelle chaîne | Non défini |
Modèles
L'API Object Detector nécessite que vous téléchargiez et stockiez un modèle de détection d'objets dans le répertoire de votre projet. Si vous ne disposez pas encore d'un modèle, commencez par le modèle par défaut recommandé. Les autres modèles présentés dans cette section font des compromis entre la latence et la précision.
Modèle EfficientDet-Lite0 (recommandé)
Le modèle EfficientDet-Lite0 utilise un backbone EfficientNet-Lite0 avec une taille d'entrée de 320x320 et un réseau de caractéristiques BiFPN. Le modèle a été entraîné avec l'ensemble de données COCO, un ensemble de données de détection d'objets à grande échelle contenant 1,5 million d'instances d'objets et 80 étiquettes d'objets. Consultez la liste complète des libellés compatibles. EfficientDet-Lite0 est disponible en tant qu'int8, float16 ou float32. Ce modèle est recommandé, car il établit un équilibre entre la latence et la précision. Il est à la fois précis et suffisamment léger pour de nombreux cas d'utilisation.
Nom du modèle | Forme d'entrée | Type de quantification | Versions |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 x 320 | int8 | Nouveautés |
EfficientDet-Lite0 (float 16) | 320 x 320 | float 16 | Nouveautés |
EfficientDet-Lite0 (float 32) | 320 x 320 | Aucun (float32) | Nouveautés |
Modèle EfficientDet-Lite2
Le modèle EfficientDet-Lite2 utilise un backbone EfficientNet-Lite2 avec une taille d'entrée de 448 x 448 et un réseau de caractéristiques BiFPN. Le modèle a été entraîné avec l'ensemble de données COCO, un ensemble de données de détection d'objets à grande échelle contenant 1,5 million d'instances d'objets et 80 étiquettes d'objets. Consultez la liste complète des libellés compatibles. EfficientDet-Lite2 est disponible en tant que modèle int8, float16 ou float32. Ce modèle est généralement plus précis qu'EfficientDet-Lite0, mais il est également plus lent et plus gourmand en mémoire. Ce modèle est adapté aux cas d'utilisation où la précision est plus prioritaire que la vitesse et la taille.
Nom du modèle | Forme d'entrée | Type de quantification | Versions |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 x 448 | int8 | Nouveautés |
EfficientDet-Lite2 (float 16) | 448 x 448 | float 16 | Nouveautés |
EfficientDet-Lite2 (float 32) | 448 x 448 | Aucun (float32) | Nouveautés |
Modèle SSD MobileNetV2
Le modèle SSD MobileNetV2 utilise une colonne vertébrale MobileNetV2 avec une taille d'entrée de 256 x 256 et un réseau de caractéristiques SSD. Le modèle a été entraîné avec l'ensemble de données COCO, un ensemble de données de détection d'objets à grande échelle contenant 1,5 million d'instances d'objets et 80 étiquettes d'objets. Consultez la liste complète des libellés compatibles. SSD MobileNetV2 est disponible en tant que modèle int8 et float32. Ce modèle est plus rapide et plus léger qu'EfficientDet-Lite0, mais il est également généralement moins précis. Ce modèle est adapté aux cas d'utilisation qui nécessitent un modèle rapide et léger qui sacrifie une certaine précision.
Nom du modèle | Forme d'entrée | Type de quantification | Versions |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | Nouveautés |
SSDMobileNet-V2 (32 décimales) | 256 x 256 | Aucun (float32) | Nouveautés |
Exigences concernant les modèles et métadonnées
Cette section décrit les exigences concernant les modèles personnalisés si vous décidez d'en créer un à utiliser avec cette tâche. Les modèles personnalisés doivent être au format TensorFlow Lite et doivent inclure des metadata décrivant les paramètres de fonctionnement du modèle.
Exigences de conception
Entrée | Forme | Description |
---|---|---|
Image d'entrée | Tensor Float32 de forme [1, hauteur, largeur, 3] | Image d'entrée normalisée. |
Sortie | Forme | Description |
---|---|---|
detection_boxes |
Tensor float32 de forme [1, num_boxes, 4] | Emplacement du cadre de chaque objet détecté. |
detection_classes |
Tensor float32 de forme [1, num_boxes] | Indices des noms de classe pour chaque objet détecté. |
detection_scores |
Tensor float32 de forme [1, num_boxes] | Scores de prédiction pour chaque objet détecté. |
num_boxes |
Tensor float32 de taille 1 | Nombre de cases détectées. |
Exigences concernant les métadonnées
Paramètre | Description | Description |
---|---|---|
input_norm_mean |
Valeur moyenne utilisée dans la normalisation du tenseur d'entrée. | Image d'entrée normalisée. |
input_norm_std |
Norme de champ utilisée dans la normalisation du tenseur d'entrée. | Emplacement du cadre de chaque objet détecté. |
label_file_paths |
Chemins d'accès aux fichiers de libellés de tenseur de catégorie. Si le modèle ne comporte aucun fichier d'étiquette, transmettez une liste vide. | Indices des noms de classe pour chaque objet détecté. |
score_calibration_md |
Informations sur l'opération de calibration du score dans le tenseur de classification. Ce paramètre n'est pas obligatoire si le modèle n'utilise pas la calibration de la note. |
Scores de prédiction pour chaque objet détecté. |
num_boxes |
Tensor float32 de taille 1 | Nombre de cases détectées. |
Benchmarks des tâches
Voici les benchmarks de tâche pour les modèles pré-entraînés ci-dessus. Le résultat de la latence correspond à la latence moyenne sur le Pixel 6 à l'aide du processeur / GPU.
Nom du modèle | Latence du processeur | Latence du GPU |
---|---|---|
Modèle float32 EfficientDet-Lite0 | 61,30 ms | 27,83 ms |
Modèle float16 EfficientDet-Lite0 | 53,97 ms | 27,97 ms |
Modèle int8 EfficientDet-Lite0 | 29,31 ms | - |
Modèle float32 EfficientDet-Lite2 | 197,98 ms | 41,15 ms |
Modèle float16 EfficientDet-Lite2 | 198,77 ms | 47,31 ms |
Modèle int8 EfficientDet-Lite2 | 70,91 ms | - |
Modèle SSD MobileNetV2 float32 | 36,30 ms | 24,01 ms |
Modèle SSD MobileNetV2 float16 | 37,35 ms | 28,16 ms |