¡Google I/O es una envoltura! Póngase al día con las sesiones de TensorFlow Ver sesiones

Detección de objetos,Detección de objetos

Dada una imagen o un flujo de video, un modelo de detección de objetos puede identificar cuál de un conjunto conocido de objetos podría estar presente y proporcionar información sobre sus posiciones dentro de la imagen.

Por ejemplo, esta captura de pantalla de la aplicación de ejemplo muestra cómo se han reconocido dos objetos y se han anotado sus posiciones:

Captura de pantalla del ejemplo de Android

Empezar

Para aprender a usar la detección de objetos en una aplicación móvil, explore las aplicaciones y guías de ejemplo .

Si usa una plataforma que no sea Android o iOS, o si ya está familiarizado con las API de TensorFlow Lite , puede descargar nuestro modelo de detección de objetos de inicio y las etiquetas que lo acompañan.

Descargar modelo de inicio con metadatos

Para obtener más información sobre los metadatos y los campos asociados (p. ej., labels.txt ), consulte Leer los metadatos de los modelos .

Si desea entrenar un modelo de detección personalizado para su propia tarea, consulte Personalización del modelo .

Para los siguientes casos de uso, debe usar un tipo diferente de modelo:

  • Predecir qué etiqueta individual representa con mayor probabilidad la imagen (ver clasificación de imágenes)
  • Predecir la composición de una imagen, por ejemplo, sujeto versus fondo (ver segmentación )

Ejemplos de aplicaciones y guías

Si es nuevo en TensorFlow Lite y está trabajando con Android o iOS, le recomendamos explorar las siguientes aplicaciones de ejemplo que pueden ayudarlo a comenzar.

Androide

Puede aprovechar la API lista para usar de la biblioteca de tareas de TensorFlow Lite para integrar modelos de detección de objetos en solo unas pocas líneas de código. También puede crear su propia canalización de inferencia personalizada con la API de Java del intérprete de TensorFlow Lite .

El siguiente ejemplo de Android demuestra la implementación de ambos métodos como lib_task_api y lib_interpreter , respectivamente.

Ver ejemplo de Android

iOS

Puede integrar el modelo mediante la API Swift de intérprete de TensorFlow Lite . Vea el ejemplo de iOS a continuación.

Ver ejemplo de iOS

Descripcion del modelo

En esta sección, se describe la firma de los modelos de detectores de disparo único convertidos a TensorFlow Lite desde la API de detección de objetos de TensorFlow .

Se entrena un modelo de detección de objetos para detectar la presencia y ubicación de múltiples clases de objetos. Por ejemplo, un modelo puede entrenarse con imágenes que contienen varias piezas de fruta, junto con una etiqueta que especifica la clase de fruta que representan (por ejemplo, una manzana, un plátano o una fresa) y datos que especifican dónde aparece cada objeto en la imagen.

Cuando se proporciona una imagen posteriormente al modelo, generará una lista de los objetos que detecta, la ubicación de un cuadro delimitador que contiene cada objeto y una puntuación que indica la confianza en que la detección fue correcta.

Firma de entrada

El modelo toma una imagen como entrada.

Supongamos que la imagen esperada es de 300x300 píxeles, con tres canales (rojo, azul y verde) por píxel. Esto debe alimentarse al modelo como un búfer aplanado de valores de 270 000 bytes (300x300x3). Si el modelo está cuantificado , cada valor debe ser un solo byte que represente un valor entre 0 y 255.

Puede echar un vistazo a nuestro código de aplicación de ejemplo para comprender cómo hacer este preprocesamiento en Android.

Firma de salida

El modelo genera cuatro matrices, asignadas a los índices 0-4. Las matrices 0, 1 y 2 describen N objetos detectados, con un elemento en cada matriz correspondiente a cada objeto.

Índice Nombre Descripción
0 Ubicaciones Matriz multidimensional de [N][4] valores de punto flotante entre 0 y 1, las matrices internas representan cuadros delimitadores en la forma [arriba, izquierda, abajo, derecha]
1 Clases Matriz de N enteros (salida como valores de coma flotante), cada uno de los cuales indica el índice de una etiqueta de clase del archivo de etiquetas
2 Puntuaciones Matriz de N valores de coma flotante entre 0 y 1 que representan la probabilidad de que se haya detectado una clase
3 Número de detecciones Valor entero de N

