PaddleDetection RCNN模型实战
skywalk163 发布于2020-09-25 23:29 浏览:528 回复:0
0
收藏
最后编辑于2020-09-25

参加目标检测7日打卡营,RCNN系列模型优化策略里的作业实战问题记录

作业说明:基于PaddleDetection中的RCNN系列算法,完成印刷电路板(PCB)瑕疵数据集的训练与评估任务。要求在验证集上采用IoU=0.5,area=all的mAP作为评价指标,得分=mAP * 100,范围[0,100],分数越高模型效果越好,及格线是60分。鼓励大家使用GPU训练,CPU训练的结果不纳入排行榜。

 

修改使用cascade最优配置
cascade_rcnn_dcn_r101_fpn_3x_server_side.yml

 

命令

!python -u tools/train.py -c ../cascade_rcnn_r50_fpn_1x.yml –eval

 

报错:

InvalidArgumentError: Broadcast dimension mismatch. Operands could not be broadcast together with the shape of X = [1, 64, 200, 223] and the shape of Y = [1, 64, 200, 224]. Received [223] in X is not equal to [224] in Y at i:3.

  [Hint: Expected x_dims_array[i] == y_dims_array[i] || x_dims_array[i] <= 1 || y_dims_array[i] <= 1 == true, but received x_dims_array[i] == y_dims_array[i] || x_dims_array[i] <= 1 || y_dims_array[i] <= 1:0 != true:1.] at (/paddle/paddle/fluid/operators/elementwise/elementwise_op_function.h:157)

当时就想把canonical_size: 224 改成223试试,结果当然是不行啦!后来报了issue,才明白问题所在。

 

issue:https://github.com/PaddlePaddle/PaddleDetection/issues/1492

回信了:只要RCNN里加了FPN就要将输入图片padding到32的倍数,你的Reader请参考faster_fpn_reader.yml,修改配置文件时请注意一下。

 

因此需要在数据读取部分加入:

  batch_transforms:

  - !PadBatch

    pad_to_stride: 32

use_padded_im_info: false

 

当然我的理解是训练和验证都要加,文档中是这样写的:

训练部分:

  batch_transforms:

  - !PadBatch

    pad_to_stride: 32

use_padded_im_info: false

 

验证部分:

  batch_transforms:

  - !PadBatch

    pad_to_stride: 32

    use_padded_im_info: true

文档链接:

https://github.com/PaddlePaddle/PaddleDetection/blob/release/0.4/configs/faster_fpn_reader.yml#L28-L30

 

在修改配置的时候,我是直接将以前的数据读取部分全部copy过来,而不是在faster_fpn_reader.yml文件里面修改,所以没有pad_to_stride: 32这句。另外老师讲课的时候在开头就提到这个问题了,我没有听到,这也是为什么别人大部分都没有碰到这个问题,而我碰到的原因!

 

由于时间比较紧,在提交截止时间前10分钟,先中断,然后进行了测试分数,提交结果。

 

接着以前跑使用-r参数 如:

!python -u tools/train.py -c ../cascade_rcnn_cls_aware_r101_vd_fpn_1x_softnms.yml --eval -r output/cascade_rcnn_cls_aware_r101_vd_fpn_1x_softnms/6000

 

提交成绩在97.6,提交后继续训练,最终成绩在98.2 

 

同时看文档,关于paddledetection里面的训练轮数问题,可以用这个比例:6 8 9

比如:

GPU数       学习率  最大轮数     变化节点

2    0.0025   720000  [480000, 640000]

4    0.005     360000  [240000, 320000]

8    0.01       180000  [120000, 160000]

表中变化节点即为piecewise decay里的boundaries:

我的理解就是piecewise decay里的milestones的设置

    milestones:

    - 6000

    - 8000

另今天冠军讲课中,讲到在coco数据集中,比较好的比例是:[8, 11, 12] 或者 [16, 19, 20]

 

ECCV2020目标检测双料冠军团队和PP-Yolo核心研发团队亲授

目标检测7日打卡营课程 https://aistudio.baidu.com/aistudio/education/group/info/1617

 

收藏
点赞
0
个赞
TOP
切换版块