La tarea Clasificador de imágenes de MediaPipe te permite realizar la clasificación de imágenes. Puedes usar esta tarea para identificar qué representa una imagen entre un conjunto de categorías definidas durante el tiempo de entrenamiento. Esta tarea opera en datos de imágenes con un modelo de aprendizaje automático (AA) como datos estáticos o una transmisión continua, y genera una lista de categorías potenciales clasificadas por puntuación de probabilidad descendente.
Comenzar
Para comenzar a usar esta tarea, sigue una de estas guías de implementación para tu plataforma de destino. En estas guías específicas de la plataforma, se explica una implementación básica de esta tarea con un modelo recomendado y se proporcionan ejemplos de código con las opciones de configuración recomendadas:
- 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
Detalles de la tarea
En esta sección, se describen las capacidades, las entradas, las salidas y las opciones de configuración 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.
- Región de interés: Realiza la clasificación en una región de la imagen en lugar de en toda la imagen.
- 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.
- Clasificación Top-K: Limita la cantidad de resultados de clasificación.
- Lista de entidades permitidas y prohibidas de etiquetas: Especifica las categorías clasificadas.
Entradas de tareas | Resultados de las tareas |
---|---|
La entrada puede ser uno de los siguientes tipos de datos:
|
Image Classifier genera una lista de categorías que contiene lo siguiente:
|
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_locale |
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 clasificación con la puntuación más alta que se mostrarán. Si es menor que 0, se mostrarán todos los resultados disponibles. | Cualquier número positivo | -1 |
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 clasificació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 clasificació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 |
result_callback |
Establece el objeto de escucha de resultados para que reciba los resultados de la clasificación de forma asíncrona cuando el clasificador de imágenes esté en el modo de transmisión en vivo. Solo se puede usar cuando el modo de ejecución está configurado como LIVE_STREAM . |
N/A | Sin establecer |
Modelos
El clasificador de imágenes requiere que se descargue un modelo de clasificación de imágenes y se almacene en el directorio de tu proyecto. Comienza con el modelo predeterminado y recomendado para tu plataforma de destino cuando comiences a desarrollar con esta tarea. Los otros modelos disponibles suelen establecer compensaciones entre el rendimiento, la precisión, la resolución y los requisitos de recursos, y, en algunos casos, incluyen funciones adicionales.
Modelo EfficientNet-Lite0 (recomendado)
El modelo EfficientNet-Lite0 usa una arquitectura de EfficientNet y se entrenó con ImageNet para reconocer 1,000 clases, como árboles, animales, alimentos, vehículos, personas, etcétera. Consulta la lista completa de etiquetas admitidas. EfficientNet-Lite0 está disponible como modelo int8 y de punto flotante 32. 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 |
---|---|---|---|
EfficientNet-Lite0 (int8) | 224 x 224 | int8 | Más reciente |
EfficientNet-Lite0 (número de punto flotante de 32 bits) | 224 x 224 | Ninguno (float32) | Más reciente |
Modelo EfficientNet-Lite2
El modelo EfficientNet-Lite2 usa una arquitectura de EfficientNet y se entrenó con ImageNet para reconocer 1,000 clases, como árboles, animales, alimentos, vehículos, personas, etcétera. Consulta la lista completa de etiquetas admitidas. EfficientNet-Lite2 está disponible como modelo int8 y de punto flotante 32. Por lo general, este modelo es más preciso que EfficientNet-Lite0, pero también es más lento y requiere más memoria. Este modelo es adecuado para casos de uso en los que la precisión es una prioridad más alta que la velocidad o el tamaño.
Nombre del modelo | Forma de entrada | Tipo de cuantización | Versiones |
---|---|---|---|
EfficientNet-Lite2 (int8) | 224 x 224 | int8 | Más reciente |
EfficientNet-Lite2 (número de punto flotante 32) | 224 x 224 | Ninguno (float32) | Más reciente |
Comparativas de tareas
Estas son las comparativas de tareas de toda la canalización según 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 |
---|---|---|
EfficientNet-Lite0 (número de punto flotante 32) | 23.52 ms | 18.90 ms |
EfficientNet-Lite0 (int8) | 10.08 ms | - |
EfficientNet-Lite2 (número de punto flotante de 32 bits) | 44.17 ms | 22.20 ms |
EfficientNet-Lite2 (int8) | 19.43 ms | - |
Modelos personalizados
Puedes usar un modelo de AA personalizado con esta tarea si deseas mejorar o alterar las capacidades de los modelos proporcionados. Puedes usar Model Maker para modificar los modelos existentes o compilar uno con herramientas como TensorFlow. Los modelos personalizados que se usan con MediaPipe deben estar en formato TensorFlow Lite y deben incluir metadata específicos que describan los parámetros de funcionamiento del modelo. Considera usar Model Maker para modificar los modelos proporcionados para esta tarea antes de crear el tuyo.
Si te interesa crear un clasificador de imágenes personalizado con tu propio conjunto de datos, comienza con el instructivo sobre la personalización del clasificador de imágenes.