Guía de tareas de detección de objetos

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.

Probar

Comenzar

Comienza a utilizar esta tarea con una de estas guías de implementación para la plataforma en la que estás trabajando:

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:
  • Imágenes fijas
  • Fotogramas de video decodificados
  • Feed de video en vivo
La API de Object Detector genera los siguientes resultados para los objetos detectados:
  • Categoría del objeto
  • Puntuación de probabilidad
  • Coordenadas del cuadro de límite

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.

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