کتابخانه وظیفه TensorFlow Lite

TensorFlow Lite Task Library شامل مجموعه‌ای از کتابخانه‌های قدرتمند و با کاربرد آسان برای توسعه‌دهندگان برنامه برای ایجاد تجربیات ML با TFLite است. این رابط‌های مدل خارج از جعبه بهینه‌سازی شده را برای کارهای معروف یادگیری ماشین، مانند طبقه‌بندی تصویر، پرسش و پاسخ، و غیره فراهم می‌کند. رابط‌های مدل به‌طور خاص برای هر کار طراحی شده‌اند تا به بهترین عملکرد و قابلیت استفاده دست یابند. Task Library بر روی پلتفرم کار می کند و در جاوا، C++ و Swift پشتیبانی می شود.

از Task Library چه انتظاری باید داشت

  • APIهای تمیز و کاملاً تعریف شده قابل استفاده توسط افراد غیرمتخصص ML
    استنتاج را می توان تنها در 5 خط کد انجام داد. از APIهای قدرتمند و با کاربرد آسان در کتابخانه Task به عنوان بلوک های سازنده استفاده کنید تا به شما کمک کند به راحتی ML را با TFLite در دستگاه های تلفن همراه توسعه دهید.

  • پردازش داده های پیچیده اما رایج
    از منطق پردازش بینایی مشترک و زبان طبیعی برای تبدیل بین داده های شما و فرمت داده مورد نیاز مدل پشتیبانی می کند. همان منطق پردازش قابل اشتراک گذاری را برای آموزش و استنتاج ارائه می دهد.

  • افزایش عملکرد بالا
    پردازش داده‌ها بیش از چند میلی‌ثانیه طول نمی‌کشد و تجربه استنتاج سریع با استفاده از TensorFlow Lite را تضمین می‌کند.

  • توسعه پذیری و سفارشی سازی
    شما می توانید از تمام مزایای زیرساخت Task Library که به شما ارائه می دهد استفاده کنید و به راحتی API های استنتاج Android/iOS خود را بسازید.

وظایف پشتیبانی شده

در زیر لیستی از انواع وظایف پشتیبانی شده است. با ادامه فعال کردن موارد استفاده بیشتر و بیشتر، انتظار می‌رود این فهرست رشد کند.

Task Library را با نمایندگان اجرا کنید

نمایندگان، شتاب سخت‌افزاری مدل‌های TensorFlow Lite را با استفاده از شتاب‌دهنده‌های روی دستگاه مانند GPU و Coral Edge TPU فعال می‌کنند. استفاده از آنها برای عملیات شبکه عصبی مزایای زیادی از نظر تأخیر و بهره وری توان به همراه دارد. برای مثال، پردازنده‌های گرافیکی می‌توانند تا 5 برابر سرعت تأخیر را در دستگاه‌های تلفن همراه ارائه دهند و TPU‌های Coral Edge 10 برابر سریع‌تر از CPU‌های رومیزی استنتاج می‌کنند.

Task Library پیکربندی آسان و گزینه های بازگشتی را برای شما فراهم می کند تا بتوانید نمایندگان را تنظیم و استفاده کنید. شتاب دهنده های زیر اکنون در Task API پشتیبانی می شوند:

پشتیبانی از شتاب در Task Swift / Web API به زودی ارائه می شود.

مثال استفاده از GPU در اندروید در جاوا

مرحله 1. کتابخانه پلاگین نماینده GPU را به فایل build.gradle ماژول خود اضافه کنید:

