0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在移动设备上训练和部署自定义目标检测模型

硬件三人行 来源:TensorFlow 作者: Khanh LeVie 2021-08-16 17:09 次阅读

发布人:技术推广工程师 Khanh LeViet,代表 TensorFlow Lite 团队

在今年的 Google I/O 大会上,我们很高兴地宣布推出了多项产品更新。这些更新可以帮助简化移动设备上,目标检测模型的训练和部署的过程:

设备端 ML 学习路径:关于如何在移动设备上,训练和部署自定义目标检测模型的分步教程,无需机器学习专业知识。

设备端 ML 学习路径

https://developers.google.com/learn/pathways/going-further-object-detection

EfficientDet-Lite:针对移动设备优化的精尖目标检测模型架构。

EfficientDet-Lite

https://hub.tensorflow.google.cn/s?deployment-format=lite&q=efficientdet-lite

用于目标检测的 TensorFlow Lite Model Maker:只需几行代码即可训练自定义模型

目标检测

http://tensorflow.google.cn/lite/tutorials/model_maker_object_detection

TensorFlow Lite Metadata Writer API:简化元数据创建以生成与 TFLite Task Library 兼容的自定义目标检测模型。

Metadata Writer API

http://tensorflow.google.cn/lite/convert/metadata_writer_tutorial

TFLite Task Library

http://tensorflow.google.cn/lite/inference_with_metadata/task_library/object_detector

尽管目标检测是非常常见的 ML 用例,但可能也是最难执行的用例之一。我们一直致力于为您简化相关操作。在这篇文章中,我们将向您介绍如何利用 TensorFlow Lite 的最新产品、通过使用您自己的训练数据构建最先进的移动端目标检测。

设备端 ML 学习路径:

在 12 分钟内了解如何训练和部署自定义 TensorFlow Lite 目标检测模型

有了 TensorFlow Lite,训练自定义目标检测模型并将其部署到 Android 应用变得非常容易。我们已经发布了学习路径,可指导您按步骤顺利完成相关操作。

您可以通过视频了解构建自定义目标检测器的具体步骤:

1. 准备训练数据。

2. 使用 TensorFlow Lite Model Maker 训练自定义目标检测模型。

3. 使用 TensorFlow Lite Task Library 在您的移动应用上部署模型。

我们还在 GitHub 上提供了带有源代码的 Codelab,供您自行试运行代码。请尝试一下,并告诉我们您的反馈!

Codelab

https://codelabs.developers.google.com/tflite-object-detection-android

告诉我们

https://github.com/googlecodelabs/odml-pathways/issues

EfficientDet-Lite:

移动端设备目标检测最优模型架构之一

在移动设备上运行机器学习模型意味着我们始终需要在模型精度、推理速度和模型大小之间进行权衡。最优的移动端模型不仅需要更加精准,还需要更快地运行速度和更小的体积。我们采用了 EfficientDet 论文中发布的神经架构搜索技术,并优化了在移动设备上运行的模型架构,最终推出了名为 EfficientDet-Lite 的新型移动设备目标检测模型系列。

EfficientDet

https://arxiv.org/abs/1911.09070

EfficientDet-Lite 有 5 个不同的版本:从 Lite0 到 Lite4。较小的版本运行速度更快,而较大的版本精度更高。您可以先用多个版本的 EfficientNet-Lite 进行试验,然后选择最适合您用例的版本。

* 整型量化模型的大小

** 在 Pixel 4 上使用 4 个 CPU 线程测量得出的延迟时间

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

我们已将在 COCO 数据集上训练的 EfficientDet-Lite 模型发布到 TensorFlow Hub。您还可以使用自己的训练数据,通过 TensorFlow Lite Model Maker 训练 EfficientDet-Lite 自定义模型。

TensorFlow Hub

https://hub.tensorflow.google.cn/s?q=efficientdet/lite

TensorFlow Lite Model Maker:几行代码使用迁移学习训练自定义目标检测模型

TensorFlow Lite Model Maker 是 Python 库,可显著简化使用自定义数据集训练机器学习模型的过程。该库利用迁移学习,仅使用少量图像即可训练高质量模型。

TensorFlow Lite Model Maker

http://tensorflow.google.cn/lite/guide/model_maker

Model Maker 接受 PASCAL VOC 格式和 Cloud AutoML 的 CSV 格式的数据集。和使用 LabelImg 或 makesense.ai 等开源 GUI 工具创建自己的数据集一样,每位开发者都可以创建用于 Model Maker 的训练数据,且无需编写任何代码。

