Segmenter gambar memprediksi apakah setiap piksel suatu gambar dikaitkan dengan kelas tertentu. Hal ini berbeda dengan deteksi objek , yang mendeteksi objek dalam wilayah persegi panjang, dan klasifikasi gambar , yang mengklasifikasikan gambar secara keseluruhan. Lihat ikhtisar segmentasi gambar untuk informasi selengkapnya tentang segmentasi gambar.
Gunakan API ImageSegmenter
Pustaka Tugas untuk menyebarkan segmenter gambar khusus atau yang telah dilatih sebelumnya ke dalam aplikasi seluler Anda.
Fitur utama API ImageSegmenter
Pemrosesan gambar masukan, termasuk rotasi, pengubahan ukuran, dan konversi ruang warna.
Labeli lokasi peta.
Dua jenis keluaran, masker kategori dan masker kepercayaan.
Label berwarna untuk tujuan tampilan.
Model segmenter gambar yang didukung
Model berikut dijamin kompatibel dengan ImageSegmenter
API.
Model segmentasi gambar yang telah dilatih sebelumnya di TensorFlow Hub .
Model khusus yang memenuhi persyaratan kompatibilitas model .
Jalankan inferensi di Java
Lihat aplikasi referensi Segmentasi Gambar untuk contoh cara menggunakan ImageSegmenter
di aplikasi Android.
Langkah 1: Impor ketergantungan Gradle dan pengaturan lainnya
Salin file model .tflite
ke direktori aset modul Android tempat model akan dijalankan. Tentukan bahwa file tersebut tidak boleh dikompresi, dan tambahkan pustaka TensorFlow Lite ke file build.gradle
modul:
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 (NNAPI is included)
implementation 'org.tensorflow:tensorflow-lite-task-vision'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}
Langkah 2: Menggunakan model
// 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);
Lihat kode sumber dan javadoc untuk opsi lebih lanjut untuk mengonfigurasi ImageSegmenter
.
Jalankan inferensi di iOS
Langkah 1: Instal dependensi
Perpustakaan Tugas mendukung instalasi menggunakan CocoaPods. Pastikan CocoaPods terinstal di sistem Anda. Silakan lihat panduan instalasi CocoaPods untuk petunjuknya.
Silakan lihat panduan CocoaPods untuk detail tentang menambahkan pod ke proyek Xcode.
Tambahkan pod TensorFlowLiteTaskVision
di Podfile.
target 'MyAppWithTaskAPI' do
use_frameworks!
pod 'TensorFlowLiteTaskVision'
end
Pastikan model .tflite
yang akan Anda gunakan untuk inferensi ada di app bundle Anda.
Langkah 2: Menggunakan model
Cepat
// 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)
Tujuan 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];
Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi TFLImageSegmenter
.
Jalankan inferensi dengan Python
Langkah 1: Instal paket pip
pip install tflite-support
Langkah 2: Menggunakan model
# 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)
Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi ImageSegmenter
.
Jalankan inferensi di C++
// 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();
Lihat kode sumber untuk opsi lebih lanjut untuk mengonfigurasi ImageSegmenter
.
Contoh hasil
Berikut contoh hasil segmentasi deeplab_v3 , model segmentasi umum yang tersedia di TensorFlow Hub.
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.
Masker kategori segmentasi akan terlihat seperti:
Cobalah alat demo CLI sederhana untuk ImageSegmenter dengan model dan data pengujian Anda sendiri.
Persyaratan kompatibilitas model
ImageSegmenter
API mengharapkan model TFLite dengan Metadata Model TFLite wajib. Lihat contoh pembuatan metadata untuk segmentasi gambar menggunakan TensorFlow Lite Metadata Writer API .
Tensor gambar masukan (kTfLiteUInt8/kTfLiteFloat32)
- masukan gambar dengan ukuran
[batch x height x width x channels]
. - inferensi batch tidak didukung (
batch
harus 1). - hanya input RGB yang didukung (
channels
harus ada 3). - jika tipenya adalah kTfLiteFloat32, NormalizationOptions harus dilampirkan ke metadata untuk normalisasi input.
- masukan gambar dengan ukuran
Tensor masker keluaran: (kTfLiteUInt8/kTfLiteFloat32)
- tensor berukuran
[batch x mask_height x mask_width x num_classes]
, denganbatch
harus 1,mask_width
danmask_height
adalah dimensi masker segmentasi yang dihasilkan oleh model, dannum_classes
adalah jumlah kelas yang didukung oleh model. - peta label opsional (tetapi disarankan) dapat dilampirkan sebagai AssociatedFile-s dengan tipe TENSOR_AXIS_LABELS, berisi satu label per baris. AssociatedFile pertama (jika ada) digunakan untuk mengisi kolom
label
(dinamaiclass_name
dalam C++) dari hasil. Bidangdisplay_name
diisi dari AssociatedFile (jika ada) yang lokalnya cocok dengan bidangdisplay_names_locale
dariImageSegmenterOptions
yang digunakan pada waktu pembuatan ("en" secara default, yaitu bahasa Inggris). Jika tidak ada yang tersedia, hanya bidangindex
hasil yang akan diisi.
- tensor berukuran