PaddleDetection 源码学习

文件结构

tree -f#显示显示完整路径
tree -d#显示所有文件夹
└── PaddleDetection #主目录
    ├── configs  #存放配置文件
    │    ├──_base_ 各个模块配置
    ├── dataset  #存放数据集,数据集下载脚本,对应各数据集文件夹
    │   ├── coco #80类 #物体
    │   ├── fddb #1类  #人脸 通常用来评估人脸检测算法
    │   ├── mot # 多目标跟踪
    │   ├── roadsign_voc #车道线数据 4类
    │   ├── voc #20类 #物体
    │   └── wider_face #1类 人脸
    ├── deploy  #部署相关
    │   ├── cpp #C++部署
    │   │   ├── cmake #cmake文件
    │   │   ├── docs #部署文档
    │   │   ├── include #库头文件
    │   │   ├── scripts #依赖库配置脚本,build脚本
    │   │   └── src #源码
    │   └── python #python部署
    ├── ppdet   #飞桨物体检测套件
    │   ├── core #核心部分
    │   │   └── config #实例、注册类的配置
    │   ├── data #数据处理
    │   │   ├── shared_queue #共享队列(数据多线程)
    │   │   ├── source #各种数据集类
    │   │   ├── tests #测试
    │   │   ├── tools #工具(转coco数据格式)
    │   │   └── transform #数据增强模块
    │   ├── ext_op  #增加op
    │   │   ├── src #op实现源码
    │   │   └── test #op测试
    │   ├── modeling #模型结构
    │   │   ├── architectures #网络结构
    │   │   ├── backbones #主干网络
    │   │   ├── heads #头(RPN、loss)
    │   │   ├── losses #头(loss)
    │   │   ├── mot #多目标跟踪(tracking)
    │   │   ├── necks #颈(FPN)
    │   │   ├── proposal_generator #建议框生成(anchor、rpnhead)
    │   │   ├── reid #重识别
    │   │   └── tests #测试
    │   ├── py_op #一些前后处理
    │   └── utils #实用工具
    └── tools #训练,测试,验证,将来还有模型导出


脚本公共参数

FLAG支持脚本用途默认值备注
-cALL指定配置文件None必选,例如-c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml
-oALL设置或更改配置文件里的参数内容None相较于-c设置的配置文件有更高优先级,例如:-o use_gpu=False
–slim_configALL模型压缩策略配置文件None例如--slim_config configs/slim/prune/yolov3_prune_l1_norm.yml

2.训练

脚本:tools/train.py

参数

FLAG支持脚本用途默认值备注
–evaltrain是否边训练边测试False如需指定,直接--eval即可
-r/–resume_checkpointtrain恢复训练加载的权重路径None例如:-r output/faster_rcnn_r50_1x_coco/10000
–use_vdltrain是否使用VisualDL记录数据,进而在VisualDL面板中显示FalseVisualDL需Python>=3.5
–vdl_log_dirtrain指定 VisualDL 记录数据的存储路径train:vdl_log_dir/scalar
VisualDL需Python>=3.5

评估指标

loss总体损失总体损失,它是各个损失函数的组合,用于衡量模型预测结果和真实标签之间的差异。它包含了类别损失、IOU 损失和 L1 损失的加权和。
loss_cls类别损失类别损失衡量了模型预测的物体类别是否正确。它通常使用交叉熵损失来度量预测类别的概率分布与真实标签之间的差异。
loss_iouIOU 损失IOU 损失是指模型预测的边界框与真实边界框之间的重叠程度的损失。它可以帮助模型更好地定位目标。IOU 损失通常使用边界框的 IOU 值(Intersection over Union)的差距来度量。
loss_l1L1 损失L1 损失是指模型预测的边界框位置与真实边界框位置之间的 L1 范数差异。它有助于确保预测的边界框位置与真实位置更接近。

3.模型评估

脚本:tools/eval.py

!python tools/eval.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -o weights=output/yolov3_mobilenet_v1_roadsign/best_model.pdparams

参数说明

FLAG支持脚本用途默认值备注
–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即可

4.预测

脚本:tools/infer.py

!python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -o weights=output/yolov3_mobilenet_v1_roadsign/best_model.pdparams --infer_img=dataset/roadsign_voc/images/road114.png
FLAG支持脚本用途默认值备注
–use_vdlinfer是否使用VisualDL记录数据,进而在VisualDL面板中显示FalseVisualDL需Python>=3.5
–vdl_log_dirinfer指定 VisualDL 记录数据的存储路径train:vdl_log_dir/scalar infer: vdl_log_dir/imageVisualDL需Python>=3.5
–output_dirinfer预测后结果或导出模型保存路径./output例如--output_dir=output
–infer_dirinfer用于预测的图片文件夹路径None--infer_img--infer_dir必须至少设置一个
–infer_imginfer用于预测的图片路径None--infer_img--infer_dir必须至少设置一个,infer_img具有更高优先级
–save_txtinfer是否在文件夹下将图片的预测结果保存到文本文件中False可选

5.导出模型

脚本:tools/export_model.py

* 导出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

参数说明

FLAG支持脚本用途默认值备注
–output_direxport_model预测后结果或导出模型保存路径./output例如--output_dir=output
output
  ├── infer_cfg.yaml            # 部署相关的配置文件
  ├── model.pdiparams        # 静态图模型参数
  ├── model.pdiparams.info   # 参数额外信息,一般无需关注
  └── model.pdmodel          # 静态图模型文件

6.部署

形式语言教程设备/平台
PaddleInferencePython已完善linux(NV-Jetson)、windows
PaddleInferenceC++已完善linux(NV-Jetson)、windows
PaddleServingPython已完善linux(NV-Jetson)、windows
PaddleLitePython已完善Android、IOS、FPGA、RK…
PaddleDetection支持TensorRT加速,请参考文档TensorRT预测部署教程
上一篇
下一篇