目录

文章核心:

1.效果图及视频展示

2.背景

3.安装PaddlePaddle

4.预训练模型的下载

比如yolov3在coco和voc数据集上的预训练模型和权重列表如下:

5.模型导出(python端)

6.模型预测

1.图片预测

2.视频预测,帧率在10左右

3.文件夹下图片预测

当然也可以自己进行训练,相应的指令为:

安装过程中遇到的其他问题:


全部源码均在PaddleDetection的官方Github上,地址如下:(本文用的版本是最新2.3的版本)

PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection. (github.com)

文章核心:

        本片文章主要是通过利用PaddleDetection(飞桨)提供的框架,使用yolov3_darknet53、cascade_rcnn_dcn等经典网络达到对常规目标检测任务的轻量化实现,应用方面主要通过python端的部署(当然也可以通过c++的部署,官方地址里边有代码),并后续实现将模型部署到轻量化移动边缘设备中,从而实现轻量化嵌入式平台的深度学习任务,达到对深度物联网目标的追求!

1.效果图及视频展示

①图片展示

000000570688

image-20211217212536786

②视频展示

# 利用PaddleDetection部署自己的轻量级移动检测嵌入式平台(多种高性能网络模型)--Pytorch实现

2.背景

        PaddleDetection 是百度飞桨推出的物体检测统一框架。支持现有的RCNN、SSD、YOLO等系列模型、支持 ResNet、ResNet-VD、ResNeXt、ResNeXt-VD、SENet、MobileNet、DarkNet等主干网络。针对不同的业务场景(性能、目标大小、准确率等)可以选择框架中的不同模块组合得到最适合的模型,实现任务。相比于tensorflow的Object_Detection,优势之一就是将YOLOv3这一目标检测的快速算法融合到了框架下。

地址:飞桨PaddlePaddle-源于产业实践的开源深度学习平台

3.安装PaddlePaddle

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

或者通过Github地址:

PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection. (github.com)

4.预训练模型的下载

PaddleDetection提供的非常丰富的预训练库,各种经典检测、分割、识别、追踪等任务的优秀框架模型供我们选择:

比如yolov3在coco和voc数据集上的预训练模型和权重列表如下:

YOLOv3 on COCO:

骨架网络输入尺寸每张GPU图片个数学习率策略推理时间(fps)Box AP下载配置文件
DarkNet53(paper)6088270e----33.0--
DarkNet53(paper)4168270e----31.0--
DarkNet53(paper)3208270e----28.2--
DarkNet536088270e----39.0下载链接配置文件
DarkNet534168270e----37.5下载链接配置文件
DarkNet533208270e----34.6下载链接配置文件
ResNet50_vd6088270e----39.1下载链接配置文件
ResNet50_vd4168270e----36.6下载链接配置文件
ResNet50_vd3208270e----33.6下载链接配置文件
ResNet346088270e----36.2下载链接配置文件
ResNet344168270e----34.3下载链接配置文件
ResNet343208270e----31.2下载链接配置文件
MobileNet-V16088270e----29.4下载链接配置文件
MobileNet-V14168270e----29.3下载链接配置文件
MobileNet-V13208270e----27.2下载链接配置文件
MobileNet-V36088270e----31.4下载链接配置文件
MobileNet-V34168270e----29.6下载链接配置文件
MobileNet-V33208270e----27.1下载链接配置文件
MobileNet-V1-SSLD6088270e----31.0下载链接配置文件
MobileNet-V1-SSLD4168270e----30.6下载链接配置文件
MobileNet-V1-SSLD3208270e----28.4下载链接配置文件

YOLOv3 on Pasacl VOC:

骨架网络输入尺寸每张GPU图片个数学习率策略推理时间(fps)Box AP下载配置文件
MobileNet-V16088270e-75.2下载链接配置文件
MobileNet-V14168270e-76.2下载链接配置文件
MobileNet-V13208270e-74.3下载链接配置文件
MobileNet-V36088270e-79.6下载链接配置文件
MobileNet-V34168270e-78.6下载链接配置文件
MobileNet-V33208270e-76.4下载链接配置文件
MobileNet-V1-SSLD6088270e-78.3下载链接配置文件
MobileNet-V1-SSLD4168270e-79.6下载链接配置文件
MobileNet-V1-SSLD3208270e-77.3下载链接配置文件
MobileNet-V3-SSLD6088270e-80.4下载链接配置文件
MobileNet-V3-SSLD4168270e-79.2下载链接配置文件
MobileNet-V3-SSLD3208270e-77.3下载链接配置文件

