שלב פילוחי תמונה

מחלקי תמונה מנבאים אם כל פיקסל של תמונה משויך למחלקה מסוימת. זאת בניגוד לזיהוי אובייקטים , שמזהה אובייקטים באזורים מלבניים, וסיווג תמונה , שמסווג את התמונה הכוללת. עיין בסקירת פילוח התמונות למידע נוסף על פילוחי תמונות.

השתמש ב-Task Library ImageSegmenter API כדי לפרוס את מפלחי התמונות המותאמים אישית שלך או כאלה שהוכשרו מראש באפליקציות לנייד שלך.

תכונות עיקריות של ImageSegmenter API

  • עיבוד תמונה של קלט, כולל סיבוב, שינוי גודל והמרת מרחב צבע.

  • תווית אזור מפה.

  • שני סוגי פלט, מסכת קטגוריה ומסכות ביטחון.

  • תווית צבעונית למטרת תצוגה.

דגמי פילוח תמונה נתמכים

מובטח שהדגמים הבאים יהיו תואמים ל- ImageSegmenter API.

הפעל הסקה ב-Java

עיין באפליקציית העזר של Image Segmentation לקבלת דוגמה לשימוש ImageSegmenter באפליקציית Android.

שלב 1: ייבא תלות Gradle והגדרות אחרות

העתק את קובץ מודל .tflite לספריית הנכסים של מודול האנדרואיד שבו המודל יופעל. ציין שאין לדחוס את הקובץ, והוסף את ספריית 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 (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'
}

שלב 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);

עיין בקוד המקור וב-javadoc לאפשרויות נוספות להגדרת ImageSegmenter .

הפעל מסקנות ב-iOS

שלב 1: התקן את התלות

ספריית המשימות תומכת בהתקנה באמצעות 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)

מטרה ג

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

הפעל מסקנות ב- Python

שלב 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 עם מודל ונתוני בדיקה משלך.

דרישות תאימות לדגם

ה-API ImageSegmenter מצפה למודל TFLite עם מטא נתונים חובה של מודל TFLite . ראה דוגמאות ליצירת מטא נתונים עבור מפלחי תמונות באמצעות TensorFlow Lite Metadata Writer API .

  • טנזור תמונה קלט (kTfLiteUInt8/kTfLiteFloat32)

    • קלט תמונה בגודל [batch x height x width x channels] .
    • הסקת אצווה אינה נתמכת ( batch נדרשת להיות 1).
    • רק כניסות RGB נתמכות ( channels נדרשים להיות 3).
    • אם הסוג הוא kTfLiteFloat32, יש צורך לצרף את אפשרויות הנורמליזציה למטא נתונים לצורך נורמליזציה של קלט.
  • טנזור מסכות פלט: (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 של התוצאות יתמלא.