Ayuda a proteger la Gran Barrera de Coral con TensorFlow en Kaggle Únete Challenge

Integrar detectores de objetos

Los detectores de objetos pueden identificar cuál de un conjunto conocido de objetos podría estar presente y proporcionar información sobre sus posiciones dentro de la imagen dada o una secuencia de video. Un detector de objetos está capacitado para detectar la presencia y ubicación de múltiples clases de objetos. Por ejemplo, un modelo podría ser entrenado 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 en la que aparece cada objeto en la imagen. Ver la introducción de detección de objetos para obtener más información acerca de detectores de objetos.

Utilice la tarea Biblioteca ObjectDetector API para implementar los detectores de objetos personalizados o los pretrained en sus aplicaciones para móviles.

Funciones clave de la API ObjectDetector

  • Procesamiento de imágenes de entrada, incluida la rotación, el cambio de tamaño y la conversión del espacio de color.

  • Etiquetar la configuración regional del mapa.

  • Umbral de puntuación para filtrar los resultados.

  • Resultados de detección de top-k.

  • Etiquetar lista de permitidos y denylist.

Modelos de detectores de objetos compatibles

Los siguientes modelos están garantizados para ser compatible con el ObjectDetector API.

Ejecutar inferencia en Java

Ver la aplicación de referencia de detección de objetos para un ejemplo de cómo utilizar ObjectDetector en una aplicación para Android.

Paso 1: importar la dependencia de Gradle y otras configuraciones

Copiar el .tflite archivo del modelo para el directorio activo del módulo de Android en la que se ejecuta el modelo. Especifica que el archivo no se debe comprimir, y añadir la biblioteca TensorFlow Lite para el módulo de build.gradle archivo:

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency (NNAPI is included)
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.3.0'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.3.0'
}

Paso 2: usar el modelo

// Initialization
ObjectDetectorOptions options =
    ObjectDetectorOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ObjectDetector objectDetector =
    ObjectDetector.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

Ver el código fuente y javadoc para más opciones para configurar ObjectDetector .

Ejecutar inferencia en C ++

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::CreateFromOptions(options).value();

// Run inference
const DetectionResult result = object_detector->Detect(*frame_buffer).value();

Ver el código fuente para más opciones para configurar ObjectDetector .

Resultados de ejemplo

Aquí es un ejemplo de los resultados de detección de SSD MobileNet v1 de TensorFlow concentradores.

perros

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

Renderice los cuadros delimitadores en la imagen de entrada:

salida de detección

Pruebe la sencilla herramienta de demostración CLI para ObjectDetector con sus propios datos del modelo y de prueba.

Requisitos de compatibilidad del modelo

El ObjectDetector API espera un modelo con TFLite obligatoria TFLite modelo de metadatos . Ver ejemplos de creación de metadatos para detectores de objetos utilizando el API escritor TensorFlow Lite metadatos .

Los modelos de detectores de objetos compatibles deben cumplir los siguientes requisitos:

  • Tensor de imagen de entrada: (kTfLiteUInt8 / kTfLiteFloat32)

    • de entrada de imagen de tamaño [batch x height x width x channels] .
    • No se admite la inferencia por lotes ( batch se requiere que sea 1).
    • solamente entradas RGB son compatibles ( channels se requiere que sea 3).
    • si el tipo es kTfLiteFloat32, se requiere que NormalizationOptions se adjunte a los metadatos para la normalización de entrada.
  • Tensores de salida debe ser las 4 salidas de un DetectionPostProcess op, es decir:

    • Tensor de ubicaciones (kTfLiteFloat32)
      • tensor de tamaño [1 x num_results x 4] , la matriz interior que representa cuadros delimitadores en la forma [superior, izquierda, derecha, abajo].
      • Se requieren BoundingBoxProperties para ser unido a los metadatos y debe especificar type=BOUNDARIES y `coordinate_type = relación.
    • Tensor de clases (kTfLiteFloat32)

      • tensor de tamaño [1 x num_results] , cada valor representa el índice entero de una clase.
      • Los mapas de etiquetas opcionales (pero recomendados) se pueden adjuntar como AssociatedFile-s con el tipo TENSOR_VALUE_LABELS, que contienen una etiqueta por línea. Ver el ejemplo de archivo de etiquetas . La primera de tales AssociatedFile (si los hay) se utiliza para llenar el class_name campo de los resultados. El display_name campo se rellena desde el AssociatedFile (si lo hay) cuya configuración regional coincide con el display_names_locale campo de los ObjectDetectorOptions utilizados durante la creación ( "en" por defecto, es decir, Inglés). Si ninguno de éstos están disponibles, sólo el index se llenará el campo de los resultados.
    • Tensor de puntuaciones (kTfLiteFloat32)

      • tensor de tamaño [1 x num_results] , cada valor representa la puntuación del objeto detectado.
    • Número de tensor de detección (kTfLiteFloat32)

      • NUM_RESULTS entero como un tensor de tamaño [1] .