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

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

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

ویژگی های کلیدی ImageSegmenter API

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

  • محل نقشه را برچسب بزنید.

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

  • برچسب رنگی برای هدف نمایش

مدل های قطعه ساز تصویر پشتیبانی شده

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

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

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

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

فایل مدل .tflite را در فهرست دارایی‌های ماژول Android که در آن مدل اجرا می‌شود، کپی کنید. مشخص کنید که فایل نباید فشرده شود و کتابخانه 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'
}

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

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

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

مرحله 1: وابستگی ها را نصب کنید

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

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

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

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

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

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

سویفت

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

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

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

مرحله 1: بسته pip را نصب کنید

pip install tflite-support

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

# 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 API انتظار یک مدل TFLite با فراداده مدل TFLite اجباری را دارد. نمونه‌هایی از ایجاد ابرداده برای قطعه‌کننده‌های تصویر با استفاده از TensorFlow Lite Metadata Writer API را ببینید.

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

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

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