yolo如何降低loss_为什么 YOLOv3 用了 Focal Loss 后 mAP 反而掉了?

我发现一个点没见有人提到,欢迎讨论~

先说结论:我认为没有提升可能是因为,ignore的阈值设置过高,导致负例样本中出现label noise

首先,我是将focal loss用在objectness的损失上,判断有或没有,一个二分类问题。

YOLOv3在处理这个二分类问题时,样本(所有anchor框)有3种状态:被标为正例,被标为负例,ignore。是否ignore是由一个阈值控制,论文中设为0.5,即与gt的iou超过0.5就会被ignore。这里要注意的是,如果不超过0.5,则是会被标为负例的。

再看focal loss。focal loss是给困难样本更大的权重,困难样本是那些分类效果不好的点。而在考虑label noise时,分类效果不好的点将由两部分组成,一是标签打错了,二是困难样本。所以focal loss的逻辑会给这两部分样本都更高的权重,因此如果有比较多样本标签打错了,效果就会不好。

我认为在yolo中标签打错了的问题是存在的,即它本来应该是1,但被标成了0,这就和上面说的ignore问题有关。看下面这张图

物体中心落入红色网格内,则只有这个网格的某些anchor会被标为正例,其他所有网格的anchor要么被标为负例要么ignore。蓝色网格里的anchor还比较可能和gt有较大iou,但黄色里的anchor和gt的iou就不太可能超过0.5,于是黄色网格中的anchor都会被标为负例,但实际上这里也有物体,标为负例强行让网络判断为没有物体就不太合适,所以就造成了label noise。

如果我们能把阈值调低,让更多样本被ignore,就能减少误标的情况,从而提高结果。

这是我在跑一个实验中发现的,虽然衡量指标不是map,但结果却是佐证了上述分析的。实验的结果是这样的:原实验是用交叉熵损失,阈值0.5,。如果单独换成focal loss,或者单独将阈值变成0.3,则结果都有微小的下降;但如果同时换focal loss和阈值0.3,则结果有1.5个点的提升。

欢迎大家批评指正~

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值