Bildsegmentierer sagen voraus, ob jedes Pixel eines Bilds einer bestimmten Klasse zugeordnet ist. Das steht im Gegensatz zur Objekterkennung, bei der Objekte in rechteckigen Bereichen erkannt werden, und zur Bildklassifizierung, bei der das gesamte Bild klassifiziert wird. Weitere Informationen zu Bildsegmentierern finden Sie im Beispiel für die Bildsegmentierung.
Mit der ImageSegmenter-API der Task Library können Sie benutzerdefinierte oder vortrainierte Bildsegmentierer in Ihren mobilen Apps bereitstellen.
Wichtige Funktionen der ImageSegmenter API
Verarbeitung von Eingabebildern, einschließlich Drehung, Größenänderung und Farbraumkonvertierung.
Gebietsschema für Labelkarte.
Zwei Ausgabetypen: Kategorienmaske und Konfidenzmasken.
Farbige Kennzeichnung für Anzeigezwecke.
Unterstützte Bildsegmentierungsmodelle
Die folgenden Modelle sind garantiert mit der ImageSegmenter API kompatibel.
Die vortrainierten Bildsegmentierungsmodelle in TensorFlow Hub.
Benutzerdefinierte Modelle, die die Anforderungen an die Modellkompatibilität erfüllen.
Inferenz in Java ausführen
In der Referenz-App für die Bildsegmentierung finden Sie ein Beispiel für die Verwendung von ImageSegmenter in einer Android-App.
Schritt 1: Gradle-Abhängigkeit und andere Einstellungen importieren
Kopieren Sie die Modelldatei .tflite 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 der build.gradle-Datei des Moduls hinzu:
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'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}
Schritt 2: Modell verwenden
// Initialization
ImageSegmenterOptions options =
ImageSegmenterOptions.builder()
.setBaseOptions(BaseOptions.builder().useGpu().build())
.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 finden Sie im Quellcode und in der Javadoc.
Inferenz auf iOS-Geräten ausführen
Schritt 1: Abhängigkeiten installieren
Die Task Library unterstützt die Installation mit CocoaPods. Prüfen Sie, ob CocoaPods auf Ihrem System installiert ist. Eine Anleitung finden Sie im CocoaPods-Installationsleitfaden.
Weitere Informationen zum Hinzufügen von Pods zu einem Xcode-Projekt finden Sie im CocoaPods-Leitfaden.
Fügen Sie den TensorFlowLiteTaskVision-Pod in die Podfile ein.
target 'MyAppWithTaskAPI' do
use_frameworks!
pod 'TensorFlowLiteTaskVision'
end
Achten Sie darauf, dass das .tflite-Modell, das Sie für die Inferenz verwenden, in Ihrem App-Bundle enthalten ist.
Schritt 2: Modell verwenden
Swift
// Imports
import TensorFlowLiteTaskVision
// Initialization
guard let modelPath = Bundle.main.path(forResource: "deeplabv3",
ofType: "tflite") else { return }
let options = ImageSegmenterOptions(modelPath: modelPath)
// Configure any additional options:
// options.outputType = OutputType.confidenceMasks
let segmenter = try ImageSegmenter.segmenter(options: options)
// Convert the input image to MLImage.
// There are other sources for MLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
guard let image = UIImage (named: "plane.jpg"), let mlImage = MLImage(image: image) else { return }
// Run inference
let segmentationResult = try segmenter.segment(mlImage: mlImage)
Objective-C
// Imports
#import <TensorFlowLiteTaskVision/TensorFlowLiteTaskVision.h>
// Initialization
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"deeplabv3" ofType:@"tflite"];
TFLImageSegmenterOptions *options =
[[TFLImageSegmenterOptions alloc] initWithModelPath:modelPath];
// Configure any additional options:
// options.outputType = TFLOutputTypeConfidenceMasks;
TFLImageSegmenter *segmenter = [TFLImageSegmenter imageSegmenterWithOptions:options
error:nil];
// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"plane.jpg"];
// There are other sources for GMLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
GMLImage *gmlImage = [[GMLImage alloc] initWithImage:image];
// Run inference
TFLSegmentationResult *segmentationResult =
[segmenter segmentWithGMLImage:gmlImage error:nil];
Weitere Optionen zum Konfigurieren von TFLImageSegmenter finden Sie im Quellcode.
Inferenz in Python ausführen
Schritt 1: pip-Paket installieren
pip install tflite-support
Schritt 2: Modell verwenden
# Imports
from tflite_support.task import vision
from tflite_support.task import core
from tflite_support.task import processor
# Initialization
base_options = core.BaseOptions(file_name=model_path)
segmentation_options = processor.SegmentationOptions(
output_type=processor.SegmentationOptions.output_type.CATEGORY_MASK)
options = vision.ImageSegmenterOptions(base_options=base_options, segmentation_options=segmentation_options)
segmenter = vision.ImageSegmenter.create_from_options(options)
# Alternatively, you can create an image segmenter in the following manner:
# segmenter = vision.ImageSegmenter.create_from_file(model_path)
# Run inference
image_file = vision.TensorImage.create_from_file(image_path)
segmentation_result = segmenter.segment(image_file)
Weitere Optionen zum Konfigurieren von ImageSegmenter finden Sie im Quellcode.
Inferenz in C++ ausführen
// Initialization
ImageSegmenterOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ImageSegmenter> image_segmenter = ImageSegmenter::CreateFromOptions(options).value();
// Create input frame_buffer from your inputs, `image_data` and `image_dimension`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer = CreateFromRgbRawBuffer(
image_data, image_dimension);
// Run inference
const SegmentationResult result = image_segmenter->Segment(*frame_buffer).value();
Weitere Optionen zum Konfigurieren von ImageSegmenter finden Sie im Quellcode.
Beispielergebnisse
Hier sehen Sie ein Beispiel für die Segmentierungsergebnisse von deeplab_v3, einem generischen Segmentierungsmodell, das in TensorFlow Hub verfügbar ist.

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 Maske für die Segmentierungskategorie sollte so aussehen:

