Detección de objetos

Dada una imagen o una secuencia de video, un modelo de detección de objetos puede identificar cuáles de un conjunto conocido de objetos podrían estar presentes 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 utilizar la detección de objetos en una aplicación móvil, explore las guías y aplicaciones de ejemplo .

Si está utilizando una plataforma que no sea Android o iOS, o si ya está familiarizado con las API de TensorFlow Lite , puede descargar nuestro modelo inicial de detección de objetos y las etiquetas adjuntas.

Descargar el modelo inicial con metadatos

Para obtener más información sobre los metadatos y los campos asociados (por ejemplo: 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 utilizar un tipo diferente de modelo:

  • Predecir qué etiqueta única representa más probablemente la imagen (consulte clasificación de imágenes )
  • Predecir la composición de una imagen, por ejemplo, sujeto versus fondo (ver segmentación )

Aplicaciones y guías de ejemplo

Si es nuevo en TensorFlow Lite y está trabajando con Android o iOS, le recomendamos explorar las siguientes aplicaciones de ejemplo que pueden ayudarle 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 propio canal de inferencia personalizado utilizando la API Java de TensorFlow Lite Interpreter .

El siguiente ejemplo de Android demuestra la implementación de ambos métodos utilizando la biblioteca de tareas y la API del intérprete , respectivamente.

Ver ejemplo de Android

iOS

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

Ver ejemplo de iOS

Descripcion del modelo

Esta sección describe la firma de los modelos de detector de disparo único convertidos a TensorFlow Lite desde la API de detección de objetos de TensorFlow .

Un modelo de detección de objetos está entrenado para detectar la presencia y ubicación de múltiples clases de objetos. Por ejemplo, un modelo podría entrenarse con imágenes que contengan varias piezas de fruta, junto con una etiqueta que especifique la clase de fruta que representan (por ejemplo, una manzana, un plátano o una fresa) y datos que especifiquen dónde aparece cada objeto. la imagen.

Cuando posteriormente se proporciona una imagen 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 de 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 enviarse 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 al código de nuestra aplicación de ejemplo para comprender cómo realizar 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 punto 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 punto flotante entre 0 y 1 que representan la probabilidad de que se detecte 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á una cantidad determinada 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 por debajo del cual descartará los resultados de la detección. Para el ejemplo actual, un límite sensato es una puntuación de 0,5 (lo que significa una probabilidad del 50 % 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 están mal identificados o áreas de la imagen que se identifican erróneamente como objetos cuando no lo son) o los falsos negativos (objetos genuinos que no lo son). fallaron 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) fue identificada erróneamente como una "persona". Este es un ejemplo de un falso positivo que podría ignorarse seleccionando un límite apropiado. En este caso, un límite de 0,6 (o 60%) excluiría cómodamente el falso positivo.

Captura de pantalla de un 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 inicial proporcionado, los números están ordenados de la siguiente manera:

[ arriba, izquierda, abajo, bien ]

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 46 ms*
Píxel 4 (Android 10) 20 ms 29 ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11ms**

*Se utilizan 4 hilos.

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

Personalización del modelo

Modelos previamente entrenados

En el Zoológico de Detección se pueden encontrar modelos de detección optimizados para dispositivos móviles con una variedad de características de latencia y precisión. Cada uno de ellos sigue las firmas de entrada y salida que se describen 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 utilizando TensorFlow Lite Converter , ya que requieren un paso intermedio para generar un modelo fuente compatible con dispositivos móviles. Los scripts vinculados anteriormente realizan este paso.

Tanto los scripts de exportación TF1 como TF2 tienen parámetros que pueden permitir una mayor cantidad de objetos de salida o un posprocesamiento 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 una mejor compatibilidad con otras arquitecturas como CenterNet y EfficientDet.

¿Cómo elegir un modelo para personalizar?

Cada modelo viene con su propia precisión (cuantificada por el 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 realizar inferencias sobre el 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 sobre datos personalizados

Los modelos previamente 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 utilizar una técnica conocida como aprendizaje por transferencia para volver a entrenar un modelo para que reconozca 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 haya 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 desee entrenar. La forma recomendada es utilizar la biblioteca TensorFlow Lite Model Maker , que simplifica el proceso de entrenamiento de un modelo TensorFlow Lite utilizando 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 necesarios. También puede aprender de Colab de detección de pocos disparos como ejemplo de ajuste fino de un modelo previamente entrenado 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