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

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

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

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

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

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

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

  • نتایج تشخیص Top-k

  • لیست مجاز و رد لیست را برچسب بزنید.

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

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

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

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

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

استنتاج را در 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: "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)

هدف-C

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

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

مرحله 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)
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 با مدل و داده های آزمایشی خود امتحان کنید.

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

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

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

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

    • اندازه ورودی تصویر [batch x height x width x channels] .
    • استنتاج دسته ای پشتیبانی نمی شود ( batch باید 1 باشد).
    • فقط ورودی های RGB پشتیبانی می شوند ( channels باید 3 باشند).
    • اگر نوع 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] .