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

1,409 阅读7分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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

全部源码均在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

②视频展示

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

ArchitecturesBackbonesComponentsData Augmentation
- Object Detection
    • Faster RCNN
    • FPN
    • Cascade-RCNN
    • Libra RCNN
    • Hybrid Task RCNN
    • PSS-Det
    • RetinaNet
    • YOLOv3
    • YOLOv4
    • PP-YOLOv1/v2
    • PP-YOLO-Tiny
    • SSD
    • CornerNet-Squeeze
    • FCOS
    • TTFNet
    • PP-PicoDet
    • DETR
    • Deformable DETR
    • Swin Transformer
    • Sparse RCNN
  • Instance Segmentation
    • Mask RCNN
    • SOLOv2
  • Face Detection
    • FaceBoxes
    • BlazeFace
    • BlazeFace-NAS
  • Multi-Object-Tracking
    • JDE
    • FairMOT
    • DeepSort
  • KeyPoint-Detection
    • HRNet
    • HigherHRNet | - ResNet(&vd)
  • ResNeXt(&vd)
  • SENet
  • Res2Net
  • HRNet
  • Hourglass
  • CBNet
  • GCNet
  • DarkNet
  • CSPDarkNet
  • VGG
  • MobileNetv1/v3
  • GhostNet
  • Efficientnet
  • BlazeNet | - Common
    • Sync-BN
    • Group Norm
    • DCNv2
    • Non-local- KeyPoint
    • DarkPose- FPN
    • BiFPN
    • BFP
    • HRFPN
    • ACFPN- Loss
    • Smooth-L1
    • GIoU/DIoU/CIoU
    • IoUAware- Post-processing
    • SoftNMS
    • MatrixNMS- Speed
    • FP16 training
    • Multi-machine training | - Resize
  • Lighting
  • Flipping
  • Expand
  • Crop
  • Color Distort
  • Random Erasing
  • Mixup
  • Mosaic
  • Cutmix
  • Grid Mask
  • Auto Augment
  • Random Perspective |

比如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

4.模型导出(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

5.模型预测

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

参数配置如下:

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:

1.图片预测

 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)