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

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

3天内不再提示

如何将PP-PicoDet 目标检测模型部署在Corstone-300虚拟硬件平台上

lhl545545 来源:Arm软件开发者 作者:Arm软件开发者 2022-09-22 09:50 次阅读

本期课程,将以计算机视觉领域的目标检测任务为目标,带领大家动手完成从模型训练优化到深度学习应用部署的整个端到端的开发流程。你会逐步学习了解到如何使用飞桨[1]目标检测套件 PaddleDetection[2]工具套件完成目标检测模型的训练与适配,如何使用深度学习编译器 TVM 编译飞桨模型以及如何将编译后的模型部署在含有 Arm Cortex-M55 处理器的 Arm Corstone-300 虚拟硬件上。

百度飞桨与 Arm 深度合作,增加了 Cortex-M 硬件上支持的深度学习模型的数量,同时也填补了飞桨模型在 Arm Cortex-M 硬件上的适配空白,为开发者提供了更多的选择。

项目概述

经典的深度学习工程是从确认任务目标开始的,我们首先来简单地介绍一下目标检测任务以及本期部署实战课程中我们所使用的工具和平台。

1.1 目标检测任务

目标检测任务就是将图片或视频中所有目标的类别识别出来,并在该目标周围绘制边界框,标示出每个目标的位置。常见的目标检测任务包括人物检测、人脸检测、车辆跟踪等方向,在工业、智慧城市、安防、交通、零售、医疗等十余种行业场景中应用广泛。

图 1:目标检测任务案例

1.2PP-PicoDet

PaddleDetection 中提出了全新的轻量级系列模型 PP-PicoDet,在移动端具有卓越的性能,成为全新的 SOTA 轻量级模型。PP-PicoDet 模型通过创新 SOTA 模块,例如 ESNet、CSP-PAN、SimOTA 等,不仅第一个实现了在 1M 参数量之内 mAP (0.5:0.95) 超越 30+ (输入 416 像素时),而且其性能优于同类算法模型。

4e06af0e-39bb-11ed-9e49-dac502259ad0.png

图 2:PP-PicoDet 系统框图

更多关于 PP-PicoDet 的详细技术细节,可查看 PP-PicoDet arXiv 技术报告[3]。

1.3 Arm 虚拟硬件 (Arm Virtual Hardware, AVH)

作为 Arm 物联网全面解决方案的核心技术之一,AVH 很好地解决了实体硬件所面临的难扩展、难运维等痛点。AVH[4] 提供了简单便捷并且可扩展的途径,让 IoT 应用的开发摆脱了对实体硬件的依赖并使得云原生开发技术在嵌入式物联网、边缘侧机器学习领域得到了应用。尤其是在芯片紧张的当今时代,使用 AVH,开发者甚至可以在芯片 RTL 之前便可接触到最新的处理器 IP。

目前 AVH 提供两种形式供开发者使用。一种是托管在 AWS 以及 AWS China 上以亚马逊机器镜像 AMI 形式存在的 Arm Corstone 和 Cortex CPU 的虚拟硬件,另外一种则是由 Arm 以 SaaS 平台的形式提供的 AVH 第三方硬件[5]。本期课程我们将使用第一种托管在 AWS 以及 AWS China 上以亚马逊机器镜像 AMI 形式存在的 Corstone 和 Cortex CPU 的虚拟硬件。

由于目前 AWS China 账号主要面向企业级开发者开放,个人开发者可访问 AWS Marketplace 订阅 AVH 相关服务。参考下图步骤创建 AVH AMI 实例。

4e44cc58-39bb-11ed-9e49-dac502259ad0.png

图 3:AVH AMI 创建步骤

(访问 AWS Marketplace[6] 订阅 AVH)

端到端部署流程

接下来将重点向大家展示从模型训练到部署的全流程,本期课程所涉及的相关代码已在 GitHub 仓库开源,欢迎大家下载体验!

https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/deploy/third_engine/demo_avh

4e70544a-39bb-11ed-9e49-dac502259ad0.png

图 4:端到端部署流程示意图

2.1 模型训练

PaddleDetection 使用配置文件 (.yml) 管理网络训练、评估的参数。在静态图版本下,一个模型往往可以通过两个配置文件 (一个主配置文件、一个 reader 的读取配置) 实现,在 PaddleDetection 2.0 后续版本,采用了模块解耦设计,用户可以组合配置模块实现检测器,并可自由修改覆盖各模块配置。我们使用的配置文件[7]位于 configs/picodet 目录下的 picodet_s_320_coco_lcnet.yml。训练命令可参考如下:

# Example of training on single-GPU

export CUDA_VISIBLE_DEVICES=0

python tools/train.py -c configs/picodet/picodet_s_320_coco_lcnet.yml --eval

2.2 模型导出

模型训练完成后,还需要将训练好的目标检测模型导出为 Paddle Inference 模型,才能使用深度学习编译器 TVM 对其进行编译从而获得适配在 Cortex-M 处理器上运行的代码。在导出模型时,由于 CMSIS-NN 不支持 NMS 算子,可通过指定 -o export.nms=False 完成算子适配。参考以下命令导出 Paddle Inference 模型:

