使用 TensorFlow Lite 简化移动设备上的目标检测
2021 年 6 月 16 日

作者: Khanh LeViet,代表 TensorFlow Lite 团队的开发者倡导者

Example of object detection on mobile

今年的 Google I/O 大会上,我们很高兴地 宣布 几个产品更新,这些更新简化了在移动设备上训练和部署目标检测模型的过程

  • 设备上机器学习学习路径:一个逐步教程,教你如何在没有任何机器学习专业知识的情况下,在移动设备上训练和部署自定义目标检测模型。
  • EfficientDet-Lite:为移动设备优化的最先进的目标检测模型架构。
  • 用于 目标检测 的 TensorFlow Lite 模型制作工具:只需几行代码即可训练自定义模型。
  • TensorFlow Lite 元数据编写器 API:简化元数据创建,以生成与 TFLite 任务库 兼容的自定义目标检测模型。

尽管目标检测是一个非常常见的机器学习用例,但它可能是最难实现的用例之一。我们一直在努力使其变得更轻松,在这篇博文中,我们将向您展示如何利用 TensorFlow Lite 的最新产品来构建使用您自己领域数据的最先进的移动目标检测器。

设备上机器学习学习路径:了解如何在 12 分钟内训练和部署自定义 TensorFlow Lite 目标检测模型。

使用 TensorFlow Lite 训练自定义目标检测模型并将其部署到 Android 应用中变得非常容易。我们发布了一个学习路径,教你一步一步如何做到这一点。

在视频中,您可以了解构建自定义目标检测器的步骤

  1. 准备训练数据。
  2. 使用 TensorFlow Lite 模型制作工具训练自定义目标检测模型。
  3. 使用 TensorFlow Lite 任务库将模型部署到您的移动应用中。

还有一个 codelab,其中包含 GitHub 上的源代码,您可以亲自运行代码。请尝试一下并 告诉我们您的反馈!

EfficientDet-Lite:用于移动设备上的目标检测的最先进的模型架构

在移动设备上运行机器学习模型意味着我们始终需要考虑模型精度与推理速度和模型大小之间的权衡。最先进的移动优化模型不仅需要更精确,还需要运行更快,体积更小。我们调整了在 EfficientDet 论文中发布的神经架构搜索技术,然后优化了模型架构以在移动设备上运行,并提出了一种名为 EfficientDet-Lite 的新型移动目标检测模型系列。

EfficientDet-Lite 有 5 个不同的版本:Lite0 到 Lite4。较小的版本运行速度更快,但精度不如较大的版本。您可以尝试使用 EfficientNet-Lite 的多个版本,并选择最适合您的用例的版本。

模型架构

大小 (MB)*

延迟 (毫秒)**

平均精度***

EfficientDet-Lite0

4.4

37

25.69%

EfficientDet-Lite1

5.8

49

30.55%

EfficientDet-Lite2

7.2

69

33.97%

EfficientDet-Lite3

11.4

116

37.70%

EfficientDet-Lite4

19.9

260

41.96%

SSD MobileNetV2 320x320

6.7

24

20.2%

SSD MobileNetV2 FPNLite 640x640

4.3

191

28.2%

* 整数量化模型的大小。

** 在 Pixel 4 上使用 CPU 上的 4 个线程测量的延迟。

*** 平均精度是 COCO 2017 验证数据集上的 mAP(平均精度均值)。

我们已将经过 COCO 数据集训练的 EfficientDet-Lite 模型发布到 TensorFlow Hub。您也可以使用 TensorFlow Lite 模型制作工具使用自己的训练数据训练 EfficientDet-Lite 自定义模型。

TensorFlow Lite 模型制作工具:使用迁移学习在几行代码中训练自定义目标检测

TensorFlow Lite 模型制作工具 是一个 Python 库,它显著简化了使用自定义数据集训练机器学习模型的过程。它利用迁移学习,只需少量图像即可训练高质量模型。

模型制作工具接受 PASCAL VOC 格式和 Cloud AutoML 的 CSV 格式的数据集。由于您可以使用开源 GUI 工具(如 LabelImgmakesense.ai)创建自己的数据集,因此每个人都可以创建用于模型制作工具的训练数据,而无需编写任何代码。

