百度飞桨与Arm深度合作,增加了Cortex-M硬件上支持的深度学习模型的数量,同时也填补了飞桨模型在Arm Cortex-M硬件上的适配空白,为开发者提供了更多的选择。
目标检测任务
PP-PicoDet
PaddleDetection中提出了全新的轻量级系列模型PP-PicoDet,在移动端具有卓越的性能,成为全新的SOTA轻量级模型。PP-PicoDet模型通过创新SOTA模块,例如ESNet、CSP-PAN、SimOTA等,不仅第一个实现了在1M参数量之内mAP(0.5:0.95)超越30+(输入416像素时),而且其性能优于同类算法模型。
Arm虚拟硬件
(Arm Virtual Hardware, AVH)
接下来将重点向大家展示从模型训练到部署的全流程,本期课程所涉及的相关代码已在GitHub仓库开源,欢迎大家下载体验!链接:
https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/deploy/third_engine/demo_avh
模型训练
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
模型导出
模型训练完成后,还需要将训练好的目标检测模型导出为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
https://bj.bcebos.com/v1/paddledet/deploy/Inference/picodet_s_320_coco_lcnet_no_nms.tar。
模型编译
如下图所示,他可以接收由飞桨等经典的深度学习训练框架编写的模型并将其转换成可在目标设备上运行推理任务的代码。
# 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
模型部署
图6 AVH AMI成功登录界面
图7 1.2.3版本AVH AMI所支持的AVH部分示意图
下载安装相应的软件包并配置运行环境
确保示例代码路径下configure_avh.sh脚本以及requirment.txt脚本中涉及的相应软件包均根据其版本要求正确安装。
第二步
可使用wget命令下载模型(下载地址详见2.2节)并通过tar命令解压模型文件压缩包。
使用TVMC命令编译Paddle Inference模型
第四步
处理图片数据
参考提供的convert_image.py脚本对所测试的示例图片000000014439_640x640.jpgs(如下图所示)进行处理,并生成相应的输入输出头文件。
图8 目标检测示例图片
第六步
图9 Corstone-300 (含 Cortex-M55) 虚拟硬件运行结果
*点击阅读原文浏览AVH官网
参考链接
飞桨官网:
Paddle Detection GitHub:
https://github.com/PaddlePaddle/PaddleDetection
https://avh.arm.com/
https://www.arm.com/resources/contact-us/virtual-hardware-boards
PP-PicoDet arXiv 技术报告:
https://arxiv.org/abs/2111.00902
https://aws.amazon.com/marketplace/pp/prodview-urbpq7yo5va7g?ref_=unifiedsearch
https://github.com/PaddlePaddle/PaddleDetection/blob/develop/configs/picodet/picodet_s_320_coco_lcnet.yml
Arm CMSIS NN GitHub:
https://github.com/ARM-software/CMSIS_5/tree/develop/CMSIS/NN
Arm Corstone SSE-300技术参考文档:
https://developer.arm.com/documentation/101773/latest
拓展阅读
关注【飞桨PaddlePaddle】公众号
获取更多技术内容~