TensorFlow Lite 任务库包含一组功能强大且易于使用的特定于任务的库,供应用程序开发人员使用 TFLite 创建 ML 体验。它为流行的机器学习任务(如图像分类、问答等)提供优化的开箱即用模型接口。模型接口专为每个任务而设计,以实现最佳性能和可用性。任务库跨平台工作,并在 Java、C++ 和 Swift 上受支持。
对任务库的期望
非 ML 专家可用的简洁且定义明确的 API
推断只需 5 行代码即可完成。使用任务库中功能强大且易于使用的 API 作为构建块,帮助您轻松地在移动设备上使用 TFLite 开发 ML。复杂但常见的数据处理
支持常见的视觉和自然语言处理逻辑,在您的数据和模型所需的数据格式之间进行转换。为训练和推断提供相同且可共享的处理逻辑。高性能提升
数据处理只需几毫秒,确保使用 TensorFlow Lite 的快速推断体验。可扩展性和自定义
您可以利用任务库基础设施提供的所有优势,轻松构建自己的 Android/iOS 推断 API。
支持的任务
以下是支持的任务类型的列表。随着我们继续启用越来越多的用例,该列表预计会不断增长。
视觉 API
自然语言 (NL) API
音频 API
自定义 API
- 扩展任务 API 基础设施并构建 自定义 API。
使用委托运行任务库
委托 通过利用设备上的加速器(如 GPU 和 Coral Edge TPU)来实现 TensorFlow Lite 模型的硬件加速。将它们用于神经网络操作在延迟和功耗效率方面提供了巨大的优势。例如,GPU 可以将移动设备上的延迟提高 5 倍,而 Coral Edge TPU 的推断速度比台式机 CPU 快 10 倍。
任务库为您提供了轻松的配置和回退选项,以便您设置和使用委托。以下加速器现在在任务 API 中受支持
- Android
- Linux / Mac
- Coral Edge TPU: C++
- iOS
- Core ML 委托: C++
任务 Swift/Web API 中的加速支持即将推出。
Android 上 Java 中 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. 通过 BaseOptions 在任务选项中配置 GPU 委托。例如,您可以在 ObjectDetector
中设置 GPU,如下所示
// 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);
Android 上 C++ 中 GPU 的示例用法
步骤 1. 在您的 bazel 构建目标中依赖 GPU 委托插件,例如
deps = [
"//tensorflow_lite_support/acceleration/configuration:gpu_plugin", # for GPU
]
其他委托选项包括
"//tensorflow_lite_support/acceleration/configuration:nnapi_plugin", # for NNAPI
"//tensorflow_lite_support/acceleration/configuration:hexagon_plugin", # for Hexagon
步骤 2. 在任务选项中配置 GPU 代理。例如,您可以在 BertQuestionAnswerer
中设置 GPU,如下所示
// 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。例如,您可以在 ImageClassifier
中设置 Coral Edge TPU,如下所示
# 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. 在您的 bazel 构建目标中依赖 Coral Edge TPU 代理插件,例如
deps = [
"//tensorflow_lite_support/acceleration/configuration:edgetpu_coral_plugin", # for Coral Edge TPU
]
步骤 2. 在任务选项中配置 Coral Edge TPU。例如,您可以在 ImageClassifier
中设置 Coral Edge TPU,如下所示
// 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.
使用您的 Coral Edge TPU 设备试用 任务库 CLI 演示工具。探索更多关于 预训练的 Edge TPU 模型 和 高级 Edge TPU 设置。
Core ML 代理在 C++ 中的示例用法
完整的示例可以在 图像分类器 Core ML 代理测试 中找到。
步骤 1. 在您的 bazel 构建目标中依赖 Core ML 代理插件,例如
deps = [
"//tensorflow_lite_support/acceleration/configuration:coreml_plugin", # for Core ML Delegate
]
步骤 2. 在任务选项中配置 Core ML 代理。例如,您可以在 ImageClassifier
中设置 Core ML 代理,如下所示
// 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();