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

  • 一、对比分析cross-entropy loss、Focal Loss、asymmetric_loss、GFocal Loss之间的关系及改进
    • 1. 分类任务介绍与损失函数如何设计的合理
    • 2.cross-entropy loss和Focal Loss的对比和改进
    • 3.asymmetric_loss的介绍与优点
    • 4.GFocal 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了。
    实验结果图

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

  1. 【CV】RetinaNet:使用二分类类别不平衡损失 Focal Loss 实现更好的目标检测

    论文名称:Focal Loss for Dense Object Detection 论文下载:https://arxiv.org/abs/1610.02357 论文年份:ICCV 2017 论文被引 ...

  2. 训练集损失值loss、测试集val_loss、验证集loss相关问题总结

    loss是训练集的损失值,val_loss是测试集的损失值 如何判断模型是否可以继续训练?(或者说好坏) 以下是loss与val_loss的变化反映出训练走向的规律总结: train loss 不断下 ...

  3. 多标签分类之非对称损失-Asymmetric Loss

    论文:Asymmetric Loss For Multi-Label Classification GitHub:https://github.com/Alibaba-MIIL/ASL https:/ ...

  4. 常用电机驱动芯片的对比分析

    在电机控制领域,电机驱动芯片是必不可少的元件.它们负责将控制信号转换为驱动电机的电流,从而实现对电机的精确控制.本文将对比分析几种不同类型的电机驱动芯片,包括直流电机驱动芯片.步进电机驱动芯片和无刷直 ...

  5. 常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

  6. 图像分割之常用损失函数-Dice Loss

    哈喽大家好 ! 我是唐宋宋宋,很荣幸与您相见!! Dice Loss Dice Loss是由Dice系数而得名的,Dice系数是一种用于评估两个样本相似性的度量函数,其值越大意味着这两个样本越相似,D ...

  7. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

  8. 深度学习分类任务常用评估指标

    摘要:这篇文章主要向大家介绍深度学习分类任务评价指标,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. 本文分享自华为云社区<深度学习分类任务常用评估指标>,原文作者: ...

  9. 深度学习常用损失MSE、RMSE、MAE和MAPE

    MSE 均方差损失( Mean Squared Error Loss) MSE是深度学习任务中最常用的一种损失函数,也称为 L2 Loss MSE是真实值与预测值的差值的平方然后求和平均 范围[0,+ ...

最新文章

  1. mysql双机热备的实现
  2. 关于学习Python的一点学习总结(47->静态方法和类方法)
  3. javascript经典广告代码.rar
  4. C/C++中*和的用法详解
  5. java 标志一个方法为过时方法
  6. 小米Android系统限制联网,Android 7 以上版本,绕过CA限制,抓取https
  7. [原]Jenkins(二十一) jenkins再出发Build periodically和Poll SCM
  8. 我和我的项目之整合腾讯云短信SDK
  9. matlab车牌识别课程设计,matlab车牌识别课程设计报告模板(附源代码)
  10. 一套价值800元的爱代挂源码完整版
  11. shopex PHP Notice,解决最新shopex乱码问题
  12. 站在巨人的肩膀上—英语
  13. 教你如何在电脑上建一个绝密文件夹
  14. c语言ifmn除2余1,C语言编程题及答案 2
  15. ANSYS APDL中的ASEL面选择命令
  16. linux排行榜网站,DistroWatch网站搞的Linux国际排名为它赢得了不少的流量
  17. 双臂冗余机器人solidworks转URDF
  18. 【JWT】JWT 整合
  19. Maya寻找Mel文件的位置
  20. oracle矩阵转置,法线变换、逆转置、伴随转置

热门文章

  1. HTML学习笔记8:表单
  2. 用360流氓软件都删除不了的超级流氓软件
  3. 解决网页出现 net::ERR_ABORTED 404 (Not Found)问题
  4. 怀念Michael Jackson(迈克尔.杰克逊)
  5. TDDFT计算软件Octopus学习笔记(五):介电函数和吸收谱(ZnO)
  6. Android深入--02--下载源码
  7. android 栏目编辑,通达信手机Android V3.09版(20170406) 进一步优化了指标编辑功能...
  8. Python数据采集案例(3):豆瓣电影TOP250采集
  9. 最小二乘参数解析解推导
  10. 一个塑料瓶的海洋“奇幻漂流”