文件结构
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 | 支持脚本 | 用途 | 默认值 | 备注 |
|---|---|---|---|---|
| -c | ALL | 指定配置文件 | None | 必选,例如-c configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.yml |
| -o | ALL | 设置或更改配置文件里的参数内容 | None | 相较于-c设置的配置文件有更高优先级,例如:-o use_gpu=False |
| –slim_config | ALL | 模型压缩策略配置文件 | None | 例如--slim_config configs/slim/prune/yolov3_prune_l1_norm.yml |
2.训练
脚本:tools/train.py
参数
| FLAG | 支持脚本 | 用途 | 默认值 | 备注 |
|---|---|---|---|---|
| –eval | train | 是否边训练边测试 | False | 如需指定,直接--eval即可 |
| -r/–resume_checkpoint | train | 恢复训练加载的权重路径 | None | 例如:-r output/faster_rcnn_r50_1x_coco/10000 |
| –use_vdl | train | 是否使用VisualDL记录数据,进而在VisualDL面板中显示 | False | VisualDL需Python>=3.5 |
| –vdl_log_dir | train | 指定 VisualDL 记录数据的存储路径 | train:vdl_log_dir/scalar | VisualDL需Python>=3.5 |
评估指标
| loss | 总体损失 | 总体损失,它是各个损失函数的组合,用于衡量模型预测结果和真实标签之间的差异。它包含了类别损失、IOU 损失和 L1 损失的加权和。 |
| loss_cls | 类别损失 | 类别损失衡量了模型预测的物体类别是否正确。它通常使用交叉熵损失来度量预测类别的概率分布与真实标签之间的差异。 |
| loss_iou | IOU 损失 | IOU 损失是指模型预测的边界框与真实边界框之间的重叠程度的损失。它可以帮助模型更好地定位目标。IOU 损失通常使用边界框的 IOU 值(Intersection over Union)的差距来度量。 |
| loss_l1 | L1 损失 | 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_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即可 |
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_vdl | infer | 是否使用VisualDL记录数据,进而在VisualDL面板中显示 | False | VisualDL需Python>=3.5 |
| –vdl_log_dir | infer | 指定 VisualDL 记录数据的存储路径 | train:vdl_log_dir/scalar infer: vdl_log_dir/image | VisualDL需Python>=3.5 |
| –output_dir | infer | 预测后结果或导出模型保存路径 | ./output | 例如--output_dir=output |
| –infer_dir | infer | 用于预测的图片文件夹路径 | None | --infer_img和--infer_dir必须至少设置一个 |
| –infer_img | infer | 用于预测的图片路径 | None | --infer_img和--infer_dir必须至少设置一个,infer_img具有更高优先级 |
| –save_txt | infer | 是否在文件夹下将图片的预测结果保存到文本文件中 | 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_dir | export_model | 预测后结果或导出模型保存路径 | ./output | 例如--output_dir=output |
output
├── infer_cfg.yaml # 部署相关的配置文件
├── model.pdiparams # 静态图模型参数
├── model.pdiparams.info # 参数额外信息,一般无需关注
└── model.pdmodel # 静态图模型文件
6.部署
| 形式 | 语言 | 教程 | 设备/平台 |
|---|---|---|---|
| PaddleInference | Python | 已完善 | linux(NV-Jetson)、windows |
| PaddleInference | C++ | 已完善 | linux(NV-Jetson)、windows |
| PaddleServing | Python | 已完善 | linux(NV-Jetson)、windows |
| PaddleLite | Python | 已完善 | Android、IOS、FPGA、RK… |