Sehen Sie sich Keynotes, Produktsitzungen, Workshops und mehr in Google I / O an. Siehe Wiedergabeliste

Integrieren Sie Bildsegmentierer

Bildsegmentierer sagen voraus, ob jedes Pixel eines Bildes einer bestimmten Klasse zugeordnet ist. Dies steht im Gegensatz zur Objekterkennung , bei der Objekte in rechteckigen Bereichen erkannt werden, und der Bildklassifizierung , bei der das Gesamtbild klassifiziert wird. Weitere Informationen zu Bildsegmentierern finden Sie in der Einführung zur Bildsegmentierung .

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

Hauptfunktionen der ImageSegmenter-API

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

  • Beschriften Sie das Gebietsschema der Karte.

  • Zwei Ausgabetypen, Kategoriemaske und Konfidenzmaske.

  • Farbiges Etikett für Anzeigezwecke.

Unterstützte Bildsegmentierungsmodelle

Die folgenden Modelle sind garantiert mit der ImageSegmenter API kompatibel.

Führen Sie Inferenz in Java aus

In der Referenzsoftware für die ImageSegmenter ein Beispiel für die Verwendung von ImageSegmenter 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
ImageSegmenterOptions options = ImageSegmenterOptions.builder().setOutputType(OutputType.CONFIDENCE_MASK).build();
ImageSegmenter imageSegmenter = ImageSegmenter.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Segmentation> results = imageSegmenter.segment(image);

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

Führen Sie Inferenz in C ++ aus

// Initialization
ImageSegmenterOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ImageSegmenter> image_segmenter = ImageSegmenter::CreateFromOptions(options).value();

// Run inference
const SegmentationResult result = image_segmenter->Segment(*frame_buffer).value();

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

Beispielergebnisse

Hier ist ein Beispiel für die Segmentierungsergebnisse von deeplab_v3 , einem generischen Segmentierungsmodell, das auf TensorFlow Hub verfügbar ist.

Flugzeug

Color Legend:
 (r: 000, g: 000, b: 000):
  index       : 0
  class name  : background
 (r: 128, g: 000, b: 000):
  index       : 1
  class name  : aeroplane

# (omitting multiple lines for conciseness) ...

 (r: 128, g: 192, b: 000):
  index       : 19
  class name  : train
 (r: 000, g: 064, b: 128):
  index       : 20
  class name  : tv
Tip: use a color picker on the output PNG file to inspect the output mask with
this legend.

Die Segmentierungskategoriemaske sollte folgendermaßen aussehen:

Segmentierungsausgabe

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

Modellkompatibilitätsanforderungen

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

  • 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.
  • Tensor der Ausgabemasken: (kTfLiteUInt8 / kTfLiteFloat32)

    • Tensor Größe [batch x mask_height x mask_width x num_classes] , wo batch erforderlich ist 1, seine mask_width und mask_height sind die Dimensionen der Segmentierungsmasken durch das Modell produziert und num_classes ist die Anzahl der Klassen durch das Modell unterstützt.

    • Optionale (aber empfohlene) Etikettenzuordnungen können als AssociatedFile-s vom Typ TENSOR_AXIS_LABELS angehängt werden, die ein Etikett pro Zeile enthalten. 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 ImageSegmenterOptions verwendeten ImageSegmenterOptions (standardmäßig "en", dh Englisch). Wenn keines davon verfügbar ist, wird nur das index der Ergebnisse ausgefüllt.