Bildklassifikatoren integrieren

Die Bildklassifizierung ist eine gängige Anwendung des maschinellen Lernens, um zu identifizieren, was ein Bild darstellt. Zum Beispiel möchten wir vielleicht wissen, welche Tierart in einem bestimmten Bild vorkommt. Die Aufgabe der Vorhersage , was ein Bild darstellt Bildklassifizierungs- genannt. Ein Bildklassifizierer wird trainiert, um verschiedene Klassen von Bildern zu erkennen. Ein Modell könnte beispielsweise darauf trainiert werden, Fotos zu erkennen, die drei verschiedene Tierarten darstellen: Kaninchen, Hamster und Hunde. Siehe die Einführung von Bildklassifikation für weitere Informationen über die Bild Klassifizierer.

Verwenden Sie die Taskbibliothek ImageClassifier API Ihr eigenes Bild Klassifizierer oder vortrainierter diejenigen in Ihre mobilen Anwendungen zu implementieren.

Hauptfunktionen der ImageClassifier-API

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

  • Interessenbereich des Eingabebilds.

  • Gebietsschema der Karte beschriften.

  • Score-Schwellenwert zum Filtern der Ergebnisse.

  • Ergebnisse der Top-k-Klassifizierung.

  • Zulassungsliste und Verweigerungsliste beschriften.

Unterstützte Bildklassifikatormodelle

Folgende Modelle sind garantiert mit der kompatibel sein ImageClassifier API.

Inferenz in Java ausführen

Siehe die Bildklassifizierung Referenz App für ein Beispiel dafür , wie die Verwendung ImageClassifier in einem Android - App.

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

Kopieren Sie die .tflite Modell - Datei in das Vermögen Verzeichnis des Android Modul , in dem das Modell ausgeführt wird. Gibt an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite - Bibliothek zu den wichtigsten Modul build.gradle Datei:

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

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

Inferenz in C++ ausführen

// 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 des Klassifikationsergebnisses eines Vogel - Klassifikator .

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

Versuchen Sie, die einfach aus CLI - Demo - Tool für ImageClassifier mit Ihren eigenen Modell und Testdaten.

Anforderungen an die Modellkompatibilität

Die ImageClassifier API erwartet einen TFLite Modell mit verbindlichen TFLite Modell Metadaten . Siehe Beispiele für das Erstellen von Metadaten für Bild Klassifizierer die Verwendung TensorFlow Lite Metadaten Writer - API .

Die kompatiblen Bildklassifikatormodelle sollten die folgenden Anforderungen erfüllen:

  • Eingabebildtensor (kTfLiteUInt8/kTfLiteFloat32)

    • Bildeingabe der Größe [batch x height x width x channels] .
    • Batch - Inferenz wird nicht unterstützt ( batch erforderlich ist 1 zu sein).
    • nur RGB - Eingänge werden unterstützt ( channels erforderlich sind 3 zu sein).
    • Wenn type kTfLiteFloat32 ist, müssen NormalizationOptions an die Metadaten für die Eingabenormalisierung 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) Label-Map(s) als AssociatedFile-s vom Typ TENSOR_AXIS_LABELS, die ein Label pro Zeile enthalten. Siehe das Beispiel Etikettendatei . Die erste derartige AssociatedFile (falls vorhanden) verwendet , um die zu füllen label (so benannt class_name der Ergebnisse in C ++). Das display_name Feld wird aus dem AssociatedFile (falls vorhanden) , das gefüllte Gebietsschema entspricht den display_names_locale Bereich der ImageClassifierOptions bei der Erstellung verwendet ( „en“ standardmäßig, also Englisch). Wenn keine von diesen zur Verfügung stehen, wird nur der index wird Feld der Ergebnisse gefüllt werden.