# Example exporting model command

python tools/export_model.py

-c configs/picodet/picodet_s_320_coco_lcnet.yml

-o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco_lcnet.pdparams

export.nms=False

--output_dir=output_inference

为了便于开发者朋友直接体验推理部署的流程,大家可以通过链接直接下载我们训练完成并完成导出适配的目标检测 Paddle Inference 模型:

https://bj.bcebos.com/v1/paddledet/deploy/Inference/picodet_s_320_coco_lcnet_no_nms.tar

2.3 模型编译

为实现在 Cortex-M 上直接完成飞桨模型的部署,我们需要借助深度学习编译器 TVM 来进行相应模型的转换和适配。TVM 是一款开源的深度学习编译器,主要用于解决将各种深度学习框架部署到各种硬件设备上的适配性问题。

如下图所示,它可以接收由飞桨等经典的深度学习训练框架编写的模型并将其转换成可在目标设备上运行推理任务的代码。

4e831576-39bb-11ed-9e49-dac502259ad0.png

图 5:编译流程示意图

我们使用 TVM 的 Python 应用程序 tvmc 来完成模型的编译。大家可参考如下命令对 Paddle Inference 模型进行编译。通过指定 --target=cmsis-nn,c 使得模型中 CMSIS NN[8]库支持的算子会调用 CMSIS-NN 库执行,而不支持的算子则会回调到 C 代码库。

# Example of Model compiling using tvmc

python3 -m tvm.driver.tvmc compile --target=cmsis-nn,c

--target-cmsis-nn-mcpu=cortex-m55

--target-c-mcpu=cortex-m55

--runtime=crt

--executor=aot

--executor-aot-interface-api=c

--executor-aot-unpacked-api=1

--pass-config tir.usmp.enable=1

--pass-config tir.usmp.algorithm=hill_climb

--pass-config tir.disable_storage_rewrite=1

--pass-config tir.disable_vectorize=1

--output-format=mlf

--model-format=paddle

--module-name=picodet

--input-shapes image:[1,3,320,320]

--output=picodet.tar

picodet_s_320_coco_lcnet_no_nms/model.pdmodel

更多关于参数配置的具体说明,大家可以直接输入 tvmc compile --help 来查看。编译后的模型可以在 --output 参数指定的路径下查看 (此处为当前目录下的picodet.tar 压缩包内)。

2.4 模型部署

参考图 3 所示的 AVH AMI 实例创建的流程并通过 ssh 命令远程登录到实例中去,当看到如下所示的提示画面说明已经成功登入。

4ea7e5c2-39bb-11ed-9e49-dac502259ad0.png

图 6:AVH AMI 成功登录界面

成功登入后大家可以切换到“/opt/VHT”以及“/opt”目录下查看当前版本 AVH AMI 所支持的 Corstone 和 Cortex CPU 虚拟硬件。下图为部分 1.2.3 版本 AVH AMI 所支持的 AVH 列表。本期部署课程中所使用的正是 Corstone-300 虚拟硬件 (VHT_Corstone_SSE-300_Ethos-U55),其内含有 Cortex-M55 处理器、Arm Ethos-U55 处理器及一些基本外设。更多关于 Corstone-300 虚拟硬件的相关信息,欢迎访问 Arm 开发者社区的技术文档[9]进行查看。

4ec7f89e-39bb-11ed-9e49-dac502259ad0.png

图 7:1.2.3 版本 AVH AMI 所支持的 AVH 部分示意图

为便于开发者朋友更直观地体验如何在AVH上完成飞桨模型部署,我们为大家提供了部署的示例代码脚本(run_demo.sh)来帮助大家自动化的完成环境配置,构建目标检测应用以及在含有 Cortex-M55 的 Corstone-300虚拟硬件上执行并获取结果。

您也可以按照以下几个步骤来手动部署。

第一步:下载安装相应的软件包并配置运行环境

确保示例代码路径下 configure_avh.sh 脚本以及 requirment.txt 脚本中涉及的相应软件包均根据其版本要求正确安装。

第二步:(下载) 获取目标检测 Paddle Inference 模型

可使用 wget 命令下载模型 (下载地址详见 2.2 节) 并通过 tar 命令解压模型文件压缩包。

第三步:使用 TVMC 命令编译 Paddle Inference 模型

参考 2.3 节中使用的 TVMC 命令编译第二步下载好的 Paddle Inference 模型 (model.pdmodel)。

第四步:处理图片数据

参考提供的 convert_image.py 脚本对所测试的示例图片 000000014439_640x640.jpgs (如下图所示) 进行处理,并生成相应的输入输出头文件。

图 8:目标检测示例图片

第五步:构建应用程序

使用 Makefile 工具构建目标检测应用程序的二进制镜像文件。

第六步:执行目标检测应用并查看运行结果

调用 VHT_Corstone_SSE-300_Ethos-U55 (Corstone-300 虚拟硬件) 执行构建好的目标检测应用并查看运行结果。运行结果如下图所示。

其中,前四个数字为 box 框位置,class 为类别序号,score 为得分。由于模型可能存在精度损失的问题,得分偏低,但整体目标识别结果与图片一致,说明将飞桨模型直接部署在 Cortex-M55 虚拟硬件上运行良好。