拥有训练数据后,您可以开始训练 TensorFlow Lite 自定义目标检测器。

# Step 1: Choose the model architecture
spec = model_spec.get('efficientdet_lite2')

# Step 2: Load your training data
train_data, validation_data, test_data = object_detector.DataLoader.from_csv('gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv')

# Step 3: Train a custom object detector
model = object_detector.create(train_data, model_spec=spec, validation_data=validation_data)

# Step 4: Export the model in the TensorFlow Lite format
model.export(export_dir='.')

# Step 5: Evaluate the TensorFlow Lite model
model.evaluate_tflite('model.tflite', test_data)

查看此 笔记本 了解更多信息。

TensorFlow Lite 任务库:在几行代码中将目标检测模型部署到移动设备

TensorFlow Lite 任务库 是一个跨平台库,它简化了 TensorFlow Lite 模型在移动设备上的部署。使用 TensorFlow Lite 模型制作工具训练的自定义目标检测模型只需几行 Kotlin 代码即可部署到 Android 应用中

// Step 1: Load the TensorFlow Lite model
val detector = ObjectDetector.createFromFile(context, "model.tflite")

// Step 2: Convert the input Bitmap into a TensorFlow Lite's TensorImage object
val image = TensorImage.fromBitmap(bitmap)

// Step 3: Feed given image to the model and get the detection result
val results = detector.detect(image)

查看我们的 文档,详细了解任务库中的自定义选项,包括如何配置最小检测阈值或最大检测目标数量。

TensorFlow Lite 元数据编写器 API:简化使用 TensorFlow 目标检测 API 训练的自定义模型的部署

任务库依赖于捆绑在 TensorFlow Lite 模型中的 模型元数据 来执行运行推理所需的预处理和后处理逻辑。它们包括如何规范化输入图像,或如何将类 ID 映射到人类可读的标签。使用模型制作工具训练的模型默认情况下具有这些元数据,使其与任务库兼容。但是,如果您使用除模型制作工具之外的训练管道训练 TensorFlow Lite 目标检测模型,则可以使用 TensorFlow Lite 元数据编写器 API 添加元数据。

例如,如果您使用 TensorFlow 目标检测 API 训练模型,则可以使用此 Python 代码将元数据添加到 TensorFlow Lite 模型中

LABEL_PATH = 'label_map.txt'
MODEL_PATH = "ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/model.tflite"
SAVE_TO_PATH = "ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/model_with_metadata.tflite"

# Step 1: Specify the preprocessing parameters and label file
writer = object_detector.MetadataWriter.create_for_inference(
    writer_utils.load_file(MODEL_PATH), input_norm_mean=[0],
    input_norm_std=[255], label_file_paths=[LABEL_PATH])

# Step 2: Export the model with metadata
writer_utils.save_file(writer.populate(), SAVE_TO_PATH)

在这里,我们指定规范化参数 (input_norm_mean=[0], input_norm_std=[255]),以便输入图像将被 规范化 到 [0..1] 范围内。您需要指定与模型训练期间使用的预处理逻辑相同的规范化参数。

查看此 笔记本,了解如何将使用 TensorFlow 目标检测 API 训练的模型转换为 TensorFlow Lite 并添加元数据的完整教程。

下一步

我们的目标是使机器学习更容易被每个开发者使用,无论他们是否拥有机器学习专业知识。我们正在与 模型花园 团队合作,将更多目标检测模型架构引入模型制作工具。我们还将继续与谷歌的研究人员合作,通过模型制作工具提供未来的最先进的目标检测模型,缩短从尖端研究到生产的路径,惠及所有人。敬请关注更多更新!

下一篇文章
Easier object detection on mobile with TensorFlow Lite

作者: Khanh LeViet,代表 TensorFlow Lite 团队的开发者倡导者 今年的 Google I/O 大会上,我们很高兴地 宣布 几个产品更新,这些更新简化了在移动设备上训练和部署目标检测模型的过程:设备上机器学习学习路径:一个逐步教程,教你如何在没有任何机器学习专业知识的情况下,在移动设备上训练和部署自定义目标检测模型……