引言

  本文进一步提高了one-stage检测器的性能,设计出了一个one-stage目标检测器,并首次达到了更复杂的two-stage检测器所能实现的最高COCO平均精度,例如FPN(特征金字塔网络,Feature Pyramid Network) 或 Mask R-CNN(Faster R-CNN的变体),本文发现训练过程中的类别不平衡是阻碍one-stage检测器实现这个结果的主要障碍,并提出了一种新的损失函数来消除这个障碍。
  R-CNN 检测器通过两阶段的级联(cascade)和启发式采样(sampling heuristics)解决类别不平衡问题。Proposal 阶段(如Selective Search、EdgeBoxes、DeepMask和RPN)可以快速地将候选目标位置的数目缩至更小(例如1000-2000),过滤掉大多数背景样本。在接下来的分类阶段中,应用启发式抽样法(sampling heuristics),例如一个固定的前景样本背景样本比(1:3),或者在线困难样本挖掘法(online hard example mining),在foreground样本和background样本之间维持可控的平衡。相反,one-stage检测器则必须处理一个由图像中规则分布的候选目标位置组成的大样本集。在实践中,目标位置的总数目通常可达10万左右,并且密集覆盖空间位置、尺度和长宽比。虽然还可以应用类似的抽样启发法,但是这些方法在易分类的背景样本支配训练过程的情况下依然会失效。这种失效是目标识别中的一个典型问题,通常使用 bootstrapping或困难样本挖掘来解决。
  在本文中,提出了一个新的损失函数Focal Loss,它可以替代以往用于解决类别失衡问题的方法,这个损失函数是一个动态缩放的交叉熵损失函数,随着正确分类的置信度增加,函数中的比例因子缩减至零,见图1。

  在训练过程中,这个比例因子可以自动地减小简单样本的影响,并快速地将模型集中在困难样本上。试验证明,Focal Loss函数可以帮助训练出准确度很高的one-stage检测器,并且在性能上超越使用抽样启发法或困难样本挖掘法等以往优秀方法训练出的one-stage检测器。
  为了证明这个Focal Loss函数的有效性,本文还设计了一个简单的one-stage目标检测器—RetinaNet,它会对输入图像中目标位置进行密集抽样。效果如图2所示。

相关工作

  Class Imbalance:像SSD这样的经典一阶段检测器在训练中都面临类别不平衡问题。通常对每张候选图会产生104-105个候选框,但只有极少数内存在物体。这种类不平衡导致两个问题:
  ①绝大多数候选框定位是简单负样本,贡献了无用的学习信号,对它们的训练是无效的,因此训练效果低下。
  ②简单负样本过多会使得模型变得更差。
  常见的解决方案是进行困难样本挖掘,而本文的方案是提出Focal loss,自然地处理了一阶段检测器所面临的类别不平衡,并允许在没有采样的情况下有效地训练所有样本。
  Robust Estimation:人们对设计鲁棒损失函数(如Huber损失(《The elements of statistical learning》))非常感兴趣,这些函数通过降低难样本的loss权重来降低离散值的对网络的贡献。相反,Focal loss通过降低inliers(简单样本)的权重来解决类不平衡问题,使得即使它们的数量很大,它们对总损失的贡献也很小。换句话说,Focal loss与稳健损失起着相反的作用:它将训练集中在一组稀疏的难样本上。

方法

  原本交叉熵损失函数表示为:

  为了简化,定义ptp_tpt​为:

  公式简化为:

  对于普通的CE loss,由于负样本数量巨大,正样本很少,所以负样本被错分为正样本的loss会占据loss的主导。那么好的做法就是,尽量减少负样本loss所占的比例,或者增大正样本被错分为负样本的loss所占的比例。图1展示了损失函数值随γ的变化曲线,对于背景区域,分类器有非常大置信度认为它是背景,所以背景区域属于上图中的well-classified examples。当γ为0时,这个区域损失函数值比较大,而随着γ增大,这个区域损失函数值逐渐减小,也就说明随着γ值变大,背景区域的损失函数占总体损失函数的比例在下降,模型能够更加注意对损失函数的优化有意义的样本。

  首先要让正负样本所占的比例均衡,本文直接在CE loss前面乘以一个参数α,这样可以方便控制正负样本loss所占的比例,

  然而,尽管这样做可以做可以起到一些作用,如果分类的结果接近正确,比如正样本以0.9的概率被分为正样本,但是0.9和1之间也是有loss的,这部分loss也会因为前面乘了一个α被放大,这属实没必要,因此认为被分类的足够好的样本loss不需要太大的α权重,而被错分严重的,比如预测概率小于0.5的正样本,我们需要将他的loss放大,错分越严重loss应该被放大的越多,因此可以用下面的指数函数来实现,也就是本文提出的Focal loss。
  在实验中,采用如下的形式:

  论文还提出了one-stage检测器RetinaNet,由骨干网络和两个特定任务子网组成,骨干负责计算整个输入图像上的卷积特征映射,并且是一种通用(off-the-shelf)的卷积网络,第一个子网在骨干的输出上执行卷积对象分类;第二个子网执行卷积BBox回归。网络结构如图3所示:

  骨干网络是由ResNet和特征金字塔网络(FPN)组成,第一个子网class subnet先用4个C通道33的卷积核卷积+relu激活,然后用KA个通道的33的卷积核卷积,用sigmoid来激活最后一层,对每个特征层进行类别预测。KA是K种类别A个anchor的预测结果,实验中设置C = 256,A = 9。
  第二个子网box subnet也差不多,后面接着FCN,以便从每个anchor到附近的真实物体(如果存在)进行回归,最后一层通道数是4A。class subnet和box subnet共享结构,参数独立。

