首页 PaddleCV 帖子详情
使用PaddleDetection时候发现训练时验证mAP很高但实测效果比较差该怎么办 已解决
收藏
快速回复
PaddleCV 其他目标检测 2146 6
使用PaddleDetection时候发现训练时验证mAP很高但实测效果比较差该怎么办 已解决
收藏
快速回复
PaddleCV 其他目标检测 2146 6

前几天我使用了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
收藏
回复
全部评论(6)
时间顺序
DeepGeGe
#2 回复于2021-12
        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,
                    overlap_thresh=0.8)
            ]

在这里添加一个overlap_thresh=0.8即可更改计算mAP时候判定预测框和真实框IoU正确的阈值。

开发套件确实提供了非常大的便利,在实际开发中,要想将开发套件用好,必须理解开发套件的相关源码,做到可以随心所欲地更改相关指标模块。

0
回复
李长安
#3 回复于2021-12

优秀

0
回复
儒雅少年王德发
#4 回复于2022-02

学习到了

0
回复
李海钰1216
#5 回复于2022-04

楼主加了那一句改变了多少啊

0
回复
李长安
#7 回复于2022-07

yaml文件里没有这个嘛

0
回复
嘈杂中的宁静
#8 回复于2023-07
[代码] 在这里添加一个overlap_thresh=0.8即可更改计算mAP时候判定预测框和真实框IoU正确的阈值。 开发套件确实提供了非常大的便利,在实际开发中,要想将开发套件用好,必须理解开发套件的相关源码,做到可以随心所欲地更改相关指标模块。
展开

大佬,这段代码存在在哪个文件中啊?或者加载在哪里啊?如果是加载,没看到对应的位置啊。救救小白

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户