Guía de tareas de detección de objetos

Un gato y un perro que se destacan con cuadros delimitadores etiquetados correctamente

La tarea del 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), 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 la detección representa un objeto que aparece en la imagen o el video.

Pruébala.

Comenzar

Para comenzar a usar esta tarea, sigue una de estas guías de implementación para la plataforma en la que trabajas:

En estas guías específicas de la plataforma, se explica una implementación básica de esta tarea, incluido 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 de espacios de color.
  • Label map locale: Establece el idioma que se usa para los nombres visibles.
  • Umbral de puntuación: Filtra los resultados según las puntuaciones de predicción.
  • Detección Top-K: Filtra los resultados de la detección de números.
  • Lista de entidades permitidas y prohibidas de etiquetas: Especifica las categorías detectadas.
Entradas de tareas Resultados de las tareas
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 tiene 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 de la tarea. Existen tres modos:

IMAGE: Es el modo para entradas de una sola imagen.

VIDEO: Es el modo para los fotogramas decodificados de un video.

LIVE_STREAM: Es el modo de transmisión en vivo de datos de entrada, como los de una cámara. En este modo, se debe llamar a resultListener para configurar un objeto de escucha que reciba resultados de forma asíncrona.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names Establece 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 el 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 Establece la cantidad máxima opcional de resultados de detección con la puntuación más alta 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 que se proporciona en los metadatos del modelo (si corresponde). Se rechazan los resultados por debajo de este valor. Cualquier número de punto flotante Sin establecer
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. Se ignoran los nombres de categorías duplicados o desconocidos. Esta opción es mutuamente excluyente con category_denylist y, si se usan ambas, se genera un error. Cualquier cadena Sin establecer
category_denylist Establece la lista opcional de nombres de categorías que no están permitidos. Si no está vacío, se filtrarán los resultados de detección cuyo nombre de categoría esté en este conjunto. Se ignoran los nombres de categorías duplicados o desconocidos. Esta opción es mutuamente excluyente con category_allowlist y usar ambas genera un error. Cualquier cadena Sin establecer

Modelos

La API de Object Detector requiere que se descargue un modelo de detección de objetos y se almacene en el directorio de tu proyecto. Si aún no tienes un modelo, comienza con el modelo predeterminado y recomendado. Los otros modelos que se presentan en esta sección hacen una compensación entre latencia y precisión.

El modelo de EfficientDet-Lite0 usa una red principal de EfficientNet-Lite0 con un tamaño de entrada de 320 × 320 y una red de características de 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 admitidas. EfficientDet-Lite0 está disponible como int8, float16 o float32. Se recomienda este modelo porque logra un equilibrio entre la latencia y la precisión. Es precisa y lo suficientemente ligera 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 (número de punto flotante 16) 320 × 320 Número de punto flotante 16 Más reciente
EfficientDet-Lite0 (número de punto flotante de 32 bits) 320 × 320 Ninguno (float32) Más reciente

Modelo EfficientDet-Lite2

El modelo EfficientDet-Lite2 usa una red principal de EfficientNet-Lite2 con un tamaño de entrada de 448 × 448 y una red de características de 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 admitidas. EfficientDet-Lite2 está disponible como modelo int8, float16 o float32. Por lo general, este modelo es más preciso que EfficientDet-Lite0, pero también es más lento y consume más memoria. Este modelo es adecuado para casos de uso en los que la precisión es una prioridad mayor que la velocidad y el tamaño.

Nombre del modelo Forma de entrada Tipo de cuantización Versiones
EfficientDet-Lite2 (int8) 448 x 448 int8 Más reciente
EfficientDet-Lite2 (número de punto flotante de 16 bits) 448 x 448 Número de punto flotante 16 Más reciente
EfficientDet-Lite2 (número de punto flotante de 32 bits) 448 x 448 Ninguno (float32) Más reciente

Modelo SSD MobileNetV2

El modelo de SSD MobileNetV2 usa una red principal de MobileNetV2 con un tamaño de entrada de 256 × 256 y una red de características de 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 admitidas. SSD MobileNetV2 está disponible como modelo int8 y de punto flotante 32. Este modelo es más rápido y ligero que EfficientDet-Lite0, pero, por lo general, es menos preciso. Este modelo es adecuado para casos de uso que requieren un modelo rápido y ligero que sacrifique cierta precisión.

Nombre del modelo Forma de entrada Tipo de cuantización Versiones
SSDMobileNet-V2 (int8) 256 x 256 int8 Más reciente
SSDMobileNet-V2 (número de punto flotante 32) 256 x 256 Ninguno (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 TensorFlow Lite y deben incluir metadata que describan los parámetros de funcionamiento del modelo.

Requisitos de diseño

Entrada Forma Descripción
Imagen de entrada Tensor float32 de forma [1, height, width, 3] La imagen de entrada normalizada.
Salida Forma Descripción
detection_boxes Un tensor de float32 con la forma [1, num_boxes, 4] Ubicación del cuadro de cada objeto detectado.
detection_classes Tensor de float32 con la forma [1, num_boxes] Índices de los nombres de clase de cada objeto detectado.
detection_scores Un tensor float32 de forma [1, num_boxes] Puntuaciones de predicción para cada objeto detectado.
num_boxes Tensor de float32 de tamaño 1 Es la cantidad de cuadros detectados.

Requisitos de metadatos

Parámetro Descripción Descripción
input_norm_mean Es el valor medio que se usa en la normalización del tensor de entrada. La imagen de entrada normalizada.
input_norm_std La norma de campo que se usa 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 de tensor de categoría Si el modelo no tiene ningún archivo de etiqueta, pasa una lista vacía. Índices de los nombres de clase de cada objeto detectado.
score_calibration_md Información sobre la operación de calibración de la 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 de float32 de tamaño 1 Es la cantidad de cuadros detectados.

Comparativas de tareas

Estas son las comparativas de tareas de los modelos previamente entrenados anteriores. El resultado de la latencia es la latencia promedio en el Pixel 6 con CPU o GPU.

Nombre del modelo Latencia de la CPU Latencia de la GPU
Modelo de EfficientDet-Lite0 con float32 61.30 ms 27.83 ms
Modelo de EfficientDet-Lite0 con formato float16 53.97 ms 27.97 ms
Modelo de int8 de EfficientDet-Lite0 29.31 ms -
Modelo de EfficientDet-Lite2 con número de punto flotante de 32 bits 197.98 ms 41.15 ms
Modelo de float16 de EfficientDet-Lite2 198.77 ms 47.31 ms
Modelo int8 de EfficientDet-Lite2 70.91 ms -
Modelo SSD MobileNetV2 de float32 36.30 ms 24.01 ms
Modelo SSD MobileNetV2 de float16 37.35 ms 28.16 ms