【论文阅读】【二维目标检测】Generalized Focal Loss

文章:Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection
地址:https://arxiv.org/pdf/2006.04388.pdf

Motivation

物体分类

在object detection任务中,是存在分类和回归的两个结果的。为了减少冗余检测,通常使用NMS来消除低质量的框,那么NMS用的分数最直接想到的就是分类分数。(其实也是因为object detection中最后出来也只有这一个分数)

但上述方法就会出现一个问题,分类问题的分数只受类别监督,是与框的定位无关的。也就是说,有可能出现一个预测框,它的IoU比较小但分类分数很高,这样经过NMS就会保留下来,而且抑制掉IoU大但分类分数低的框。这是我们不想见到的,而且评价一个框的好坏标准其实就是IoU。换一种说法,也就是用分类分数做NMS这个过程,是与IoU割裂的,因为分类分数在训练过程中是与IoU无关的。

那这就有个想法:除了分类分数,再预测一个IoU分数,在预测过程中,将分类分数和IoU分数相乘,得到的分数送入NMS。这样NMS过程中,就会引入IoU,从而解决上面的问题。这就是FCOS(FCOS: Fully Convolutional One-Stage Object Detection)所做的事情。

但本文提出,这仍然有个问题,在训练的时候,IoU分数都是用正样本训练的,也就是说正样本的IoU分数可以很好的被预测。但负样本的IoU分数则是一个未定义的问题,在inference过程中,负样本也会被预测一个IoU分数,这个分数可能很大,也可能很小,这就会出现问题:一个IoU分数很高的负样本最终的得分高于一个IoU分数较低的正样本,经过NMS就会出错。就例如下图中的AB样例:
在这里插入图片描述

也就是说,FCOS这种预测一个IoU分数的带来的问题,是负样本的IoU分数未定义,在训练过程中未参与训练。那我这里提出一个想法:将负样本的IoU分数置0,也参与训练,正负样本数量平衡用对负样本数量降采样的方式进行训练。这种方式也可以解决负样本IoU分数未定义的问题,不知道效果如何?但就解决方法而言,并不如本问提出方法美观。

框回归

作者提出,之前文章均是将框的边界的分布看作为Dirac delta分布,这种分布并未建模框边界的不确定性。作者提出,使用更通用的分布来建模框的边界。

Method

物体分类

对于物体分类这个问题,传统的方法是网络输出一个vector,vector中每个元素是代表预测为该类的概率值,这个vector的监督是由物体真是类别生成的one-hot vector。作者提出,一种新的表示方法,输出仍然是一个vector,只不过vector储存的是物体类别概率值乘以框的质量得分。这个vector的监督也随之改变,也是在类别生成的one-hot vector上乘以一个框的质量得分,由于物体只有一个类别,所以其实监督vector中也只有一个值是不等于0的,在0~1之间。

那这个表示有了,loss该怎么写?传统的01分类问题,可以使用focal loss,在新的表示中,vector中的值变成了一个连续变量。作者提出,每个类别分别应用一个sigmoid focal loss。然后再将focal loss改写,使得focal loss可以适用于连续变量:
在这里插入图片描述

框回归

之前的方法均是将框的边界看为Dirac delta分布,然后用L1 Loss构建loss,使得预测值逼近真实值。作者提出了,学习框边界更为一般的分布。这里不讲是怎么推导出来的,只讲是怎么实现的,怎么推导还是推荐看原文。

举例来说,在feature map上,对于一个要预测的物体的左边界,根据物体的中心,选取 [ y 0 , y 1 , . . . , y n ] [y_0, y_1, ... , y_n] [y0,y1,...,yn]个格子,对于每个格子预测一个score。这个socre就是每个格子对应位置是左边界的概率值。那么如果想要求左边界具体位置,就用格子的位置与预测的score做一个加权平均就可以,其实也就是取期望。

在神经网络结构中,这个对应着regression输出n+1维的vector,然后对vector做softmax,使得所有位置的score加起来等于1。

这个n个格子的score的监督如下设计:根据左边界具体位置,寻找与其最近的两个格子,然后按照距离反比设计权重,其他的n-2个格子的score监督设计为0。这样,这种监督保证了对边界预测的能够收敛到真值上。

这样,边界框回归的问题也转为了分类问题,而且监督是在两个格子上不等于0。那既然上面已经给出了对于连续变量的generalized focal loss的形式,那么这个也是类似,也可以写成如下:
在这里插入图片描述

generalized focal loss

把上面两者,可以统一格式进行表示,实质内容不变,就可以写出generalized focal loss。

在这里插入图片描述

实验效果

效果仍然是很厉害,具体详见论文。

总结

这里贴一个知乎回答:https://zhuanlan.zhihu.com/p/147691786

分类分数不适用于NMS这个问题其实很早学术界就有关注,IoU分支的想法,其实可以从yolov1就可以想到。但本文所想的问题,进一步深入,训练和预测过程中的不匹配的问题。除了问题切中要害,解决方式也非常优美,我觉得是一篇很好的文章。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Generalized Focal Loss是一种处理不平衡数据集的损失函数,它在传统的Focal Loss上进行了改进,可以用于多分类和回归任务。YoloV5是一种目标检测算法,它采用一种基于单个神经网络的方法来实现快速而准确的目标检测。结合使用Generalized Focal LossYoloV5可以进一步提升目标检测的性能。 在目标检测任务中,不同类别的样本数量往往是不平衡的,一些常见的类别可能会有很多样本,而一些罕见的类别可能只有极少数样本。对于这种情况,使用传统的交叉熵损失函数可能会导致网络偏向于训练样本数量较多的类别,而对于那些样本数量较少的类别则表现不佳。 Generalized Focal Loss采用了类似于Focal Loss的方法来处理不平衡数据集,该方法通过降低容易分类的样本的权重来提高难以分类的样本在训练过程中的重要性。此外,Generalized Focal Loss还添加了一些参数来控制样本难度的权重,这提高了模型对于罕见类别的识别能力。 结合Generalized Focal LossYoloV5可以进一步提高目标检测性能。YoloV5现有的版本已经使用Focal Loss来处理类别不平衡的问题,但使用Generalized Focal Loss可以更加灵活地进行参数调节。通过用Generalized Focal Loss替换原有的损失函数,可以减少误分类样本的影响,提高整个模型对于样本数量较少的类别的识别能力,从而进一步提高整个目标检测系统的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值