注意: YOLOv3均使用8GPU训练,训练270个epoch。由于动态图框架整体升级,以下几个PaddleDetection发布的权重模型评估时需要添加--bias字段, 例如:

# 使用PaddleDetection发布的权重
CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c configs/ppyolo/yolov3_darknet53_270e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/yolov3_darknet53_270e_coco.pdparams --bias

5.模型导出(python端)

第三步骤中得到训练权重模型后,接下来进行python端的模型导出。

代码如下:

# 导出YOLOv3模型
python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml --output_dir=./inference_model \
 -o weights=weights/yolov3_darknet53_270e_coco.pdparams

image-20211217221027561

配置说明:

image-20211217221159091

导出成功后会出现如下几个文件:

image-20211217221309156

或者其他:

我自己用的:yolov3_darknet53_270e_coco

python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml --output_dir=./inference_model -o weights=weights/yolov3_darknet53_270e_coco.pdparams TestReader.inputs_def.image_shape=[3,640,640]

我自己用的:cascade_rcnn_dcn_x101_vd_64x4d_fpn_1x_coco

python tools/export_model.py -c configs/dcn/cascade_rcnn_dcn_x101_vd_64x4d_fpn_1x_coco.yml --output_dir=./inference_model -o weights=weights/cascade_rcnn_dcn_x101_vd_64x4d_fpn_1x_coco.pdparams

6.模型预测

支持很多种方法的预测,包括:单张图片、文件夹下图片、单个视频、文件夹下视频、实时调用摄像头等。

参数配置如下:

FLAG支持脚本用途默认值备注
-cALL指定配置文件None必选,例如-c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml
-oALL设置或更改配置文件里的参数内容None相较于-c设置的配置文件有更高优先级,例如:-o use_gpu=False
--evaltrain是否边训练边测试False如需指定,直接--eval即可
-r/--resume_checkpointtrain恢复训练加载的权重路径None例如:-r output/faster_rcnn_r50_1x_coco/10000
--slim_configALL模型压缩策略配置文件None例如--slim_config configs/slim/prune/yolov3_prune_l1_norm.yml
--use_vdltrain/infer是否使用VisualDL记录数据,进而在VisualDL面板中显示FalseVisualDL需Python>=3.5
--vdl_log_dirtrain/infer指定 VisualDL 记录数据的存储路径train:vdl_log_dir/scalar infer: vdl_log_dir/imageVisualDL需Python>=3.5
--output_evaleval评估阶段保存json路径None例如 --output_eval=eval_output, 默认为当前路径
--json_evaleval是否通过已存在的bbox.json或者mask.json进行评估False如需指定,直接--json_eval即可, json文件路径在--output_eval中设置
--classwiseeval是否评估单类AP和绘制单类PR曲线False如需指定,直接--classwise即可
--output_dirinfer/export_model预测后结果或导出模型保存路径./output例如--output_dir=output
--draw_thresholdinfer可视化时分数阈值0.5例如--draw_threshold=0.7
--infer_dirinfer用于预测的图片文件夹路径None--infer_img--infer_dir必须至少设置一个
--infer_imginfer用于预测的图片路径None--infer_img--infer_dir必须至少设置一个,infer_img具有更高优先级
--save_txtinfer是否在文件夹下将图片的预测结果保存到文本文件中False可选

这里举例我使用的几个tricks:

.图片预测

python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_coco --image_file=./demo/000000570688.jpg --device=GPU

2.视频预测,帧率在10左右

python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_coco --camera_id=0 --device=GPU

按”q“退出~

3.文件夹下图片预测

python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_coco --image_dir=./image --device=GPU

当然也可以自己进行训练,相应的指令为:

set PYTHONPATH=$PYTHONPATH:.
set CUDA_VISIBLE_DEVICES=0
python -u tools/train.py -c dataset/hongwai/yolov3_mobilenet_v1_hongwaiface.yml --eval

安装过程中遇到的其他问题:

注意:pycocotools的适配python版本目前最高为3.8

Links for pycocotools-windows (tsinghua.edu.cn)

【我有预感,点赞、评论和关注我的人,痘痘会慢慢消下去,皮肤会变白,变瘦变高,成绩上升,事业突出,会越来越好,喜欢你的人会向你表白,世人如满天星斗,而你皆如万人捧花,祝你也祝我!!!】

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