¡El Día de la Comunidad de ML es el 9 de noviembre! Únase a nosotros para recibir actualizaciones de TensorFlow, JAX, y más Más información

Integrar clasificadores de imágenes

La clasificación de imágenes es un uso común del aprendizaje automático para identificar lo que representa una imagen. Por ejemplo, podríamos querer saber qué tipo de animal aparece en una imagen determinada. La tarea de predecir lo que representa una imagen se llama clasificación de imágenes. Un clasificador de imágenes está capacitado para reconocer varias clases de imágenes. Por ejemplo, se puede entrenar a un modelo para que reconozca fotografías que representen tres tipos diferentes de animales: conejos, hámsteres y perros. Ver la introducción de la clasificación de imágenes para obtener más información acerca de los clasificadores de imagen.

Utilice la tarea Biblioteca ImageClassifier API para implementar los clasificadores de imagen personalizados o los pretrained en sus aplicaciones para móviles.

Funciones clave de la API ImageClassifier

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

  • Región de interés de la imagen de entrada.

  • Etiquetar la configuración regional del mapa.

  • Umbral de puntuación para filtrar los resultados.

  • Resultados de la clasificación Top-k.

  • Etiquetar lista de permitidos y denylist.

Modelos de clasificador de imágenes compatibles

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

Ejecutar inferencia en Java

Ver la aplicación de referencia Clasificación de imagen para un ejemplo de cómo utilizar ImageClassifier 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
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.2.0'
}

Paso 2: usar el modelo

// Initialization
ImageClassifierOptions options = ImageClassifierOptions.builder().setMaxResults(1).build();
ImageClassifier imageClassifier = ImageClassifier.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Classifications> results = imageClassifier.classify(image);

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

Ejecutar inferencia en C ++

// Initialization
ImageClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::CreateFromOptions(options).value();

// Run inference
const ClassificationResult result = image_classifier->Classify(*frame_buffer).value();

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

Resultados de ejemplo

Aquí es un ejemplo de los resultados de la clasificación de un clasificador de aves .

gorrión

Results:
  Rank #0:
   index       : 671
   score       : 0.91406
   class name  : /m/01bwb9
   display name: Passer domesticus
  Rank #1:
   index       : 670
   score       : 0.00391
   class name  : /m/01bwbt
   display name: Passer montanus
  Rank #2:
   index       : 495
   score       : 0.00391
   class name  : /m/0bwm6m
   display name: Passer italiae

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

Requisitos de compatibilidad del modelo

El ImageClassifier API espera un modelo con TFLite obligatoria TFLite modelo de metadatos . Ver ejemplos de creación de metadatos para los clasificadores de imagen utilizando la API escritor TensorFlow Lite metadatos .

Los modelos de clasificadores de imágenes 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.
  • Tensor de puntuación de salida (kTfLiteUInt8 / kTfLiteFloat32)

    • con N clases y 2 o 4 dimensiones, es decir, [1 x N] o [1 x 1 x 1 x N]

    • mapa (s) de etiqueta opcional (pero recomendado) como AssociatedFile-s con tipo TENSOR_AXIS_LABELS, que contiene una etiqueta por línea. Ver el ejemplo de archivo de etiquetas . La primera de tales AssociatedFile (si existe) se utiliza para llenar la label de campo (nombrado como class_name en C ++) 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 ImageClassifierOptions 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.