计算机视觉之分类任务常用损失值loss对比分析

一、对比分析cross-entropy loss、Focal Loss、asymmetric_loss、GFocal Loss之间的关系及改进

1. 分类任务介绍与损失函数如何设计的合理

分类问题和回归问题是监督学习的两大种类:分类问题的目标变量是离散的;回归问题的目标变量是连续的数值。神经网络模型的效果及优化的目标是通过损失函数来定义的
分类问题如何合理的设计损失函数呢?
1)损失函数的本质在数学上称为目标函数;这个目标函数的目标值符合最完美的需求;损失函数的目标值肯定是0,完美分类的损失必然为0 ;

2)损失函数分为两部分,一部分为正确的分类,一部分为错误的分类;保留其中任何一个部分都可以达到目标;就好比两条路都可以通向罗马;都可以通过转化均可以令损失函数的最小值为0时,为目标值;(当然最小值不一定要为0 );最关键是最小化方向是通向目标值的;

3)多分类问题涉及概率问题,目标函数中设计只保留正确的部分(为什么不保留错误部分,我想都可以达到目的,这里保留正确部分,计算更方便);用极值思维想象完美分类情况下,输出的正确类别的概率必然是1,所以损失函数loss=-1/n(Px1+Px2+Px3+……);Px1代表样本x为x1的情况下,输出样本类别相同的概率;最好的情况就是p值都为1;损失值为0 ,可loss函数为-1;如何设计才能等效呢?答案就是加log函数;Loss=-1/n(logPx1+logPx2+logPx3+……);目标函数最小值就是0;

2.cross-entropy loss和Focal Loss的对比和改进

分类问题常用的损失函数为交叉熵( Cross Entropy Loss)
交叉熵描述了两个概率分布之间的距离,当交叉熵越小说明二者之间越接近.
应用在深度学习中:
单标签多分类问题:
在这里插入图片描述
n是标签类别数

多标签多类分类问题:
多标签多类问题中,每一张图可能会被归为多种标签,每一个Label都是独立分布的,相互之间没有影响。所以交叉熵在这里是单独对每一个类别进行计算,每一个类别只有两种可能值,所以是一个二项分布,每个类别对应的交叉熵公式为:
在这里插入图片描述
优点:
1)能衡量细微的差异。
2)凸优化函数,便于利用梯度下降方法找到最优解。
3)解决了mse在分类初始阶段loss很小,不利于训练的问题
缺点:
1)没有解决困难样本训练问题,
2)没有解决训练样本的imbalance问题。

而Focal Loss改进了Cross Entropy Loss的缺点,解决了one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。

Focal loss是在交叉熵损失函数基础上进行的修改,首先在原有的基础上加了一个因子,其中gamma>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。
在这里插入图片描述

例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。
在这里插入图片描述

此外,加入平衡因子alpha,用来平衡正负样本本身的比例不均:文中alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。

3.asymmetric_loss的介绍与优点

链接: 论文地址.
链接: github地址.
2020年论文作者基于focal loss解决正负样本不平衡问题,提出了focal loss的改进版,一种非对称的loss,即Asymmetric Loss。
在这里插入图片描述
在focal loss上的改进为:
1)设计了一个新颖的loss,解决了多标签分类任务中,正负样本不平衡问题,标签错误问题。
通过梯度分析,对该loss进行了分析。
2)提出了自适应的方法来控制非对称的级别,简化了超参数选择过程。
3)使用ASL loss,在主流的数据集上取得了 state-of-the-art的效果。其中, MS-COCO 达到86.6%map,超过之前最好的结果2.8%。
4)该方法,高效,容易使用。相比于最近的其他方法,该方法基于主流的网络结构,并且不需要其他的信息。
非对称loss-ASL:
在这里插入图片描述
Asymmetric Loss:
在这里插入图片描述
为了方便,可以设置 γ+ = 0,这样L+就是正常的交叉熵损失。而L-可以通过阈值m减少容易负样本的loss贡献。其中, γ− > γ+。

总结:
1)ASL loss,一种基于focal loss改进的非对称loss,不仅具备focal loss进行正负样本平衡的作用,还具备减少容易负样本loss贡献的效果。
2)本文验证ASL loss的落脚点是单标签分类,但是,ASL loss不仅可以应用于单标签分类,还可以应用于多标签分类任务,物体检测任务。对缓解长尾(long-tail)数据分布具有很好的效果。

4.GFocal Loss介绍与优点

链接: 论文地址.
链接: github地址.