CSV

https://cloud.google.com/vision/automl/object-detection/docs/csv-format

LabelImg

https://github.com/tzutalin/labelImg

makesense.ai

https://github.com/SkalskiP/make-sense

获得训练数据后,您就可以开始训练自定义的 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)

查看此 Codelab 了解详情。

Codelab

http://tensorflow.google.cn/lite/tutorials/model_maker_object_detection

TensorFlow Lite Task Library:使用几行代码在移动设备上部署目标检测模型

TensorFlow Lite Task Library 是跨平台库,它简化了 TensorFlow Lite 模型在移动设备上的部署。使用 TensorFlow Lite Model Maker 训练的自定义目标检测模型只需使用几行 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)

您可参阅一下文档,了解有关 Task Library 中,包括如何配置最小检测阈值或最大检测对象数量等更多自定义选项信息

文档

https://tensorflow.google.cn/lite/inference_with_metadata/task_library/object_detector

TensorFlow Lite Metadata Writer API:

用于简化使用 TensorFlow Object Detection API 训练的自定义模型的部署

Task Library 依赖 TensorFlow Lite 模型中捆绑的模型元数据来执行必要的预处理和后处理逻辑,以便使用该模型来运行推理。这其中包括如何将输入图像归一化,或如何将类 ID 映射到可人工读取的标签。因为使用 Model Maker 训练的模型会默认包含此类元数据,所以它能够与 Task Library 兼容。但是,如果您使用除 Model Maker 以外的训练流水线,来训练 TensorFlow Lite 目标检测,则可以使用 TensorFlow Lite Metadata Writer API 来添加元数据。

模型元数据

https://tensorflow.google.cn/lite/convert/metadata

例如,如果您使用 TensorFlow Object Detection 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] 范围内。您需要指定与模型训练期间使用的预处理逻辑中相同的归一化参数。

归一化

http://tensorflow.google.cn/lite/convert/metadata#normalization_and_quantization_parameters

参阅此 Colab,获取有关如何将使用 TensorFlow Object Detection API 训练的模型转换为 TensorFlow Lite 模型并添加元数据的完整教程。

Colab

https://colab.research.google.com/github/tensorflow/models/blob/master/research/object_detection/colab_tutorials/convert_odt_model_to_TFLite.ipynb

未来计划

我们的目标是让每位开发者(无论是否具备机器学习专业知识)都能更轻松使用机器学习。目前,我们正在与 TF Model Garden 团队合作,希望推出更多适用于 Model Maker 的目标检测模型架构。

未来,我们还将继续与 Google 研究人员合作,通过 Model Maker 提供更多面向未来的更优秀的目标检测模型,缩短从前沿研究到投入实际应用并且供所有开发者使用的整个流程。敬请关注更多动态!

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Google
    +关注

    关注

    5

    文章

    1752

    浏览量

    57357
  • ML
    ML
    +关注

    关注

    0

    文章

    144

    浏览量

    34573
  • 目标检测
    +关注

    关注

    0

    文章

    200

    浏览量

    15578
  • GitHub
    +关注

    关注

    3

    文章

    465

    浏览量

    16352

原文标题:使用 TensorFlow Lite 简化移动端目标检测

