Görüntü segmentasyon modelleri, bir görüntünün her pikselinin belirli bir sınıfla ilişkili olup olmadığını tahmin eder. Bu, nesneleri dikdörtgen bölgelerde algılayan nesne algılama ve genel görüntüyü sınıflandıran görüntü sınıflandırmanın aksine bir durumdur. Resim segmentleyiciler hakkında daha fazla bilgi için resim segmentasyonu genel bakış örneğine bakın.
Özel görüntü segmentasyon araçlarınızı veya önceden eğitilmiş olanları mobil uygulamalarınıza dağıtmak için Görev Kitaplığı ImageSegmenter API'sini kullanın.
ImageSegmenter API'nin temel özellikleri
Döndürme, yeniden boyutlandırma ve renk alanı dönüştürme dahil olmak üzere giriş görüntüsü işleme.
Etiket haritası yerel ayarı.
İki çıkış türü vardır: kategori maskesi ve güven maskeleri.
Görüntüleme amacıyla kullanılan renkli etiket.
Desteklenen görüntü segmentasyon modelleri
Aşağıdaki modellerin ImageSegmenter
API ile uyumlu olduğu garanti edilir.
TensorFlow Hub'daki önceden eğitilmiş görüntü segmentasyonu modelleri.
Model uyumluluğu koşullarını karşılayan özel modeller.
Java'da çıkarım çalıştırma
Android uygulamasında ImageSegmenter nasıl kullanılacağına dair bir örnek için Image Segmentation referans uygulamasına bakın.
1. adım: Gradle bağımlılığını ve diğer ayarları içe aktarın
.tflite model dosyasını, modelin çalıştırılacağı Android modülünün öğeler dizinine kopyalayın. Dosyanın sıkıştırılmaması gerektiğini belirtin ve TensorFlow Lite kitaplığını modülün build.gradle dosyasına ekleyin:
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'
}
2. adım: Modeli kullanma
// 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);
ImageSegmenter yapılandırmayla ilgili daha fazla seçenek için kaynak kodu ve javadoc'a bakın.
iOS'te çıkarım çalıştırma
1. adım: Bağımlılıkları yükleyin
Görev Kitaplığı, CocoaPods kullanılarak yüklenmeyi destekler. Sisteminizde CocoaPods'un yüklü olduğundan emin olun. Talimatlar için lütfen CocoaPods yükleme kılavuzuna bakın.
Pod'ları Xcode projesine ekleme hakkında ayrıntılı bilgi için lütfen CocoaPods rehberine bakın.
Podfile'a TensorFlowLiteTaskVision kapsülünü ekleyin.
target 'MyAppWithTaskAPI' do
use_frameworks!
pod 'TensorFlowLiteTaskVision'
end
Çıkarım için kullanacağınız .tflite modelin uygulama paketinizde bulunduğundan emin olun.
2. adım: Modeli kullanma
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];
TFLImageSegmenter yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.
Python'da çıkarım çalıştırma
1. adım: pip paketini yükleyin
pip install tflite-support
2. adım: Modeli kullanma
# 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)
ImageSegmenter yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.
C++'ta çıkarım çalıştırma
// 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();
ImageSegmenter yapılandırmayla ilgili diğer seçenekler için kaynak koduna bakın.
Örnek sonuçlar
TensorFlow Hub'da bulunan genel bir segmentasyon modeli olan deeplab_v3'ün segmentasyon sonuçlarına dair bir örneği aşağıda bulabilirsiniz.

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.
Segmentasyon kategorisi maskesi şu şekilde görünmelidir:

ImageSegmenter için basit KSA demo aracını kendi modeliniz ve test verilerinizle deneyin.
Model uyumluluğu koşulları
ImageSegmenter API, zorunlu TFLite Model Metadata içeren bir TFLite modeli bekler. TensorFlow Lite Metadata Writer API'yi kullanarak görüntü segmentasyon araçları için meta veri oluşturma örneklerini inceleyin.
Giriş görüntüsü tensörü (kTfLiteUInt8/kTfLiteFloat32)
[batch x height x width x channels]boyutunda görüntü girişi.- Toplu çıkarım desteklenmez (
batch1 olmalıdır). - Yalnızca RGB girişleri desteklenir (
channels3 olmalıdır). - Tür kTfLiteFloat32 ise giriş normalleştirme için NormalizationOptions'ın meta verilere eklenmesi gerekir.
Çıkış maskeleri tensörü: (kTfLiteUInt8/kTfLiteFloat32)
[batch x mask_height x mask_width x num_classes]boyutunda tensör. Buradabatch1 olmalıdır,mask_widthvemask_heightmodel tarafından üretilen segmentasyon maskelerinin boyutlarıdır venum_classesmodel tarafından desteklenen sınıf sayısıdır.- İsteğe bağlı (ancak önerilir) etiket haritaları, her satırda bir etiket içeren TENSOR_AXIS_LABELS türünde AssociatedFile olarak eklenebilir. Bu türden ilk AssociatedFile (varsa), sonuçların
labelalanını (C++'daclass_nameolarak adlandırılır) doldurmak için kullanılır.display_namealanı, oluşturma sırasında kullanılanImageSegmenterOptionsöğesinindisplay_names_localealanıyla yerel ayarı eşleşen AssociatedFile'dan (varsa) doldurulur ("en" varsayılan olarak İngilizce). Bunlardan hiçbiri yoksa sonuçların yalnızcaindexalanı doldurulur.