Por ejemplo, imagine que se ha entrenado un modelo para detectar manzanas, plátanos y fresas. Cuando se proporciona una imagen, generará un número determinado de resultados de detección; en este ejemplo, 5.

Clase Puntaje Ubicación
Manzana 0,92 [18, 21, 57, 63]
Banana 0.88 [100, 30, 180, 150]
Fresa 0.87 [7, 82, 89, 163]
Banana 0.23 [42, 66, 57, 83]
Manzana 0.11 [6, 42, 31, 58]

Puntuación de confianza

Para interpretar estos resultados, podemos observar la puntuación y la ubicación de cada objeto detectado. La puntuación es un número entre 0 y 1 que indica confianza en que el objeto fue realmente detectado. Cuanto más cerca esté el número de 1, más confianza tendrá el modelo.

Dependiendo de su aplicación, puede decidir un umbral de corte por debajo del cual descartará los resultados de detección. Para el ejemplo actual, un límite sensato es una puntuación de 0,5 (lo que significa un 50 % de probabilidad de que la detección sea válida). En ese caso, los dos últimos objetos de la matriz se ignorarían porque esas puntuaciones de confianza están por debajo de 0,5:

Clase Puntaje Ubicación
Manzana 0.92 [18, 21, 57, 63]
Banana 0.88 [100, 30, 180, 150]
Fresa 0.87 [7, 82, 89, 163]
Banana 0.23 [42, 66, 57, 83]
Manzana 0.11 [6, 42, 31, 58]

El límite que utilice debe basarse en si se siente más cómodo con los falsos positivos (objetos que se identifican incorrectamente o áreas de la imagen que se identifican erróneamente como objetos cuando no lo son) o los falsos negativos (objetos genuinos que se fallado porque su confianza era baja).

Por ejemplo, en la siguiente imagen, una pera (que no es un objeto para el cual el modelo fue entrenado para detectar) se identificó erróneamente como una "persona". Este es un ejemplo de un falso positivo que podría ignorarse seleccionando un corte apropiado. En este caso, un punto de corte de 0,6 (o 60 %) excluiría cómodamente el falso positivo.

Captura de pantalla del ejemplo de Android que muestra un falso positivo

Ubicación

Para cada objeto detectado, el modelo devolverá una matriz de cuatro números que representan un rectángulo delimitador que rodea su posición. Para el modelo básico provisto, los números están ordenados de la siguiente manera:

[ parte superior, izquierda, abajo, Correcto ]

El valor superior representa la distancia del borde superior del rectángulo desde la parte superior de la imagen, en píxeles. El valor de la izquierda representa la distancia del borde izquierdo desde la izquierda de la imagen de entrada. Los otros valores representan los bordes inferior y derecho de manera similar.

Puntos de referencia de rendimiento

Los números de referencia de rendimiento para nuestro modelo inicial se generan con la herramienta que se describe aquí .