实验

  对RetinaNet和Focal Loss的消融实验如表1所示

  与COCO上的SOTA方法比较如表2所示:

总结

  单阶段的很多检测方法在精度上会被二阶段的方法领先很多,作者就以此为出发点,研究单阶段方法的精度差的原因,作者认为是因为单阶段检测器中样本的失衡,负样本比例远远大于正样本,占据样本中多数,我刚开始看到作者描述大量的anchor覆盖到了背景上,然后目标只占很小一部分的时候,寻思只要是基于anchor的都会这样吧,然后细想,二阶段也不是没有这种问题,只是它第一个阶段就是会删除很多覆盖背景的anchor也就是负样本,所以第二阶段就保证了正负样本不会严重失衡。然后本文就提出了Focal loss方法来解决不平衡问题,思路很清晰,就是在原有的分类损失函数上,加上权重因子,减小易区分样本的权重,加大难区分样本的权重,相比之下,提出的RetinaNet就没什么特殊的,就是使用ResNet+FPN作为骨干网络,再利用Focal loss作为损失函数。

Focal Loss简述相关推荐

  1. 一、Focal Loss理论及代码实现

    文章目录 前言 一.基本理论 二.实现 1.公式 2.代码实现 1.基于二分类交叉熵实现. 2.知乎大佬的实现 前言 本文参考:几时见得清梦博主文章 参考原文:https://www.jianshu. ...

  2. 剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选

    作者 | 图像所浩南哥 来源 | CSDN博客 论文名称:< Focal Loss for Dense Object Detection > 论文下载:https://arxiv.org/ ...

  3. NeurIPS 2020 | Focal Loss改进版来了!GFocal Loss:良心技术,无Cost涨点!

    本文作者:李翔 https://zhuanlan.zhihu.com/p/147691786 本文仅供学习参考,如有侵权,请联系删除! 论文地址:https://arxiv.org/abs/2006. ...

  4. 清晰易懂的Focal Loss原理解释

    来源:https://www.cnblogs.com/king-lps/p/9497836.html 编辑:石头 1. 总述 Focal loss主要是为了解决one-stage目标检测中正负样本比例 ...

  5. 无痛涨点!大白话讲解 Generalized Focal Loss

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨李翔 来源丨https://zhuanlan.zhihu.c ...

  6. 目标检测--Focal Loss for Dense Object Detection

    Focal Loss for Dense Object Detection ICCV2017 https://arxiv.org/abs/1708.02002 本文算是用简单的方法解决复杂的问题了,好 ...

  7. 堪比Focal Loss!解决目标检测中样本不平衡的无采样方法

    训练目标检测模型的一个难点是样本不均衡,特别是正负样本比例严重失衡.目前解决这类问题主要是两种方案(见综述Imbalance Problems in Object Detection: A Revie ...

  8. Focal Loss和它背后的男人RetinaNet

    说起Focal Loss,相信做CV的都不会陌生,当面临正负样本不平衡时可能第一个想到的就是用Focal Loss试试.但是怕是很多人会不知道这篇论文中所提出的one stage目标检测模型Retin ...

  9. Focal Loss升级:让Focal Loss动态化,类别极端不平衡也可以轻松解决

    学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 尽管最近长尾目标检测取得了成功,但几乎所有的长尾目标检测器都是基于两阶段范式开发的.在实践中,一阶段检测器在行业中更为普遍 ...

  10. Focal Loss升级 E-Focal Loss让Focal Loss动态化,类别极端不平衡也得到提升

    尽管最近长尾目标检测取得了成功,但几乎所有的长尾目标检测器都是基于两阶段范式开发的.在实践中,一阶段检测器在行业中更为普遍,因为它们有一个简单和快速的Pipeline,易于部署.然而,在长尾情况下,这 ...

最新文章

  1. 【转】HTTP协议详解
  2. 文献记录(part50)--时空聚类分析的普适性方法
  3. : 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-fronte
  4. pat 乙级 1021 个位数统计(C++)
  5. mysql索引参数_MySQL索引介绍
  6. html定位的所有属性,HTML CSS定位属性详解 嘿嘿嘿
  7. mysql怎么避免联合查询_mysql-联合查询,连接查询
  8. 为什么火车上的网速都超级慢,并且信号极差?
  9. wince -- 线程中SetEvent及WaitForSingleObject用法
  10. MEVN框架基础知识
  11. mysql中的utf-8_永远不要在MySQL中使用UTF-8
  12. 华为手机解锁码快速申请方式
  13. linux/windows_powershell/bash_硬链接Hardlink/软连接(符号链接)创建以及注意事项/powershell_获取文件绝对路径/linux符号链接检查
  14. 2021招生之友+录取统计_电子版免费分享
  15. 怎么给表格加一列序号_如何给word表格添加一列序号?
  16. vs2015c语言内嵌汇编,C#中内嵌资源的读取
  17. 最难毕业季,会Python简直可以开挂!!
  18. B树和B+树的查找方式及原因
  19. 2015 重庆市赛 解题报告
  20. [转载]烟台话--普通话对照表

热门文章

  1. 工作之外的闲暇时光(玩魔方)
  2. PHP:使用pecl安装 swoole
  3. 淘宝卖家如何有效控制直通车展现?
  4. java获取pfx证书私钥_从PFX文件中读取私钥
  5. 一本通1548【例 2】A Simple Problem with Integers
  6. java bouncycastle,使用BouncyCastle在Java中使用ECIES进行加密
  7. java文件上传后台
  8. windows 10目标文件夹访问被拒绝(没有权限)或者(你需要来自XXX的权限才能对此文件夹进行更改 )
  9. SEO文章优化,内容SEO优化,SEO文章内容优化
  10. wow服务器合并信息,WOW魔兽世界5月21日大服务合并维护 二区合并至电信区