Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Detección de objetos

Dada una imagen o una secuencia 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

Si es nuevo en TensorFlow Lite y está trabajando con Android o iOS, descargue las siguientes aplicaciones de ejemplo para comenzar.

Ejemplo de Android Ejemplo de iOS

Si está utilizando una plataforma que no sea Android o iOS, o si ya está familiarizado con las API de TensorFlow Lite , puede descargar el 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 (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 usar un tipo diferente de modelo:

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

Descripcion del modelo

En esta sección, se 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 puede entrenarse con imágenes que contengan varias frutas, 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 en la imagen.

Cuando una imagen se proporciona 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 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 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 realizar este procesamiento previo 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 indicando 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 detecte una clase
3 Numero 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 Puntuación Ubicación
manzana 0,92 [18, 21, 57, 63]
Plátano 0,88 [100, 30, 180, 150]
fresa 0,87 [7, 82, 89, 163]
Plátano 0,23 [42, 66, 57, 83]
manzana 0,11 [6, 42, 31, 58]

Puntuación de confianza

Para interpretar estos resultados, podemos mirar la puntuación y la ubicación de cada objeto detectado. La puntuación es un número entre 0 y 1 que indica la confianza en que el objeto se detectó realmente. 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 razonable 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 esos puntajes de confianza están por debajo de 0.5:

Clase Puntuación Ubicación
manzana 0,92 [18, 21, 57, 63]
Plátano 0,88 [100, 30, 180, 150]
fresa 0,87 [7, 82, 89, 163]
Plátano 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 falsos negativos (objetos genuinos que son perdido porque su confianza era baja).

Por ejemplo, en la siguiente imagen, una pera (que no es un objeto que 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 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 de arranque proporcionado, los números se ordenan de la siguiente manera:

[ parte superior, izquierda, fondo, derecho ]

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.

Benchmarks de desempeño

Los números de referencia de rendimiento para nuestro modelo de inicio 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 Pixel 3 (Android 10) 22ms 46 ms *
Pixel 4 (Android 10) 20ms 29 ms *
iPhone XS (iOS 12.4.1) 7,6 ms 11 ms **

* 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 Detection Zoo . Cada uno de ellos sigue las firmas de entrada y salida descritas en las siguientes secciones.

La mayoría de las cremalleras 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 TF2 Object Detection Zoo 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 fuente 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 permitir un mayor número de objetos de salida o un posprocesamiento más lento y preciso. Utilice --help with the scripts para ver una lista exhaustiva de argumentos compatibles.

Actualmente, la inferencia en el dispositivo solo se optimiza con los 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 hardware previsto. Por ejemplo, los modelos Edge TPU son ideales para inferencias 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.

Ajuste de modelos en 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 reconocer clases que no están en el conjunto original. Por ejemplo, puede volver a entrenar el modelo para detectar varios 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 desea entrenar. Consulte nuestro Colab de detección de pocos disparos como un ejemplo de ajuste fino de un modelo previamente entrenado con algunos ejemplos.

Para realizar ajustes con conjuntos de datos más grandes, eche un vistazo a 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