Nombre del modelo Tamaño del modelo Dispositivo GPU UPC
COCO SSD MobileNet v1 27 MB Píxel 3 (Android 10) 22ms 46ms*
Píxel 4 (Android 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11ms**

* 4 hilos utilizados.

** 2 subprocesos utilizados en iPhone para obtener el mejor resultado de rendimiento.

Personalización del modelo

Modelos pre-entrenados

Los modelos de detección optimizados para dispositivos móviles con una variedad de características de latencia y precisión se pueden encontrar en el zoológico de detección . Cada uno de ellos sigue las firmas de entrada y salida descritas en los siguientes apartados.

La mayoría de los zips de descarga contienen un archivo model.tflite . Si no hay uno, se puede generar un búfer plano de TensorFlow Lite siguiendo estas instrucciones . Los modelos SSD del zoológico de detección de objetos TF2 también se pueden convertir a TensorFlow Lite siguiendo las instrucciones aquí . Es importante tener en cuenta que los modelos de detección no se pueden convertir directamente con TensorFlow Lite Converter , ya que requieren un paso intermedio para generar un modelo de origen compatible con dispositivos móviles. Los scripts vinculados anteriormente realizan este paso.

Los scripts de exportación TF1 y TF2 tienen parámetros que pueden habilitar una mayor cantidad de objetos de salida o un procesamiento posterior más lento y preciso. Utilice --help con los scripts para ver una lista exhaustiva de argumentos admitidos.

Actualmente, la inferencia en el dispositivo solo está optimizada con modelos SSD. Se está investigando un mejor soporte para otras arquitecturas como CenterNet y EfficientDet.

¿Cómo elegir un modelo para personalizar?

Cada modelo viene con su propia precisión (cuantificada por valor mAP) y características de latencia. Debe elegir un modelo que funcione mejor para su caso de uso y el hardware previsto. Por ejemplo, los modelos Edge TPU son ideales para la inferencia en Edge TPU de Google en Pixel 4.

Puede utilizar nuestra herramienta de referencia para evaluar modelos y elegir la opción más eficiente disponible.

Modelos de ajuste fino en datos personalizados

Los modelos pre-entrenados que proporcionamos están entrenados para detectar 90 clases de objetos. Para obtener una lista completa de clases, consulte el archivo de etiquetas en los metadatos del modelo .

Puede usar una técnica conocida como transferencia de aprendizaje para volver a entrenar un modelo para que reconozca las clases que no están en el conjunto original. Por ejemplo, podría volver a entrenar el modelo para detectar múltiples tipos de vegetales, a pesar de que solo hay un vegetal en los datos de entrenamiento originales. Para hacer esto, necesitará un conjunto de imágenes de entrenamiento para cada una de las nuevas etiquetas que desea entrenar. La forma recomendada es usar la biblioteca TensorFlow Lite Model Maker , que simplifica el proceso de entrenamiento de un modelo de TensorFlow Lite con un conjunto de datos personalizado, con unas pocas líneas de códigos. Utiliza el aprendizaje por transferencia para reducir la cantidad de datos y tiempo de capacitación requeridos. También puede aprender de Colab de detección de pocos disparos como un ejemplo de ajuste fino de un modelo entrenado previamente con algunos ejemplos.

Para realizar ajustes con conjuntos de datos más grandes, consulte estas guías para entrenar sus propios modelos con la API de detección de objetos de TensorFlow: TF1 , TF2 . Una vez entrenados, se pueden convertir a un formato compatible con TFLite con las instrucciones aquí: TF1 , TF2

,

Dada una imagen o un flujo de video, un modelo de detección de objetos puede identificar cuál de un conjunto conocido de objetos podría estar presente y proporcionar información sobre sus posiciones dentro de la imagen.

Por ejemplo, esta captura de pantalla de la aplicación de ejemplo muestra cómo se han reconocido dos objetos y se han anotado sus posiciones:

Captura de pantalla del ejemplo de Android

Empezar

Para aprender a usar la detección de objetos en una aplicación móvil, explore las aplicaciones y guías de ejemplo .

Si usa una plataforma que no sea Android o iOS, o si ya está familiarizado con las API de TensorFlow Lite , puede descargar nuestro modelo de detección de objetos de inicio y las etiquetas que lo acompañan.

Descargar modelo de inicio con metadatos

Para obtener más información sobre los metadatos y los campos asociados (p. ej., labels.txt ), consulte Leer los metadatos de los modelos .

Si desea entrenar un modelo de detección personalizado para su propia tarea, consulte Personalización del modelo .

Para los siguientes casos de uso, debe usar un tipo diferente de modelo:

  • Predecir qué etiqueta individual representa con mayor probabilidad la imagen (ver clasificación de imágenes)
  • Predecir la composición de una imagen, por ejemplo, sujeto versus fondo (ver segmentación )

Ejemplos de aplicaciones y guías

Si es nuevo en TensorFlow Lite y está trabajando con Android o iOS, le recomendamos explorar las siguientes aplicaciones de ejemplo que pueden ayudarlo a comenzar.

Androide

Puede aprovechar la API lista para usar de la biblioteca de tareas de TensorFlow Lite para integrar modelos de detección de objetos en solo unas pocas líneas de código. También puede crear su propia canalización de inferencia personalizada con la API de Java del intérprete de TensorFlow Lite .

El siguiente ejemplo de Android demuestra la implementación de ambos métodos como lib_task_api y lib_interpreter , respectivamente.

Ver ejemplo de Android

iOS

Puede integrar el modelo mediante la API Swift de intérprete de TensorFlow Lite . Vea el ejemplo de iOS a continuación.

Ver ejemplo de iOS

Descripcion del modelo

En esta sección, se describe la firma de los modelos de detectores de disparo único convertidos a TensorFlow Lite desde la API de detección de objetos de TensorFlow .

Se entrena un modelo de detección de objetos para detectar la presencia y ubicación de múltiples clases de objetos. Por ejemplo, un modelo puede entrenarse con imágenes que contienen varias piezas de fruta, junto con una etiqueta que especifica la clase de fruta que representan (por ejemplo, una manzana, un plátano o una fresa) y datos que especifican dónde aparece cada objeto en la imagen.

Cuando se proporciona una imagen posteriormente al modelo, generará una lista de los objetos que detecta, la ubicación de un cuadro delimitador que contiene cada objeto y una puntuación que indica la confianza en que la detección fue correcta.

Firma de entrada

El modelo toma una imagen como entrada.

Supongamos que la imagen esperada es de 300x300 píxeles, con tres canales (rojo, azul y verde) por píxel. Esto debe alimentarse al modelo como un búfer aplanado de valores de 270 000 bytes (300x300x3). Si el modelo está cuantificado , cada valor debe ser un solo byte que represente un valor entre 0 y 255.

Puede echar un vistazo a nuestro código de aplicación de ejemplo para comprender cómo hacer este preprocesamiento en Android.

Firma de salida

El modelo genera cuatro matrices, asignadas a los índices 0-4. Las matrices 0, 1 y 2 describen N objetos detectados, con un elemento en cada matriz correspondiente a cada objeto.

Índice Nombre Descripción
0 Ubicaciones Matriz multidimensional de [N][4] valores de punto flotante entre 0 y 1, las matrices internas representan cuadros delimitadores en la forma [arriba, izquierda, abajo, derecha]
1 Clases Matriz de N enteros (salida como valores de coma flotante), cada uno de los cuales indica el índice de una etiqueta de clase del archivo de etiquetas
2 Puntuaciones Matriz de N valores de coma flotante entre 0 y 1 que representan la probabilidad de que se haya detectado una clase
3 Número de detecciones Valor entero de N

Por ejemplo, imagine que se ha entrenado un modelo para detectar manzanas, plátanos y fresas. Cuando se proporciona una imagen, generará un número determinado de resultados de detección; en este ejemplo, 5.

Clase Puntaje Ubicación
Manzana 0.92 [18, 21, 57, 63]
Banana 0.88 [100, 30, 180, 150]
Fresa 0.87 [7, 82, 89, 163]
Banana 0.23 [42, 66, 57, 83]
Manzana 0.11 [6, 42, 31, 58]

Puntuación de confianza

Para interpretar estos resultados, podemos observar la puntuación y la ubicación de cada objeto detectado. La puntuación es un número entre 0 y 1 que indica confianza en que el objeto fue realmente detectado. Cuanto más cerca esté el número de 1, más confianza tendrá el modelo.

Dependiendo de su aplicación, puede decidir un umbral de corte por debajo del cual descartará los resultados de detección. Para el ejemplo actual, un límite sensato es una puntuación de 0,5 (lo que significa un 50 % de probabilidad de que la detección sea válida). En ese caso, los dos últimos objetos de la matriz se ignorarían porque esas puntuaciones de confianza están por debajo de 0,5:

Clase Puntaje Ubicación
Manzana 0,92 [18, 21, 57, 63]
Banana 0.88 [100, 30, 180, 150]
Fresa 0.87 [7, 82, 89, 163]
Banana 0.23 [42, 66, 57, 83]
Manzana 0.11 [6, 42, 31, 58]

El límite que utilice debe basarse en si se siente más cómodo con los falsos positivos (objetos que se identifican incorrectamente o áreas de la imagen que se identifican erróneamente como objetos cuando no lo son) o los falsos negativos (objetos genuinos que se fallado porque su confianza era baja).

Por ejemplo, en la siguiente imagen, una pera (que no es un objeto para el cual el modelo fue entrenado para detectar) se identificó erróneamente como una "persona". Este es un ejemplo de un falso positivo que podría ignorarse seleccionando un corte apropiado. En este caso, un punto de corte de 0,6 (o 60 %) excluiría cómodamente el falso positivo.

Captura de pantalla del ejemplo de Android que muestra un falso positivo

Ubicación

Para cada objeto detectado, el modelo devolverá una matriz de cuatro números que representan un rectángulo delimitador que rodea su posición. Para el modelo básico provisto, los números están ordenados de la siguiente manera:

[ parte superior, izquierda, abajo, Correcto ]

El valor superior representa la distancia del borde superior del rectángulo desde la parte superior de la imagen, en píxeles. El valor de la izquierda representa la distancia del borde izquierdo desde la izquierda de la imagen de entrada. Los otros valores representan los bordes inferior y derecho de manera similar.

Puntos de referencia de rendimiento

Los números de referencia de rendimiento para nuestro modelo inicial se generan con la herramienta que se describe aquí .

Nombre del modelo Tamaño del modelo Dispositivo GPU UPC
COCO SSD MobileNet v1 27 MB Píxel 3 (Android 10) 22ms 46ms*
Píxel 4 (Android 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11ms**

* 4 hilos utilizados.

** 2 subprocesos utilizados en iPhone para obtener el mejor resultado de rendimiento.

Personalización del modelo

Modelos pre-entrenados

Los modelos de detección optimizados para dispositivos móviles con una variedad de características de latencia y precisión se pueden encontrar en el zoológico de detección . Cada uno de ellos sigue las firmas de entrada y salida descritas en los siguientes apartados.

La mayoría de los zips de descarga contienen un archivo model.tflite . Si no hay uno, se puede generar un búfer plano de TensorFlow Lite siguiendo estas instrucciones . Los modelos SSD del zoológico de detección de objetos TF2 también se pueden convertir a TensorFlow Lite siguiendo las instrucciones aquí . Es importante tener en cuenta que los modelos de detección no se pueden convertir directamente con TensorFlow Lite Converter , ya que requieren un paso intermedio para generar un modelo de origen compatible con dispositivos móviles. Los scripts vinculados anteriormente realizan este paso.

Los scripts de exportación TF1 y TF2 tienen parámetros que pueden habilitar una mayor cantidad de objetos de salida o un procesamiento posterior más lento y preciso. Utilice --help con los scripts para ver una lista exhaustiva de argumentos admitidos.

Actualmente, la inferencia en el dispositivo solo está optimizada con modelos SSD. Se está investigando un mejor soporte para otras arquitecturas como CenterNet y EfficientDet.

¿Cómo elegir un modelo para personalizar?

Cada modelo viene con su propia precisión (cuantificada por valor mAP) y características de latencia. Debe elegir un modelo que funcione mejor para su caso de uso y el hardware previsto. Por ejemplo, los modelos Edge TPU son ideales para la inferencia en Edge TPU de Google en Pixel 4.

Puede utilizar nuestra herramienta de referencia para evaluar modelos y elegir la opción más eficiente disponible.

Modelos de ajuste fino en datos personalizados

Los modelos pre-entrenados que proporcionamos están entrenados para detectar 90 clases de objetos. Para obtener una lista completa de clases, consulte el archivo de etiquetas en los metadatos del modelo .

Puede usar una técnica conocida como transferencia de aprendizaje para volver a entrenar un modelo para que reconozca las clases que no están en el conjunto original. Por ejemplo, podría volver a entrenar el modelo para detectar múltiples tipos de vegetales, a pesar de que solo hay un vegetal en los datos de entrenamiento originales. Para hacer esto, necesitará un conjunto de imágenes de entrenamiento para cada una de las nuevas etiquetas que desea entrenar. La forma recomendada es usar la biblioteca TensorFlow Lite Model Maker , que simplifica el proceso de entrenamiento de un modelo de TensorFlow Lite con un conjunto de datos personalizado, con unas pocas líneas de códigos. Utiliza el aprendizaje por transferencia para reducir la cantidad de datos y tiempo de capacitación requeridos. También puede aprender de Colab de detección de pocos disparos como un ejemplo de ajuste fino de un modelo entrenado previamente con algunos ejemplos.

Para realizar ajustes con conjuntos de datos más grandes, consulte estas guías para entrenar sus propios modelos con la API de detección de objetos de TensorFlow: TF1 , TF2 . Una vez entrenados, se pueden convertir a un formato compatible con TFLite con las instrucciones aquí: TF1 , TF2