Focal Loss改进版本GFocal Loss(Generalized Focal Loss),基于任意one-stage 检测器上,调整框本身与框质量估计的表示,同时用泛化版本的GFocal Loss训练该改进的表示,AP提升约一个点左右。
GFocal Loss围绕表示(representation)进行改进

  1. 分类表示
  2. 检测框表示
  3. 检测框的质量估计(在FCOS/ATSS中,目前采用centerness,当然也有一些其他类似的工作会采用IoU,这些score基本都在0~1之间)

三个表示一般情况下如图所示:
在这里插入图片描述
三个表示中
那么要改进表示一定意味着现有的表示或多或少有那么一些问题。
主要的问题:classification score 和 IoU/centerness score 训练测试不一致。
这个不一致主要体现在两个方面:

1) 用法不一致。训练的时候,分类和质量估计各自训自己的,但测试的时候却又是乘在一起作为NMS score排序的依据,这个操作显然没有end-to-end,必然存在一定的gap。

2) 对象不一致。借助Focal Loss的力量,分类分支能够使得少量的正样本和大量的负样本一起成功训练,但是质量估计通常就只针对正样本训练。那么,对于one-stage的检测器而言,在做NMS score排序的时候,所有的样本都会将分类score和质量预测score相乘用于排序,那么必然会存在一部分分数较低的“负样本”的质量预测是没有在训练过程中有监督信号的,有就是说对于大量可能的负样本,他们的质量预测是一个未定义行为。这就很有可能引发这么一个情况:一个分类score相对低的真正的负样本,由于预测了一个不可信的极高的质量score,而导致它可能排到一个真正的正样本(分类score不够高且质量score相对低)的前面。问题一如图所示:
在这里插入图片描述
解决方式:
为了保证training和test一致,同时还能够兼顾分类score和质量预测score都能够训练到所有的正负样本,那么一个方案呼之欲出:就是将两者的表示进行联合。这个合并也非常有意思,从物理上来讲,我们依然还是保留分类的向量,但是对应类别位置的置信度的物理含义不再是分类的score,而是改为质量预测的score。这样就做到了两者的联合表示,同时,暂时不考虑优化的问题,我们就有可能完美地解决掉第一个问题。
Generalized Focal Loss是怎么优化它们的呢?
1)我们知道之前Focal Loss是为one-stage的检测器的分类分支服务的,它支持0或者1这样的离散类别label。然而,对于我们的分类-质量联合表示,label却变成了0~1之间的连续值。我们既要保证Focal Loss此前的平衡正负、难易样本的特性,又需要让其支持连续数值的监督,自然而然就引出了我们对Focal Loss在连续label上的拓展形式之一,我们称为Quality Focal Loss (QFL),具体地,它将原来的Focal Loss从:
在这里插入图片描述
改进为
在这里插入图片描述
其中y为0~1的质量标签,sigma为预测。注意QFL的全局最小解即是sigma = y。这样交叉熵部分变为完整的交叉熵,同时调节因子变为距离绝对值的幂次函数。和Focal Loss类似,我们实验中发现一般取eta = 2为最优。

2)同时考虑到真实的分布通常不会距离标注的位置太远,所以我们又额外加了个loss,希望网络能够快速地聚焦到标注位置附近的数值,使得他们概率尽可能大。基于此,我们取了个名字叫Distribution Focal Loss (DFL):
在这里插入图片描述
其形式上与QFL的右半部分很类似,含义是以类似交叉熵的形式去优化与标签y最接近的一左一右两个位置的概率,从而让网络快速地聚焦到目标位置的邻近区域的分布中去。

3)最后,QFL和DFL其实可以统一地表示为GFL,我们将其称之为Generalized Focal Loss,同时也是为了方便指代,其具体形式如下:
在这里插入图片描述
优点

  1. 这两个方法,即QFL和DFL的作用是正交的,他们的增益互不影响,所以结合使用更香(我们统一称之为GFL)。我们在基于Resnet50的backbone的ATSS(CVPR20)的baseline上1x训练无multi-scale直接基本无cost地提升了一个点,在COCO validation上从39.2 提到了40.2 AP。融合了交叉熵损失(cross-entropy loss)和Focal Loss两者的优点,使得多分类任务以及在检测任务事效果变得更好。

  2. 在2x + multi-scale的训练模式下,在COCO test-dev上,Resnet50 backbone用GFL一把干到了43.1 AP,这是一个非常可观的性能。同时,基于ResNeXt-101-32x4d-DCN backbone,能够有48.2的AP且在2080Ti单GPU上有10FPS的测速,还是相当不错的speed-accuracy trade-off了。
    实验结果图
    在这里插入图片描述
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值