文章出处:【微信号:yingjiansanrenxing,微信公众号:硬件三人行】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    创建自定义的基于闪存的引导加载程序(BSL)

    电子发烧友网站提供《创建自定义的基于闪存的引导加载程序(BSL).pdf》资料免费下载
    发表于 09-19 10:50 0次下载
    创建<b class='flag-5'>自定义</b>的基于闪存的引导加载程序(BSL)

    NVIDIA NeMo加速并简化自定义模型开发

    如果企业希望充分发挥出 AI 的力量,就需要根据其行业需求量身定制的自定义模型
    的头像 发表于 07-26 11:17 649次阅读
    NVIDIA NeMo加速并简化<b class='flag-5'>自定义</b><b class='flag-5'>模型</b>开发

    NVIDIA AI Foundry 为全球企业打造自定义 Llama 3.1 生成式 AI 模型

    Foundry 提供从数据策管、合成数据生成、微调、检索、防护到评估的全方位生成式 AI 模型服务,以便部署自定义 Llama 3.1 NVIDIA NIM 微服务和新的 NVIDIA NeMo
    发表于 07-24 09:39 669次阅读
    NVIDIA AI Foundry 为全球企业打造<b class='flag-5'>自定义</b> Llama 3.1 生成式 AI <b class='flag-5'>模型</b>

    何在IDF框架中使用自定义的静态库和动态库?

    基于商业需要,我们需要在 ESP-IDF v4.0-rc 这个版本的IDF中开发与使用自定义库,有如下问题请协助: 1如何利用IDF框架编写自定义静态库和动态库? 2如何在IDF框架中使用自定
    发表于 06-25 07:57

    TSMaster 自定义 LIN 调度表编程指导

    LIN(LocalInterconnectNetwork)协议调度表是用于LIN总线通信中的消息调度的一种机制,我们收到越来越多来自不同用户希望能够通过接口实现自定义LIN调度表的需求。所以在
    的头像 发表于 05-11 08:21 554次阅读
    TSMaster <b class='flag-5'>自定义</b> LIN 调度表编程指导

    maixcam部署yolov5s 自定义模型

    maixcam部署yolov5s 自定义模型 本博客将向你展示零基础一步步的部署好自己的yolov5s模型(博主展示的是安全帽
    发表于 04-23 15:43

    HarmonyOS开发实例:【自定义Emitter】

    使用[Emitter]实现事件的订阅和发布,使用[自定义弹窗]设置广告信息。
    的头像 发表于 04-14 11:37 945次阅读
    HarmonyOS开发实例:【<b class='flag-5'>自定义</b>Emitter】

    鸿蒙ArkUI实例:【自定义组件】

    组件是 OpenHarmony 页面最小显示单元,一个页面可由多个组件组合而成,也可只由一个组件组合而成,这些组件可以是ArkUI开发框架自带系统组件,比如 `Text` 、 `Button` 等,也可以是自定义组件,本节笔者简单介绍一下自定义组件的语法规范。
    的头像 发表于 04-08 10:17 572次阅读

    基于YOLOv8实现自定义姿态评估模型训练

    Hello大家好,今天给大家分享一下如何基于YOLOv8姿态评估模型,实现在自定义数据集,完成自定义姿态评估模型
    的头像 发表于 12-25 11:29 2721次阅读
    基于YOLOv8实现<b class='flag-5'>自定义</b>姿态评估<b class='flag-5'>模型</b><b class='flag-5'>训练</b>

    如何基于深度学习模型训练实现工件切割点位置预测

    Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现工件切割点位置预测,主要是通过对YOLOv8姿态评估模型自定义的数据集
    的头像 发表于 12-22 11:07 715次阅读
    如何基于深度学习<b class='flag-5'>模型</b><b class='flag-5'>训练</b>实现工件切割点位置预测

    如何基于深度学习模型训练实现圆检测与圆心位置预测

    Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现圆检测与圆心位置预测,主要是通过对YOLOv8姿态评估模型自定义的数据集
    的头像 发表于 12-21 10:50 1656次阅读
    如何基于深度学习<b class='flag-5'>模型</b><b class='flag-5'>训练</b>实现圆<b class='flag-5'>检测</b>与圆心位置预测

    基于YOLOv8的自定义医学图像分割

    YOLOv8是一种令人惊叹的分割模型;它易于训练、测试和部署。在本教程中,我们将学习如何在自定义数据集
    的头像 发表于 12-20 10:51 700次阅读
    基于YOLOv8的<b class='flag-5'>自定义</b>医学图像分割

    【飞腾派4G版免费试用】第三章:抓取图像,手动标注并完成自定义目标检测模型训练和测试

    抓取图像,手动标注并完成自定义目标检测模型训练和测试 在第二章中,我介绍了模型
    发表于 12-16 10:05

    NVIDIA 加快企业自定义生成式 AI 模型开发

    的业务数据进行自定义。 如今,免费、开源的大语言模型对企业来说就像是一顿“自助餐”。但对于构建自定义生成式 AI 应用的开发者来说,这顿“大餐”可能会让他们应接不暇,因为他们需要满足各种不同的项目和业务
    的头像 发表于 11-16 21:15 538次阅读
    NVIDIA 加快企业<b class='flag-5'>自定义</b>生成式 AI <b class='flag-5'>模型</b>开发

    何在Matlab中自定义Message

    自定义Message 当我们的 message 消息比较复杂时,通常要用到自定义的 message 消息,MATLAB 2020b以上的版本自带了ROS Toolbox Interface
    的头像 发表于 11-15 18:12 1164次阅读
    如<b class='flag-5'>何在</b>Matlab中<b class='flag-5'>自定义</b>Message