dependencies {
    // Import Task Library dependency for vision, text, or audio.

    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

مرحله 2. نماینده GPU را در گزینه های وظیفه از طریق BaseOptions پیکربندی کنید. به عنوان مثال، می توانید GPU را در ObjectDetector به صورت زیر تنظیم کنید:

// Turn on GPU delegation.
BaseOptions baseOptions = BaseOptions.builder().useGpu().build();
// Configure other options in ObjectDetector
ObjectDetectorOptions options =
    ObjectDetectorOptions.builder()
        .setBaseOptions(baseOptions)
        .setMaxResults(1)
        .build();

// Create ObjectDetector from options.
ObjectDetector objectDetector =
    ObjectDetector.createFromFileAndOptions(context, modelFile, options);

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

مثال استفاده از GPU در اندروید در C++

مرحله 1. به پلاگین نماینده GPU در هدف ساخت bazel خود، مانند:

deps = [
  "//tensorflow_lite_support/acceleration/configuration:gpu_plugin", # for GPU
]

مرحله 2. نماینده GPU را در گزینه های وظیفه پیکربندی کنید. به عنوان مثال، می توانید GPU را در BertQuestionAnswerer به صورت زیر تنظیم کنید:

// Initialization
BertQuestionAnswererOptions options;
// Load the TFLite model.
auto base_options = options.mutable_base_options();
base_options->mutable_model_file()->set_file_name(model_file);
// Turn on GPU delegation.
auto tflite_settings = base_options->mutable_compute_settings()->mutable_tflite_settings();
tflite_settings->set_delegate(Delegate::GPU);
// (optional) Turn on automatical fallback to TFLite CPU path on delegation errors.
tflite_settings->mutable_fallback_settings()->set_allow_automatic_fallback_on_execution_error(true);

// Create QuestionAnswerer from options.
std::unique_ptr<QuestionAnswerer> answerer = BertQuestionAnswerer::CreateFromOptions(options).value();

// Run inference on GPU.
std::vector<QaAnswer> results = answerer->Answer(context_of_question, question_to_ask);

تنظیمات پیشرفته‌تر شتاب‌دهنده را در اینجا کاوش کنید.

مثال استفاده از Coral Edge TPU در پایتون

Coral Edge TPU را در گزینه های پایه کار پیکربندی کنید. به عنوان مثال، می توانید Coral Edge TPU را در ImageClassifier به صورت زیر تنظیم کنید:

# Imports
from tflite_support.task import vision
from tflite_support.task import core

# Initialize options and turn on Coral Edge TPU delegation.
base_options = core.BaseOptions(file_name=model_path, use_coral=True)
options = vision.ImageClassifierOptions(base_options=base_options)

# Create ImageClassifier from options.
classifier = vision.ImageClassifier.create_from_options(options)

# Run inference on Coral Edge TPU.
image = vision.TensorImage.create_from_file(image_path)
classification_result = classifier.classify(image)

مثال استفاده از Coral Edge TPU در C++

مرحله 1. به پلاگین نماینده Coral Edge TPU در هدف ساخت bazel خود، مانند:

deps = [
  "//tensorflow_lite_support/acceleration/configuration:edgetpu_coral_plugin", # for Coral Edge TPU
]

مرحله 2. Coral Edge TPU را در گزینه های وظیفه پیکربندی کنید. به عنوان مثال، می توانید Coral Edge TPU را در ImageClassifier به صورت زیر تنظیم کنید:

// Initialization
ImageClassifierOptions options;
// Load the TFLite model.
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
// Turn on Coral Edge TPU delegation.
options.mutable_base_options()->mutable_compute_settings()->mutable_tflite_settings()->set_delegate(Delegate::EDGETPU_CORAL);
// Create ImageClassifier from options.
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::CreateFromOptions(options).value();

// Run inference on Coral Edge TPU.
const ClassificationResult result = image_classifier->Classify(*frame_buffer).value();

مرحله 3. بسته libusb-1.0-0-dev را مانند زیر نصب کنید. اگر قبلاً نصب شده است، به مرحله بعدی بروید.

# On the Linux
sudo apt-get install libusb-1.0-0-dev

# On the macOS
port install libusb
# or
brew install libusb

مرحله 4. با تنظیمات زیر در دستور bazel خود کامپایل کنید:

# On the Linux
--define darwinn_portable=1 --linkopt=-lusb-1.0

# On the macOS, add '--linkopt=-lusb-1.0 --linkopt=-L/opt/local/lib/' if you are
# using MacPorts or '--linkopt=-lusb-1.0 --linkopt=-L/opt/homebrew/lib' if you
# are using Homebrew.
--define darwinn_portable=1 --linkopt=-L/opt/local/lib/ --linkopt=-lusb-1.0

# Windows is not supported yet.

ابزار آزمایشی Task Library CLI را با دستگاه های Coral Edge TPU خود امتحان کنید. در مورد مدل های Edge TPU از پیش آموزش دیده و تنظیمات پیشرفته Edge TPU بیشتر کاوش کنید.

مثال استفاده از Core ML Delegate در C++

یک مثال کامل را می توان در Image Classifier Core ML Delegate Test یافت.

مرحله 1. به افزونه Core ML delegate در هدف ساخت bazel خود، مانند:

deps = [
  "//tensorflow_lite_support/acceleration/configuration:coreml_plugin", # for Core ML Delegate
]

مرحله 2. Core ML Delegate را در گزینه های وظیفه پیکربندی کنید. به عنوان مثال، می توانید Core ML Delegate را در ImageClassifier به صورت زیر تنظیم کنید:

// Initialization
ImageClassifierOptions options;
// Load the TFLite model.
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
// Turn on Core ML delegation.
options.mutable_base_options()->mutable_compute_settings()->mutable_tflite_settings()->set_delegate(::tflite::proto::Delegate::CORE_ML);
// Set DEVICES_ALL to enable Core ML delegation on any device (in contrast to
// DEVICES_WITH_NEURAL_ENGINE which creates Core ML delegate only on devices
// with Apple Neural Engine).
options.mutable_base_options()->mutable_compute_settings()->mutable_tflite_settings()->mutable_coreml_settings()->set_enabled_devices(::tflite::proto::CoreMLSettings::DEVICES_ALL);
// Create ImageClassifier from options.
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::CreateFromOptions(options).value();

// Run inference on Core ML.
const ClassificationResult result = image_classifier->Classify(*frame_buffer).value();