Integrieren Sie Bildklassifizierer

Die Bildklassifizierung ist eine häufige Verwendung des maschinellen Lernens, um zu identifizieren, was ein Bild darstellt. Zum Beispiel möchten wir vielleicht wissen, welche Art von Tier in einem bestimmten Bild erscheint. Die Aufgabe, vorherzusagen, was ein Bild darstellt, wird als Bildklassifizierung bezeichnet . Ein Bildklassifizierer wird trainiert, um verschiedene Klassen von Bildern zu erkennen. Beispielsweise könnte ein Modell darauf trainiert werden, Fotos zu erkennen, die drei verschiedene Tierarten darstellen: Kaninchen, Hamster und Hunde. Weitere Informationen zu Bildklassifizierern finden Sie in der Einführung zur Bildklassifizierung.

Verwenden Sie die ImageClassifier API der ImageClassifier , um Ihre benutzerdefinierten oder ImageClassifier in Ihren mobilen Apps ImageClassifier .

Hauptmerkmale der ImageClassifier-API

  • Eingabebildverarbeitung, einschließlich Drehung, Größenänderung und Farbraumkonvertierung.

  • Region von Interesse des Eingabebildes.

  • Beschriften Sie das Gebietsschema der Karte.

  • Bewertungsschwelle zum Filtern der Ergebnisse.

  • Top-k-Klassifizierungsergebnisse.

  • Zulassungsliste und Denyliste beschriften.

Unterstützte Bildklassifizierungsmodelle

Die folgenden Modelle sind garantiert mit der ImageClassifier API kompatibel.

Führen Sie Inferenz in Java aus

In der Referenz-App zur ImageClassifier ein Beispiel für die Verwendung von ImageClassifier in einer Android-App.

Schritt 1: Importieren Sie die Gradle-Abhängigkeit und andere Einstellungen

Kopieren Sie die .tflite Modelldatei in das Assets-Verzeichnis des Android-Moduls, in dem das Modell ausgeführt wird. Geben Sie an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite-Bibliothek zur build.gradle Datei des Moduls build.gradle :

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'
}

Schritt 2: Verwenden des Modells

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

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

Weitere Optionen zum Konfigurieren von ImageClassifier Sie im Quellcode und in ImageClassifier .

Führen Sie Inferenz in C ++ aus

// 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();

Siehe den Quellcode für mehr Optionen zu konfigurieren ImageClassifier .

Beispielergebnisse

Hier ist ein Beispiel für die Klassifizierungsergebnisse eines Vogelklassifizierers .

Spatz

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

Probieren Sie das einfache CLI-Demo-Tool für ImageClassifier mit Ihren eigenen Modell- und Testdaten aus.

Modellkompatibilitätsanforderungen

Die ImageClassifier API erwartet ein TFLite-Modell mit obligatorischen TFLite-Modellmetadaten . Beispiele zum Erstellen von Metadaten für Bildklassifizierer mithilfe der TensorFlow Lite Metadata Writer-API finden Sie hier .

Die kompatiblen Bildklassifizierungsmodelle sollten die folgenden Anforderungen erfüllen:

  • Eingabebild-Tensor (kTfLiteUInt8 / kTfLiteFloat32)

    • Bildeingabe der Größe [batch x height x width x channels] .
    • Batch-Inferenz wird nicht unterstützt ( batch muss 1 sein).
    • Es werden nur RGB-Eingänge unterstützt ( channels müssen 3 sein).
    • Wenn der Typ kTfLiteFloat32 ist, müssen NormalizationOptions zur Eingabe-Normalisierung an die Metadaten angehängt werden.
  • Ausgabe-Score-Tensor (kTfLiteUInt8 / kTfLiteFloat32)

    • mit N Klassen und entweder 2 oder 4 Dimensionen, dh [1 x N] oder [1 x 1 x 1 x N]

    • optionale (aber empfohlene) Beschriftungszuordnung (en) als AssociatedFile-s vom Typ TENSOR_AXIS_LABELS, die eine Beschriftung pro Zeile enthält. Die erste solche AssociatedFile (falls vorhanden) wird verwendet, um das label (in C ++ als class_name ) der Ergebnisse zu füllen. Das Feld display_name wird aus der AssociatedFile (falls vorhanden) ausgefüllt, deren Gebietsschema mit dem Feld display_names_locale der zur ImageClassifierOptions verwendeten ImageClassifierOptions (standardmäßig "en", dh Englisch). Wenn keines davon verfügbar ist, wird nur das index der Ergebnisse ausgefüllt.