更换文档检测模型

This commit is contained in:
2024-08-27 14:42:45 +08:00
parent aea6f19951
commit 1514e09c40
2072 changed files with 254336 additions and 4967 deletions

View File

@@ -0,0 +1,57 @@
# FAQ第一期
**Q**SOLOv2训练mAP值宽幅震荡无上升趋势检测效果不好检测置信度超过了1的原因是
**A** SOLOv2训练不收敛的话先更新PaddleDetection到release/2.2或者develop分支尝试。
**Q** Optimizer中优化器支持哪几种
**A** Paddle中支持的优化器[Optimizer](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/optimizer/Overview_cn.html )在PaddleDetection中均支持需要手动修改下配置文件即可。
**Q** 在tools/infer.py加入如下函数得到FLOPs值为-1,请问原因?
**A** 更新PaddleDetection到release/2.2或者develop分支`print_flops`设为True即可打印FLOPs。
**Q** 使用官方的ReID模块时遇到了模块未注册的问题
**A** 请尝试`pip uninstall paddledet`并重新安装,或者`python setup.py install`
**Q** 大规模实用目标检测模型有动态图版本吗,或者可以转换为动态图版本吗?
**A** 大规模实用模型的动态图版本正在整理我们正在开发更大规模的通用预训练模型预计在2.3版本中发布。
**Q** Develop分支下FairMot预测视频问题预测视频时不会完全运行完毕。比如用一个300frame的视频代码会保存预测结果的每一帧图片但只保存到299张就没了并且也没有预测好的视频文件生成该如何解决
**A** 已经支持自己设置帧率infer视频请使用develop分支或release/2.2分支,命令如下:
```
CUDA_VISIBLE_DEVICES=0 python tools/infer_mot.py -c configs/mot/fairmot/fairmot_dla34_30e_1088x608.yml -o weights=https://paddledet.bj.bcebos.com/models/mot/fairmot_dla34_30e_1088x608.pdparams --video_file={your video name}.mp4 --frame_rate=20 --save_videos
```
**Q** 使用YOLOv3模型如何通过yml文件修改输入图片尺寸
**A** 模型预测部署需要用到指定的尺寸时,首先在训练前需要修改`configs/_base_/yolov3_reader.yml`中的`TrainReader``BatchRandomResize``target_size`包含指定的尺寸,训练完成后,在评估或者预测时,需要将`EvalReader``TestReader`中的`Resize``target_size`修改成对应的尺寸,如果是需要模型导出(export_model),则需要将`TestReader`中的`image_shape`修改为对应的图片输入尺寸 。
**Q** 以前的模型都是用静态图训练的,现在想用动态图训练,但想加载原来静态图的模型作为预训练模型,可以直接用加载静态图保存的模型断点吗?如不行,有其它方法吗?
**A** 静态图和动态图模型的权重的key做下映射一一对应转过去是可以的可以参考[这个代码](https://github.com/nemonameless/weights_st2dy )。但是不保证所有静态图的权重的key映射都能对应上静态图是把背景也训练了动态图去背景类训的而且现有动态图模型训出来的一般都比以前静态图更高资源时间够的情况下建议还是直接训动态图版本。
**Q** TTFNet训练过程中hm_loss异常
**A** 如果是单卡的话学习率需要对应降低8倍。另外ttfnet模型因为自身设置的学习率比较大可能会出现其他数据集训练出现不稳定的情况。建议pretrain_weights加载官方release出的coco数据集上训练好的模型然后将学习率再调低一些。

View File

@@ -0,0 +1,104 @@
# FAQ第零期
**Q:** 为什么我使用单GPU训练loss会出`NaN`? </br>
**A:** 配置文件中原始学习率是适配多GPU训练(8x GPU)若使用单GPU训练须对应调整学习率例如除以8
以[faster_rcnn_r50](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/configs/faster_rcnn/faster_rcnn_r50_1x_coco.yml) 为例,在静态图下计算规则表如下所示,它们是等价的,表中变化节点即为`piecewise decay`里的`boundaries`: </br>
| GPU数 |batch size/卡| 学习率 | 最大轮数 | 变化节点 |
| :---------: | :------------:|:------------: | :-------: | :--------------: |
| 2 | 1 | 0.0025 | 720000 | [480000, 640000] |
| 4 | 1 | 0.005 | 360000 | [240000, 320000] |
| 8 | 1| 0.01 | 180000 | [120000, 160000] |
* 上述方式适用于静态图下。在动态图中由于训练以epoch方式计数因此调整GPU卡数后只需要修改学习率即可修改方式和静态图相同.
**Q:** 自定义数据集时,配置文件里的`num_classes`应该如何设置? </br>
**A:** 动态图中,自定义数据集时将`num_classes`统一设置为自定义数据集的类别数即可,静态图中(static目录下)YOLO系列模型和anchor free系列模型将`num_classes`设置为自定义数据集类别即可其他模型如RCNN系列SSDRetinaNetSOLOv2等模型由于检测原理上分类中需要区分背景框和前景框设置的`num_classes`须为自定义数据集类别数+1即增加一类背景类。
**Q:** PP-YOLOv2模型训练使用`—eval`做训练中验证在第一次做eval的时候hang住,该如何处理?</br>
**A:** PP-YOLO系列模型如果只加载backbone的预训练权重从头开始训练的话收敛会比较慢当模型还没有较好收敛的时候做预测时由于输出的预测框比较混乱在NMS时做排序和滤除会非常耗时就好像eval时hang住了一样这种情况一般发生在使用自定义数据集并且自定义数据集样本数较少导致训练到第一次做eval的时候训练轮数较少模型还没有较好收敛的情况下可以通过如下三个方面排查解决。
* PaddleDetection中提供的默认配置一般是采用8卡训练的配置配置文件中的`batch_size`数为每卡的batch size若训练的时候不是使用8卡或者对`batch_size`有修改,需要等比例的调小初始`learning_rate`来获得较好的收敛效果
* 如果使用自定义数据集并且样本数比较少,建议增大`snapshot_epoch`数来增加第一次进行eval的时候的训练轮数来保证模型已经较好收敛
* 若使用自定义数据集训练可以加载我们发布的COCO或VOC数据集上训练好的权重进行finetune训练来加快收敛速度可以使用`-o pretrain_weights=xxx`的方式指定预训练权重xxx可以是Model Zoo里发布的模型权重链接
**Q:** 如何更好的理解reader和自定义修改reader文件
```
# 每张GPU reader进程个数
worker_num: 2
# 训练数据
TrainReader:
inputs_def:
num_max_boxes: 50
# 训练数据transforms
sample_transforms:
- Decode: {} # 图片解码将图片数据从numpy格式转为rgb格式是必须存在的一个OP
- Mixup: {alpha: 1.5, beta: 1.5} # Mixup数据增强对两个样本的gt_bbbox/gt_score操作构建虚拟的训练样本可选的OP
- RandomDistort: {} # 随机颜色失真可选的OP
- RandomExpand: {fill_value: [123.675, 116.28, 103.53]} # 随机Canvas填充可选的OP
- RandomCrop: {} # 随机裁剪可选的OP
- RandomFlip: {} # 随机左右翻转默认概率0.5可选的OP
# batch_transforms
batch_transforms:
- BatchRandomResize: {target_size: [320, 352, 384, 416, 448, 480, 512, 544, 576, 608], random_size: True, random_interp: True, keep_ratio: False}
- NormalizeBox: {}
- PadBox: {num_max_boxes: 50}
- BboxXYXY2XYWH: {}
- NormalizeImage: {mean: [0.485, 0.456, 0.406], std: [0.229, 0.224, 0.225], is_scale: True}
- Permute: {}
- Gt2YoloTarget: {anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]], anchors: [[10, 13], [16, 30], [33, 23], [30, 61], [62, 45], [59, 119], [116, 90], [156, 198], [373, 326]], downsample_ratios: [32, 16, 8]}
# 训练时batch_size
batch_size: 24
# 读取数据是否乱序
shuffle: true
# 是否丢弃最后不能完整组成batch的数据
drop_last: true
# mixup_epoch大于最大epoch表示训练过程一直使用mixup数据增广。默认值为-1表示不使用Mixup。如果删去- Mixup: {alpha: 1.5, beta: 1.5}这行代码则必须也将mixup_epoch设置为-1或者删除
mixup_epoch: 25000
# 是否通过共享内存进行数据读取加速,需要保证共享内存大小(如/dev/shm)满足大于1G
use_shared_memory: true
如果需要单尺度训练则去掉batch_transforms里的BatchRandomResize这一行在sample_transforms最后一行添加- Resize: {target_size: [608, 608], keep_ratio: False, interp: 2}
Decode是必须保留的如果想要去除数据增强则可以注释或删除Mixup RandomDistort RandomExpand RandomCrop RandomFlip注意如果注释或删除Mixup则必须也将mixup_epoch这一行注释或删除或者设置为-1表示不使用Mixup
sample_transforms:
- Decode: {}
- Resize: {target_size: [608, 608], keep_ratio: False, interp: 2}
```
**Q:** 用户如何控制类别类别输出?即图中有多类目标只输出其中的某几类
**A:** 用户可自行在代码中进行修改,增加条件设置。
```
# filter by class_id
keep_class_id = [1, 2]
bbox_res = [e for e in bbox_res if int(e[0]) in keep_class_id]
```
https://github.com/PaddlePaddle/PaddleDetection/blob/b87a1ea86fa18ce69e44a17ad1b49c1326f19ff9/ppdet/engine/trainer.py#L438
**Q:** 用户自定义数据集训练,预测结果标签错误
**A:** 此类情况往往是用户在设置数据集路径时候并没有关注TestDataset中anno_path的路径问题。需要用户将anno_path设置成自己的路径。
```
TestDataset:
!ImageFolder
anno_path: annotations/instances_val2017.json
```
**Q:** 如何打印网络FLOPs
**A:**`configs/runtime.yml`中设置`print_flops: true`同时需要安装PaddleSlim(比如pip install paddleslim)即可打印模型的FLOPs。
**Q:** 如何使用无标注框进行训练?
**A:**`configs/dataset/coco.py` 或者`configs/dataset/voc.py`中的TrainDataset下设置`allow_empty: true`, 此时允许数据集加载无标注框进行训练。该功能支持cocovoc数据格式RCNN系列和YOLO系列模型验证能够正常训练。另外如果无标注框数据过多会影响模型收敛在TrainDataset下可以设置`empty_ratio: 0.1`对无标注框数据进行随机采样控制无标注框的数据量占总数据量的比例默认值为1.,即使用全部无标注框

View File

@@ -0,0 +1,6 @@
# FAQ/常见问题
**PaddleDetection**非常感谢各位开发者提出任何使用问题或需求,我们根据大家的提问,总结**FAQ/常见问题**合集,并在**每周一**进行更新以下是往期的FAQ欢迎大家进行查阅。
- [FAQ第零期](./FAQ第零期.md)
- [FAQ第一期](./FAQ第一期.md)