目录
文章核心:
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++的部署,官方地址里边有代码),并后续实现将模型部署到轻量化移动边缘设备中,从而实现轻量化嵌入式平台的深度学习任务,达到对深度物联网目标的追求!
①图片展示
②视频展示
# 利用PaddleDetection部署自己的轻量级移动检测嵌入式平台(多种高性能网络模型)--Pytorch实现
PaddleDetection 是百度飞桨推出的物体检测统一框架。支持现有的RCNN、SSD、YOLO等系列模型、支持 ResNet、ResNet-VD、ResNeXt、ResNeXt-VD、SENet、MobileNet、DarkNet等主干网络。针对不同的业务场景(性能、目标大小、准确率等)可以选择框架中的不同模块组合得到最适合的模型,实现任务。相比于tensorflow的Object_Detection,优势之一就是将YOLOv3这一目标检测的快速算法融合到了框架下。
地址:飞桨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)
PaddleDetection提供的非常丰富的预训练库,各种经典检测、分割、识别、追踪等任务的优秀框架模型供我们选择:
YOLOv3 on COCO:
骨架网络 | 输入尺寸 | 每张GPU图片个数 | 学习率策略 | 推理时间(fps) | Box AP | 下载 | 配置文件 |
---|---|---|---|---|---|---|---|
DarkNet53(paper) | 608 | 8 | 270e | ---- | 33.0 | - | - |
DarkNet53(paper) | 416 | 8 | 270e | ---- | 31.0 | - | - |
DarkNet53(paper) | 320 | 8 | 270e | ---- | 28.2 | - | - |
DarkNet53 | 608 | 8 | 270e | ---- | 39.0 | 下载链接 | 配置文件 |
DarkNet53 | 416 | 8 | 270e | ---- | 37.5 | 下载链接 | 配置文件 |
DarkNet53 | 320 | 8 | 270e | ---- | 34.6 | 下载链接 | 配置文件 |
ResNet50_vd | 608 | 8 | 270e | ---- | 39.1 | 下载链接 | 配置文件 |
ResNet50_vd | 416 | 8 | 270e | ---- | 36.6 | 下载链接 | 配置文件 |
ResNet50_vd | 320 | 8 | 270e | ---- | 33.6 | 下载链接 | 配置文件 |
ResNet34 | 608 | 8 | 270e | ---- | 36.2 | 下载链接 | 配置文件 |
ResNet34 | 416 | 8 | 270e | ---- | 34.3 | 下载链接 | 配置文件 |
ResNet34 | 320 | 8 | 270e | ---- | 31.2 | 下载链接 | 配置文件 |
MobileNet-V1 | 608 | 8 | 270e | ---- | 29.4 | 下载链接 | 配置文件 |
MobileNet-V1 | 416 | 8 | 270e | ---- | 29.3 | 下载链接 | 配置文件 |
MobileNet-V1 | 320 | 8 | 270e | ---- | 27.2 | 下载链接 | 配置文件 |
MobileNet-V3 | 608 | 8 | 270e | ---- | 31.4 | 下载链接 | 配置文件 |
MobileNet-V3 | 416 | 8 | 270e | ---- | 29.6 | 下载链接 | 配置文件 |
MobileNet-V3 | 320 | 8 | 270e | ---- | 27.1 | 下载链接 | 配置文件 |
MobileNet-V1-SSLD | 608 | 8 | 270e | ---- | 31.0 | 下载链接 | 配置文件 |
MobileNet-V1-SSLD | 416 | 8 | 270e | ---- | 30.6 | 下载链接 | 配置文件 |
MobileNet-V1-SSLD | 320 | 8 | 270e | ---- | 28.4 | 下载链接 | 配置文件 |
YOLOv3 on Pasacl VOC:
骨架网络 | 输入尺寸 | 每张GPU图片个数 | 学习率策略 | 推理时间(fps) | Box AP | 下载 | 配置文件 |
---|---|---|---|---|---|---|---|
MobileNet-V1 | 608 | 8 | 270e | - | 75.2 | 下载链接 | 配置文件 |
MobileNet-V1 | 416 | 8 | 270e | - | 76.2 | 下载链接 | 配置文件 |
MobileNet-V1 | 320 | 8 | 270e | - | 74.3 | 下载链接 | 配置文件 |
MobileNet-V3 | 608 | 8 | 270e | - | 79.6 | 下载链接 | 配置文件 |
MobileNet-V3 | 416 | 8 | 270e | - | 78.6 | 下载链接 | 配置文件 |
MobileNet-V3 | 320 | 8 | 270e | - | 76.4 | 下载链接 | 配置文件 |
MobileNet-V1-SSLD | 608 | 8 | 270e | - | 78.3 | 下载链接 | 配置文件 |
MobileNet-V1-SSLD | 416 | 8 | 270e | - | 79.6 | 下载链接 | 配置文件 |
MobileNet-V1-SSLD | 320 | 8 | 270e | - | 77.3 | 下载链接 | 配置文件 |
MobileNet-V3-SSLD | 608 | 8 | 270e | - | 80.4 | 下载链接 | 配置文件 |
MobileNet-V3-SSLD | 416 | 8 | 270e | - | 79.2 | 下载链接 | 配置文件 |
MobileNet-V3-SSLD | 320 | 8 | 270e | - | 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
第三步骤中得到训练权重模型后,接下来进行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
配置说明:
导出成功后会出现如下几个文件:
或者其他:
我自己用的: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
支持很多种方法的预测,包括:单张图片、文件夹下图片、单个视频、文件夹下视频、实时调用摄像头等。
参数配置如下:
FLAG | 支持脚本 | 用途 | 默认值 | 备注 |
---|---|---|---|---|
-c | ALL | 指定配置文件 | None | 必选,例如-c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml |
-o | ALL | 设置或更改配置文件里的参数内容 | None | 相较于-c 设置的配置文件有更高优先级,例如:-o use_gpu=False |
--eval | train | 是否边训练边测试 | False | 如需指定,直接--eval 即可 |
-r/--resume_checkpoint | train | 恢复训练加载的权重路径 | None | 例如:-r output/faster_rcnn_r50_1x_coco/10000 |
--slim_config | ALL | 模型压缩策略配置文件 | None | 例如--slim_config configs/slim/prune/yolov3_prune_l1_norm.yml |
--use_vdl | train/infer | 是否使用VisualDL记录数据,进而在VisualDL面板中显示 | False | VisualDL需Python>=3.5 |
--vdl_log_dir | train/infer | 指定 VisualDL 记录数据的存储路径 | train:vdl_log_dir/scalar infer: vdl_log_dir/image |
VisualDL需Python>=3.5 |
--output_eval | eval | 评估阶段保存json路径 | None | 例如 --output_eval=eval_output , 默认为当前路径 |
--json_eval | eval | 是否通过已存在的bbox.json或者mask.json进行评估 | False | 如需指定,直接--json_eval 即可, json文件路径在--output_eval 中设置 |
--classwise | eval | 是否评估单类AP和绘制单类PR曲线 | False | 如需指定,直接--classwise 即可 |
--output_dir | infer/export_model | 预测后结果或导出模型保存路径 | ./output |
例如--output_dir=output |
--draw_threshold | infer | 可视化时分数阈值 | 0.5 | 例如--draw_threshold=0.7 |
--infer_dir | infer | 用于预测的图片文件夹路径 | None | --infer_img 和--infer_dir 必须至少设置一个 |
--infer_img | infer | 用于预测的图片路径 | None | --infer_img 和--infer_dir 必须至少设置一个,infer_img 具有更高优先级 |
--save_txt | infer | 是否在文件夹下将图片的预测结果保存到文本文件中 | False | 可选 |
这里举例我使用的几个tricks:
python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_coco --image_file=./demo/000000570688.jpg --device=GPU
python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_coco --camera_id=0 --device=GPU
按”q“退出~
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)
【我有预感,点赞、评论和关注我的人,痘痘会慢慢消下去,皮肤会变白,变瘦变高,成绩上升,事业突出,会越来越好,喜欢你的人会向你表白,世人如满天星斗,而你皆如万人捧花,祝你也祝我!!!】