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.
Comenzar
Para comenzar a usar esta tarea, sigue una de estas guías de implementación para la plataforma en la que trabajas:
- 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 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:
|
La API de Object Detector genera los siguientes resultados para los objetos detectados:
|
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.
Modelo EfficientDet-Lite0 (recomendado)
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 |