4f0a9f64-39bb-11ed-9e49-dac502259ad0.png

图 9:Corstone-300

(含 Cortex-M55) 虚拟硬件运行结果

总结

本期课程带领大家学习了如何将 PaddleDetection 中发布的 PP-PicoDet 目标检测模型 (完成算子适配后) 部署在 Corstone-300 的虚拟硬件平台上,欢迎大家动手体验。后续我们也将持续为大家带来更多如何在 Arm 虚拟硬件上部署百度飞桨模型的实例,敬请期待!

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

    关注

    11

    文章

    3417

    浏览量

    66696
  • 检测模型
    +关注

    关注

    0

    文章

    17

    浏览量

    7343
  • 深度学习
    +关注

    关注

    73

    文章

    5527

    浏览量

    121881

原文标题:AVH 动手实践 (三) | 在 Arm 虚拟硬件上部署 PP-PicoDet 模型

文章出处:【微信号:Arm软件开发者,微信公众号:Arm软件开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    如何在Arm虚拟硬件虚拟树莓派4上完成图像识别应用的部署

    本期课程,小编将以计算机视觉领域的图像识别任务为目标,带领大家动手实现在树莓派的虚拟设备上部署基于 Paddle Lite 的图像识别模型,以及如何
    的头像 发表于 09-30 10:00 2629次阅读

    基于C#和OpenVINO™英特尔独立显卡上部署PP-TinyPose模型

    和 OpenVINO, PP-TinyPose 模型部署英特尔独立显卡上。 1.1 PP-
    的头像 发表于 11-18 18:27 2718次阅读

    百度飞桨PP-YOLOE ONNX LabVIEW中的部署推理(含源码)

    对于如何在LabVIEW中实现该模型部署,笔者目前还没有看到相关介绍文章,所以笔者实现PP-YOLOE ONNX LabVIEW中的
    的头像 发表于 05-26 14:01 1279次阅读
    百度飞桨<b class='flag-5'>PP</b>-YOLOE ONNX <b class='flag-5'>在</b>LabVIEW中的<b class='flag-5'>部署</b>推理(含源码)

    AI模型部署边缘设备的奇妙之旅:目标检测模型

    网络(DenseNet)等创新设计都是为了克服深层网络训练中的挑战而提出的。 3 边缘端设备部署 边缘端设备部署目标检测
    发表于 12-19 14:33

    如何将Linux操作系统移植到目标平台上

    如何将Linux操作系统移植到目标平台上?Linux交叉编译环境的建立及内核配置和编译Linux移植中实际指令集小于标准MIPS指令集的问题如何将Linux操作系统移植到MIPS体系结
    发表于 04-22 07:04

    如何将FreeModbus移植到STM32平台上

    modbus是什么?如何将FreeModbus移植到STM32平台上
    发表于 11-17 07:44

    如何将uCOS-III实时操作系统移植到目标平台上并运行?

    如何将uCOS-III实时操作系统移植到目标平台上并运行?
    发表于 11-29 06:11

    介绍一种Arm ML嵌入式评估套件

    的输出是一个优化的 TensorFlow Lite 文件,可以使用 Ethos-U NPU 的系统上进行部署本例中是配置了 Corstone-300 FVP 的 Arm
    发表于 08-12 15:35

    如何用Arm虚拟硬件Arm Cortex-M上部署PaddlePaddle

    推理模型  3. 使用TVMC为目标设备编译 Paddle 推理模型4. 构建文本识别应用程序并将其部署 Arm Virtual带有Ar
    发表于 09-02 14:48

    Arm虚拟硬件部署PP-PicoDet模型

    1、Arm虚拟硬件部署PP-PicoDet模型  经典的深度学习工程是从确认任务
    发表于 09-16 14:42

    Arm虚拟硬件部署PP-PicoDet模型的设计方案

    1、Arm虚拟硬件部署PP-PicoDet模型  经典的深度学习工程是从确认任务
    发表于 09-23 15:02

    如何使用TensorFlow神经网络模型部署到移动或嵌入式设备上

    有很多方法可以经过训练的神经网络模型部署到移动或嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如And
    发表于 08-02 06:43

    如何将TDM业务添加到WiMAX平台上

    如何将TDM业务添加到WiMAX平台上 对于今天的运营商来说,“接入”是一个热门词汇。尽管传统接入链路依然是主要的收入来源,但它同时也成为限制
    发表于 10-20 21:29 754次阅读

    如何将PP-OCRv3英文识别模型部署Corstone-300虚拟硬件平台上

    经典的深度学习工程是从确认任务目标开始的,我们首先来简单地介绍一下 OCR 中的文本识别任务以及本期部署实战课程中我们所使用的工具和平台
    的头像 发表于 08-12 15:03 2685次阅读

    如何将pytorch的模型部署到c++平台上模型流程

    最近因为工作需要,要把pytorch的模型部署到c++平台上,基本过程主要参照官网的教学示例,期间发现了不少坑,特此记录。
    的头像 发表于 10-26 14:36 3321次阅读