ادغام آشکارسازهای شی

آشکارسازهای شیء می‌توانند تشخیص دهند که کدام یک از مجموعه اشیاء شناخته شده ممکن است وجود داشته باشند و اطلاعاتی در مورد موقعیت آنها در تصویر یا جریان ویدیویی ارائه دهند. یک آشکارساز شیء برای تشخیص حضور و مکان چندین کلاس از اشیاء آموزش داده می‌شود. به عنوان مثال، یک مدل ممکن است با تصاویری که حاوی قطعات مختلف میوه هستند، همراه با برچسبی که کلاس میوه‌ای را که نشان می‌دهند (مثلاً سیب، موز یا توت فرنگی) مشخص می‌کند، و داده‌هایی که مشخص می‌کنند هر شیء در کجای تصویر ظاهر می‌شود، آموزش داده شود. برای اطلاعات بیشتر در مورد آشکارسازهای شیء، به مثال تشخیص شیء مراجعه کنید.

از API مربوط به کتابخانه وظایف (Task Library ObjectDetector API) برای پیاده‌سازی آشکارسازهای شیء سفارشی یا آشکارسازهای از پیش آموزش‌دیده در برنامه‌های تلفن همراه خود استفاده کنید.

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

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

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

  • آستانه امتیاز برای فیلتر کردن نتایج.

  • نتایج تشخیص k برتر.

  • برچسب‌گذاری لیست مجاز و لیست ممنوع.

مدل‌های پشتیبانی‌شده‌ی آشکارساز شیء

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

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

برای مثالی از نحوه استفاده از ObjectDetector در یک برنامه اندروید، به برنامه مرجع تشخیص شیء مراجعه کنید.

مرحله ۱: وارد کردن وابستگی 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
ObjectDetectorOptions options =
    ObjectDetectorOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
ObjectDetector objectDetector =
    ObjectDetector.createFromFileAndOptions(
        context, modelFile, options);

// Run inference
List<Detection> results = objectDetector.detect(image);

برای گزینه‌های بیشتر برای پیکربندی ObjectDetector به کد منبع و 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: "ssd_mobilenet_v1",
                                            ofType: "tflite") else { return }

let options = ObjectDetectorOptions(modelPath: modelPath)

// Configure any additional options:
// options.classificationOptions.maxResults = 3

let detector = try ObjectDetector.detector(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: "cats_and_dogs.jpg"), let mlImage = MLImage(image: image) else { return }

// Run inference
let detectionResult = try detector.detect(mlImage: mlImage)

هدف-سی

// Imports
#import <TensorFlowLiteTaskVision/TensorFlowLiteTaskVision.h>

// Initialization
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"ssd_mobilenet_v1" ofType:@"tflite"];

TFLObjectDetectorOptions *options = [[TFLObjectDetectorOptions alloc] initWithModelPath:modelPath];

// Configure any additional options:
// options.classificationOptions.maxResults = 3;

TFLObjectDetector *detector = [TFLObjectDetector objectDetectorWithOptions:options
                                                                     error:nil];

// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"dogs.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
TFLDetectionResult *detectionResult = [detector detectWithGMLImage:gmlImage error:nil];

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

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

مرحله ۱: نصب بسته 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)
detection_options = processor.DetectionOptions(max_results=2)
options = vision.ObjectDetectorOptions(base_options=base_options, detection_options=detection_options)
detector = vision.ObjectDetector.create_from_options(options)

# Alternatively, you can create an object detector in the following manner:
# detector = vision.ObjectDetector.create_from_file(model_path)

# Run inference
image = vision.TensorImage.create_from_file(image_path)
detection_result = detector.detect(image)

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

اجرای استنتاج در ++C

// Initialization
ObjectDetectorOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ObjectDetector> object_detector = ObjectDetector::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 DetectionResult result = object_detector->Detect(*frame_buffer).value();

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

نتایج مثال

در اینجا مثالی از نتایج تشخیص ssd mobilenet v1 از TensorFlow Hub آورده شده است.

سگ‌ها

Results:
 Detection #0 (red):
  Box: (x: 355, y: 133, w: 190, h: 206)
  Top-1 class:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1 (green):
  Box: (x: 103, y: 15, w: 138, h: 369)
  Top-1 class:
   index       : 17
   score       : 0.73047
   class name  : dog

کادرهای مرزی را روی تصویر ورودی رندر کنید:

خروجی تشخیص

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

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

رابط برنامه‌نویسی کاربردی (API) ObjectDetector ) انتظار یک مدل TFLite با فراداده (Metadata) مدل TFLite اجباری را دارد. نمونه‌هایی از ایجاد فراداده برای آشکارسازهای شیء با استفاده از API نویسنده فراداده TensorFlow Lite را ببینید.

مدل‌های آشکارساز شیء سازگار باید الزامات زیر را برآورده کنند:

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

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

    • تانسور مکان‌ها (kTfLiteFloat32)
    • تانسوری با اندازه [1 x num_results x 4] ، آرایه داخلی که نشان‌دهنده جعبه‌های مرزی به شکل [بالا، چپ، راست، پایین] است.
    • لازم است BoundingBoxProperties به فراداده‌ها پیوست شوند و باید type=BOUNDARIES و `coordinate_type=RATIO` را مشخص کنند.
    • کلاس‌های تانسور (kTfLiteFloat32)

    • تانسوری با اندازه [1 x num_results] که هر مقدار نشان‌دهنده اندیس عدد صحیح یک کلاس است.

    • نقشه(های) برچسب اختیاری (اما توصیه‌شده) می‌توانند به عنوان AssociatedFile-s با نوع TENSOR_VALUE_LABELS پیوست شوند که شامل یک برچسب در هر خط است. به فایل برچسب نمونه مراجعه کنید. اولین AssociatedFile از این نوع (در صورت وجود) برای پر کردن فیلد class_name نتایج استفاده می‌شود. فیلد display_name از AssociatedFile (در صورت وجود) پر می‌شود که زبان محلی آن با فیلد display_names_locale از ObjectDetectorOptions استفاده شده در زمان ایجاد ("en" به طور پیش‌فرض، یعنی انگلیسی) مطابقت دارد. اگر هیچ یک از این موارد در دسترس نباشد، فقط فیلد index نتایج پر خواهد شد.

    • تانسور امتیازها (kTfLiteFloat32)

    • تانسوری با اندازه [1 x num_results] که هر مقدار نشان دهنده امتیاز شیء شناسایی شده است.

    • تعداد تانسور تشخیص (kTfLiteFloat32)

    • عدد صحیح num_results به عنوان یک تانسور با اندازه [1] .