ادغام قطعه سازهای تصویر

قطعه‌بندهای تصویر پیش‌بینی می‌کنند که آیا هر پیکسل از یک تصویر با یک کلاس خاص مرتبط است یا خیر. این در تضاد با تشخیص شیء است که اشیاء را در نواحی مستطیلی تشخیص می‌دهد و طبقه‌بندی تصویر که کل تصویر را طبقه‌بندی می‌کند. برای اطلاعات بیشتر در مورد قطعه‌بندهای تصویر، به مثال مروری قطعه‌بندی تصویر مراجعه کنید.

از API مربوط به Task Library ImageSegmenter برای پیاده‌سازی سگمنترهای تصویر سفارشی یا سگمنترهای از پیش آموزش‌دیده در برنامه‌های تلفن همراه خود استفاده کنید.

ویژگی‌های کلیدی API مربوط به ImageSegmenter

  • پردازش تصویر ورودی، شامل چرخش، تغییر اندازه و تبدیل فضای رنگ.

  • برچسب‌گذاری محل نقشه.

  • دو نوع خروجی، ماسک دسته‌بندی و ماسک‌های اطمینان.

  • برچسب رنگی برای نمایش.

مدل‌های تقسیم‌کننده تصویر پشتیبانی‌شده

مدل‌های زیر تضمین می‌کنند که با API ImageSegmenter سازگار باشند.

اجرای استنتاج در جاوا

برای مثالی از نحوه استفاده از ImageSegmenter در یک برنامه اندروید، به برنامه مرجع Image Segmentation مراجعه کنید.

مرحله ۱: وارد کردن وابستگی Gradle و سایر تنظیمات

فایل مدل .tflite را در دایرکتوری assets ماژول اندروید که مدل در آن اجرا خواهد شد، کپی کنید. مشخص کنید که فایل نباید فشرده شود و کتابخانه TensorFlow Lite را به فایل 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'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

مرحله ۲: استفاده از مدل

// 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 به کد منبع و javadoc مراجعه کنید.

اجرای استنتاج در iOS

مرحله ۱: نصب وابستگی‌ها

کتابخانه وظایف (Task Library) از نصب با استفاده از CocoaPods پشتیبانی می‌کند. مطمئن شوید که CocoaPods روی سیستم شما نصب شده است. لطفاً برای دستورالعمل‌ها به راهنمای نصب CocoaPods مراجعه کنید.

برای جزئیات بیشتر در مورد افزودن پاد به یک پروژه Xcode، لطفاً به راهنمای CocoaPods مراجعه کنید.

غلاف TensorFlowLiteTaskVision را در Podfile اضافه کنید.

target 'MyAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskVision'
end

مطمئن شوید که مدل .tflite که برای استنتاج استفاده خواهید کرد، در بسته برنامه شما موجود است.

مرحله ۲: استفاده از مدل

سویفت

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

هدف-سی

// 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 به کد منبع مراجعه کنید.

اجرای استنتاج در پایتون

مرحله ۱: نصب بسته pip

pip install tflite-support

مرحله ۲: استفاده از مدل

# 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 به کد منبع مراجعه کنید.

اجرای استنتاج در ++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();

برای گزینه‌های بیشتر برای پیکربندی ImageSegmenter به کد منبع مراجعه کنید.

نتایج مثال

در اینجا مثالی از نتایج تقسیم‌بندی deeplab_v3 ، یک مدل تقسیم‌بندی عمومی موجود در 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.

ماسک دسته‌بندی تقسیم‌بندی باید به شکل زیر باشد:

خروجی قطعه‌بندی

ابزار نمایشی ساده CLI برای ImageSegmenter را با مدل و داده‌های آزمایشی خودتان امتحان کنید.

الزامات سازگاری مدل

رابط برنامه‌نویسی کاربردی ImageSegmenter انتظار یک مدل TFLite با فراداده‌های مدل TFLite اجباری را دارد. نمونه‌هایی از ایجاد فراداده برای قطعه‌بندهای تصویر با استفاده از API نویسنده فراداده TensorFlow Lite را ببینید.

  • تانسور تصویر ورودی (kTfLiteUInt8/kTfLiteFloat32)

    • ورودی تصویر با اندازه [batch x height x width x channels] .
    • استنتاج دسته‌ای پشتیبانی نمی‌شود ( batch باید ۱ باشد).
    • فقط ورودی‌های RGB پشتیبانی می‌شوند ( channels باید ۳ باشد).
    • اگر نوع kTfLiteFloat32 باشد، برای نرمال‌سازی ورودی، لازم است NormalizationOptions به فراداده‌ها متصل شود.
  • تانسور ماسک خروجی: (kTfLiteUInt8/kTfLiteFloat32)

    • تانسوری با اندازه [batch x mask_height x mask_width x num_classes] که در آن batch باید ۱ باشد، mask_width و mask_height ابعاد ماسک‌های تقسیم‌بندی تولید شده توسط مدل هستند و num_classes تعداد کلاس‌های پشتیبانی شده توسط مدل است.
    • نقشه(های) برچسب اختیاری (اما توصیه‌شده) می‌توانند به عنوان AssociatedFile-s با نوع TENSOR_AXIS_LABELS پیوست شوند که شامل یک برچسب در هر خط است. اولین AssociatedFile از این نوع (در صورت وجود) برای پر کردن فیلد label (که در C++ با نام class_name نامگذاری شده است) نتایج استفاده می‌شود. فیلد display_name از AssociatedFile (در صورت وجود) که زبان محلی آن با فیلد display_names_locale از ImageSegmenterOptions استفاده شده در زمان ایجاد ("en" به طور پیش‌فرض، یعنی انگلیسی) مطابقت دارد، پر می‌شود. اگر هیچ یک از این موارد در دسترس نباشد، فقط فیلد index نتایج پر خواهد شد.