Testen Sie das einfache CLI-Demotool für ImageSegmenter mit Ihrem eigenen Modell und Ihren eigenen Testdaten.
Anforderungen an die Modellkompatibilität
Für die ImageSegmenter API ist ein TFLite-Modell mit obligatorischen TFLite-Modellmetadaten erforderlich. Beispiele für das Erstellen von Metadaten für Bildsegmentierer mit der TensorFlow Lite Metadata Writer API
Eingabe-Bildtensor (kTfLiteUInt8/kTfLiteFloat32)
- Bild-Eingabe der Größe
[batch x height x width x channels]. - Die Batch-Inferenz wird nicht unterstützt (
batchmuss 1 sein). - Es werden nur RGB-Eingaben unterstützt (
channelsmuss 3 sein). - Wenn der Typ kTfLiteFloat32 ist, müssen NormalizationOptions an die Metadaten für die Eingabenormalisierung angehängt werden.
- Bild-Eingabe der Größe
Ausgabe-Masken-Tensor: (kTfLiteUInt8/kTfLiteFloat32)
- Tensor der Größe
[batch x mask_height x mask_width x num_classes], wobeibatch1 sein muss,mask_widthundmask_heightdie Dimensionen der vom Modell erstellten Segmentierungsmasken sind undnum_classesdie Anzahl der vom Modell unterstützten Klassen ist. - Optionale (aber empfohlene) Labelzuordnungen können als AssociatedFile-s mit dem Typ TENSOR_AXIS_LABELS angehängt werden. Sie enthalten ein Label pro Zeile. Die erste solche AssociatedFile (falls vorhanden) wird verwendet, um das Feld
label(in C++ alsclass_namebezeichnet) der Ergebnisse zu füllen. Das Felddisplay_namewird aus der AssociatedFile (falls vorhanden) gefüllt, deren Gebietsschema mit dem Felddisplay_names_localedesImageSegmenterOptionsübereinstimmt, das bei der Erstellung verwendet wurde („en“ als Standard, d.h. Englisch). Wenn keine dieser Informationen verfügbar sind, wird nur das Feldindexder Ergebnisse ausgefüllt.
- Tensor der Größe