ספריית המשימות של TensorFlow Lite

ספריית המשימות של TensorFlow Lite מכילה אוסף של משימות עוצמתיות וקלות לשימוש ספריות ספציפיות למשימה שבהן מפתחי אפליקציות יכולים ליצור חוויות למידת מכונה באמצעות TFLite. הוא מספק ממשקים של מודלים מוכנים לשימוש בלמידת מכונה פופולרית. משימות שונות, כמו סיווג תמונות, שאלה ותשובה וכו'. ממשקים שמיועדים באופן ספציפי לכל משימה כדי להשיג ביצועים ונוחות השימוש. ספריית המשימות פועלת בפלטפורמות שונות ונתמכת ב- Java, C++ ו-Swift.

מה אפשר לעשות מספריית המשימות

  • ממשקי API נקיים ומוגדרים היטב שמומחים שאינם מומחים ללמידת מכונה יכולים להשתמש בהם
    אפשר להסיק מסקנות תוך 5 שורות קוד בלבד. להשתמש בתכונות העוצמתיות ממשקי API קלים לשימוש בספריית המשימות כאבני בניין לפתח למידת מכונה עם TFLite במכשירים ניידים.

  • עיבוד נתונים מורכב אבל נפוץ
    תומכת בלוגיקה נפוצה של עיבוד ראייה ועיבוד שפה טבעית (NLP) להמרה בין הנתונים שלכם לפורמט הנתונים שנדרש על ידי המודל. מספקת לוגיקת עיבוד זהה וניתנת לשיתוף לצורך אימון והסקת מסקנות.

  • שיפור בביצועים גבוה
    עיבוד הנתונים לא יימשך יותר מכמה אלפיות שנייה, כדי להבטיח חוויית הסקת מסקנות מהירה באמצעות TensorFlow Lite.

  • תוסף והתאמה אישית
    תוכלו לנצל את כל היתרונות שהתשתית של ספריית המשימות מספקת לפתח בקלות ממשקי API משלכם להסקת מסקנות ל-Android/iOS.

משימות נתמכות

בהמשך מופיעה רשימה של סוגי המשימות הנתמכים. הרשימה צפויה לגדול ככל אנחנו ממשיכים להפעיל עוד ועוד תרחישים לדוגמה.

הפעלה של ספריית המשימות עם משתמשים שיש להם גישה

משתמשים שקיבלו הרשאה מפעילים את שיפור המהירות באמצעות חומרה מודלים של TensorFlow Lite באמצעות מינוף מאיצים במכשיר כמו GPU ו-Coral Edge TPU. השימוש מבחינת התפעול של רשת נוירונים, מספק יתרונות עצומים מבחינת זמן אחזור ויעילות אנרגטית. לדוגמה, מעבדי GPU יכולים לספק עד 5x הגברת מהירות בזמן אחזור במכשירים ניידים, והסקת מסקנות ממעבדי TPU של Coral Edge פי 10 מהר יותר ממעבדים במחשבים.

ספריית המשימות מספקת הגדרות אישיות בקלות ואפשרויות חזרה ומשתמשים בנציגים. המאיצים הבאים נתמכים עכשיו ב-Tasks API:

בקרוב תהיה תמיכה בשיפור המהירות ב- Task Swift / Web API.

שימוש לדוגמה ב-GPU ב-Android ב-Java

שלב 1. הוספת ספריית יישומי הפלאגין להאציל את GPU ל-build.gradle של המודול שלך file:

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 ב-Android ב-C++

שלב 1. תלויים בפלאגין הקצאת הגישה ל-GPU ביעד ה-build של 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 ב-Python

הגדרת 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 ביעד ה-build של 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.

כדאי לנסות את הדגמה של ספריית המשימות ב-CLI כלי במכשירי ה-TPU של Coral Edge. למידע נוסף על מכשיר Edge TPU שעבר אימון מראש דגמים מתקדמים ו-Edge TPU מתקדם הגדרות.

שימוש לדוגמה בגישה ל-Core ML ב-C++

דוגמה מלאה אפשר למצוא ב-Image Classifier Core ML Delegate בדיקה.

שלב 1. תלויים בפלאגין הקצאת הגישה ל-Core ML ביעד ה-build של bazel, כמו כ:

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

שלב 2. הגדרת הקצאת הרשאות ל-Core ML באפשרויות המשימה. לדוגמה, אפשר להגדיר הענקת גישה ל-Core ML ב-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();