La tarea Detector de objetos de MediaPipe te permite detectar la presencia y la ubicación de varias clases de objetos en imágenes o videos. Por ejemplo, un detector de objetos puede ubicar perros en una imagen. Esta tarea opera en datos de imagen con un modelo de aprendizaje automático (AA), que acepta datos estáticos o una transmisión de video continua como entrada y genera una lista de resultados de detección. Cada resultado de detección representa un objeto que aparece dentro de la imagen o el video.
Comenzar
Comienza a utilizar esta tarea con una de estas guías de implementación para la plataforma en la que estás trabajando:
- Android - Ejemplo de código - Guía
- Python - Ejemplo de código - Guía
- Web - Ejemplo de código - Guía
- iOS - Ejemplo de código - Guía
En estas guías específicas de la plataforma, se explica la implementación básica de esta tarea, incluidos un modelo recomendado y un ejemplo de código con opciones de configuración recomendadas.
Detalles de la tarea
En esta sección, se describen las capacidades, entradas y salidas de esta tarea.
Funciones
- Procesamiento de imágenes de entrada: El procesamiento incluye la rotación de imágenes, el cambio de tamaño, la normalización y la conversión del espacio de color.
- Configuración regional del mapa de etiquetas: Establece el idioma que se usa para los nombres visibles.
- Umbral de puntuación: Filtra los resultados en función de las puntuaciones de predicción.
- Detección de k superior: filtra los resultados de la detección de números.
- Lista de entidades permitidas y listas de bloqueo: Especifica las categorías detectadas.
Entradas de tareas | Resultados de la tarea |
---|---|
La API de Object Detector acepta una entrada de uno de los siguientes tipos de datos:
|
La API de Object Detector genera los siguientes resultados para los objetos detectados:
|
Opciones de configuración
Esta tarea incluye las siguientes opciones de configuración:
Nombre de la opción | Descripción | Rango de valores | Valor predeterminado |
---|---|---|---|
running_mode |
Establece el modo de ejecución para la tarea. Existen tres modos: IMAGE: El modo para entradas de una sola imagen. VIDEO: Es el modo para los fotogramas decodificados de un video. LIVE_STREAM: Es el modo para una transmisión en vivo de datos de entrada, como los que provienen de una cámara. En este modo, se debe llamar a resultListener para configurar un objeto de escucha a fin de recibir resultados de forma asíncrona. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
Configura el idioma de las etiquetas que se usarán para los nombres visibles proporcionados en los metadatos del modelo de la tarea, si están disponibles. El valor predeterminado es en para inglés. Puedes agregar etiquetas localizadas a los metadatos de un modelo personalizado
con la API de Metadata Writer de TensorFlow Lite
|
Código de configuración regional | en |
max_results |
Configura la cantidad máxima opcional de resultados de detección con puntuaciones más altas que se mostrarán. | Cualquier número positivo | -1 (se muestran todos los resultados) |
score_threshold |
Establece el umbral de puntuación de predicción que anula el proporcionado en los metadatos del modelo (si corresponde). Se rechazarán los resultados inferiores a este valor. | Cualquier número de punto flotante | No establecida |
category_allowlist |
Establece la lista opcional de nombres de categorías permitidas. Si no está vacío, se filtrarán los resultados de detección cuyo nombre de categoría no esté en este conjunto. Los nombres de categorías duplicados o desconocidos se ignoran.
Esta opción es mutuamente excluyente con category_denylist , y el uso de ambos da como resultado un error. |
Cualquier cadena | No establecida |
category_denylist |
Establece la lista opcional de nombres de categorías que no están permitidas. Si no está vacío, se filtrarán los resultados de detección cuyo nombre de categoría se encuentre en este conjunto. Los nombres de categorías duplicados o desconocidos se ignoran. Esta opción es mutuamente
exclusiva con category_allowlist , y el uso de ambas da como resultado un error. |
Cualquier cadena | No establecida |
ajustables
La API de Object Detector requiere que un modelo de detección de objetos se descargue y almacene en el directorio del proyecto. Si aún no tienes un modelo, comienza con el predeterminado recomendado. Los otros modelos presentados en esta sección tienen compensaciones entre la latencia y la exactitud.
Modelo EfficientDet-Lite0 (recomendado)
El modelo EfficientDet-Lite0 usa una red troncal EfficientNet-Lite0 con un tamaño de entrada de 320 x 320 y una red de atributos BiFPN. El modelo se entrenó con el conjunto de datos de COCO, un conjunto de datos de detección de objetos a gran escala que contiene 1.5 millones de instancias de objetos y 80 etiquetas de objetos. Consulta la lista completa de etiquetas compatibles. EfficientDet-Lite0 está disponible como int8, float16 o float32. Se recomienda este modelo porque logra un equilibrio entre latencia y exactitud. Es lo suficientemente preciso y ligero para muchos casos de uso.
Nombre del modelo | Forma de entrada | Tipo de cuantización | Versiones |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 × 320 | int8 | Más reciente |
EfficientDet-Lite0 (float 16) | 320 × 320 | número de punto flotante 16 | Más reciente |
EfficientDet-Lite0 (float 32) | 320 × 320 | Ninguna (float32) | Más reciente |
Modelo EfficientDet-Lite2
El modelo EfficientDet-Lite2 usa una red troncal EfficientNet-Lite2 con un tamaño de entrada de 448 × 448 y una red de atributos BiFPN. El modelo se entrenó con el conjunto de datos de COCO, un conjunto de datos de detección de objetos a gran escala que contiene 1.5 millones de instancias de objetos y 80 etiquetas de objetos. Consulta la lista completa de etiquetas compatibles. EfficientDet-Lite2 está disponible como modelos int8, float16 o float32. Por lo general, este modelo es más preciso que EfficientDet-Lite0, pero también es más lento y requiere más memoria. Este modelo es apropiado para casos de uso en los que la precisión es una prioridad mayor para la velocidad y el tamaño.
Nombre del modelo | Forma de entrada | Tipo de cuantización | Versiones |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 × 448 | int8 | Más reciente |
EfficientDet-Lite2 (float 16) | 448 × 448 | número de punto flotante 16 | Más reciente |
EfficientDet-Lite2 (float 32) | 448 × 448 | Ninguna (float32) | Más reciente |
Modelo de SSD MobileNetV2
El modelo SSD MobileNetV2 usa una red troncal MobileNetV2 con un tamaño de entrada de 256 × 256 y una red de funciones SSD. El modelo se entrenó con el conjunto de datos de COCO, un conjunto de datos de detección de objetos a gran escala que contiene 1.5 millones de instancias de objetos y 80 etiquetas de objetos. Consulta la lista completa de etiquetas compatibles. SSD MobileNetV2 está disponible como modelos int8 y float 32. Este modelo es más rápido y liviano que EfficientDet-Lite0, pero también suele ser menos preciso. Este modelo es apropiado para casos de uso que requieren un modelo rápido y liviano que sacrifica cierta exactitud.
Nombre del modelo | Forma de entrada | Tipo de cuantización | Versiones |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | Más reciente |
SSDMobileNet-V2 (float 32) | 256 x 256 | Ninguna (float32) | Más reciente |
Requisitos y metadatos del modelo
En esta sección, se describen los requisitos de los modelos personalizados si decides compilar un modelo para usarlo con esta tarea. Los modelos personalizados deben estar en formato de TensorFlow Lite y deben incluir metadatos que describan los parámetros operativos del modelo.
Requisitos de diseño
Entrada | Forma | Descripción |
---|---|---|
Imagen de entrada | Tensor de float32 de forma[1, altura, ancho, 3] | Es la imagen de entrada normalizada. |
Salida | Forma | Descripción |
---|---|---|
detection_boxes |
Tensor float32 de forma [1, num_boxes, 4] | Ubicación del cuadro de cada objeto detectado. |
detection_classes |
Tensor float32 de forma [1, num_boxes] | Índices de los nombres de clase para cada objeto detectado |
detection_scores |
tensor float32 de forma [1, num_boxes] | Puntuaciones de predicción para cada objeto detectado. |
num_boxes |
Tensor float32 de tamaño 1 | La cantidad de cuadros detectados. |
Requisitos de los metadatos
Parámetro | Descripción | Descripción |
---|---|---|
input_norm_mean |
El valor medio usado en la normalización del tensor de entrada. | Es la imagen de entrada normalizada. |
input_norm_std |
La norma de campo usada en la normalización del tensor de entrada. | Ubicación del cuadro de cada objeto detectado. |
label_file_paths |
Las rutas de acceso a los archivos de etiquetas del tensor de categorías. Si el modelo no tiene ningún archivo de etiquetas, pasa una lista vacía. | Índices de los nombres de clase para cada objeto detectado |
score_calibration_md |
Información sobre la operación de calibración de puntuación en el tensor de clasificación. Este parámetro no es obligatorio si el modelo no usa la calibración de puntuación. |
Puntuaciones de predicción para cada objeto detectado. |
num_boxes |
Tensor float32 de tamaño 1 | La cantidad de cuadros detectados. |
Comparativas de tareas
Estas son las comparativas de tareas para los modelos previamente entrenados anteriores. La latencia resultante es la latencia promedio en el Pixel 6 usando CPU / GPU.
Nombre del modelo | Latencia de la CPU | Latencia de GPU |
---|---|---|
Modelo float32 de EfficientDet-Lite0 | 61.30ms | 27.83ms |
Modelo float16 de EfficientDet-Lite0 | 53.97ms | 27.97ms |
Modelo int8 de EfficientDet-Lite0 | 29.31ms | - |
Modelo float32 de EfficientDet-Lite2 | 197.98ms | 41.15ms |
Modelo float16 de EfficientDet-Lite2 | 198.77ms | 47.31ms |
Modelo EfficientDet-Lite2 int8 | 70.91ms | - |
Modelo float32 de SSD MobileNetV2 | 36.30ms | 24.01ms |
Modelo float16 de SSD MobileNetV2 | 37.35ms | 28.16ms |