使用PaddleDetection时候发现训练时验证mAP很高但实测效果比较差该怎么办
收藏
前几天我使用了PaddleDetection开发套件来进行目标检测,使用自己的数据集,更改相关的配置文件,并开启训练。
训练过程中可以看到loss逐步降低,验证mAP逐渐提高。完成训练后,我去实际测试时候发现检测框和实际目标位置存在较大的偏差,哪怕在训练集上都有较大的偏差,这是为什么呢?
为什么mAP很高,但是检测偏差那么大呢?
根据实际分析,发现PaddleDetection中mAP计算时,判断一个框是否正确是根据预测框和实际框的交并比IoU,分析源码可知,在PaddleDetection中,这个阈值设定为了0.5,也就是预测框和实际框的交并比大于0.5就会认为检测正确。这样会造成指标很高,但是实际效果不符合预期的情况。
检查配置文件之后,我发现PaddleDetection套件配置文件中并不支持修改这个阈值,因此就只能去源码中修改了。
step into进源码,发现这个阈值实在初始化VOCMetric(我使用的是VOC格式的数据集)时候设定的,而创建这个VOCMetric对象实在trainer.py文件中下面这段代码中创建:
elif self.cfg.metric == 'VOC':
self._metrics = [
VOCMetric(
label_list=self.dataset.get_label_list(),
class_num=self.cfg.num_classes,
map_type=self.cfg.map_type,
classwise=classwise)
]
通过代码可以看到,初始化VOCMetrics时候并没有设定 overlap_thresh的值,因此在这个初始化VOCMetrics的地方添加一行代码,就可以让mAP指标和实际效果很接近了。
添加代码如下:
DeepGeGe
已解决
2#
回复于2021-12
[代码] 在这里添加一个overlap_thresh=0.8即可更改计算mAP时候判定预测框和真实框IoU正确的阈值。 开发套件确实提供了非常大的便利,在实际开发中,要想将开发套件用好,必须理解开发套件的相关源码,做到可以随心所欲地更改相关指标模块。
0
收藏
请登录后评论
在这里添加一个overlap_thresh=0.8即可更改计算mAP时候判定预测框和真实框IoU正确的阈值。
开发套件确实提供了非常大的便利,在实际开发中,要想将开发套件用好,必须理解开发套件的相关源码,做到可以随心所欲地更改相关指标模块。
优秀
学习到了
楼主加了那一句改变了多少啊
yaml文件里没有这个嘛
大佬,这段代码存在在哪个文件中啊?或者加载在哪里啊?如果是加载,没看到对应的位置啊。救救小白