Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >目标检测 | RetinaNet:Focal Loss for Dense Object Detection

目标检测 | RetinaNet:Focal Loss for Dense Object Detection

原创
作者头像
VincentLee
修改于 2020-02-10 07:34:34
修改于 2020-02-10 07:34:34
8890
举报

论文分析了one-stage网络训练存在的类别不平衡问题,提出能根据loss大小自动调节权重的focal loss,使得模型的训练更专注于困难样本。同时,基于FPN设计了RetinaNet,在精度和速度上都有不俗的表现

论文:Focal Loss for Dense Object Detection

Introduction


  目前state-of-the-art的目标检测算法大都是two-stage、proposal-driven的网络,如R-CNN架构。而one-stage检测器一直以速度为特色,在精度上始终不及two-stage检测器。因此,论文希望研究出一个精度能与two-stage检测器媲美的one-stage检测器

通过分析,论文认为阻碍one-stage精度主要障碍是类别不平衡问题(class imbalance)

  • 在R-CNN架构检测器中,通过two-stage级联和抽样探索法(sampling heuristics)来解决类别不平衡问题。proposal阶段能迅速地将bndbox的数量缩小到很小的范围(1-2k),过滤了大部分背景。而第二阶段,则通过抽样探索法来保持正负样本的平衡,如固定的正负样本比例(1:3)和OHEM
  • one-stage检测器通常需要处理大量的bndbox(~100k),密集地覆盖着各位置、尺度和长宽比。然而大部分bndbox都是不含目标的,即easy background。尽管可以使用类似的抽样探索法(如hard example mining)来补救,但这样的效率不高,因为训练过程仍然被简单的背景样本主导,导致模型更多地学习了背景而没有很好地学习检测的目标

  在解决以上问题的同时,论文产出了两个成果:

  • 新的损失函数focal loss,该函数能够动态地调整交叉熵大小。当类别的置信度越大,权重就逐渐减少,最后变为0。反之,置信度低的类别则得到大的权重
  • 设计了一个简单的one-stage检测器RetinaNet来演示focal loss的有效性。该网络包含高效的特征金字塔和特别的anchor设定,结合一些多种近期的one-stage detectgor的trick(DNN/FPN/YOLO/SSD),达到39.1的AP精度和5fps的速度,超越了所有的单模型,如图2所示

FocalLoss


Balanced Cross Entropy

  交叉熵损失函数如图1最上曲线,当置信度大于0.5时,loss的值也不小。若存在很多简单样本时,这些不小的loss堆积起来会对少样本的类别训练造成影响

  一种简单的做法是赋予不同的类不同的权重$\alpha$,即$\alpha$-balanced 交叉熵。在实际操作中,$\alpha$属于一个预设的超参,类别的样本数越多,$\alpha$则设置越小

Focal Loss Definition

  $\alpha$-balanced 交叉熵仅根据正负样本的数量进行权重的平衡,没有考虑样本的难易程度。因此,focal loss降低了容易样本的损失,从而让模型更专注于难的负样本

  focal loss在交叉熵的基础上添加了调节因子$(1-p_t)^{\gamma}$,其中$\gamma\ge0$是超参数。$\gamma\in0,5$的loss曲线如图1所示,focal loss有两个特性:

  • 当一个样本被误分且置信度很低时,调节因子会接近1,整体的loss都很小。当置信度接近1的时候,调节因子会接近于0,整体的loss也被降权了
  • 超参数$\gamma$平滑地调整了简单样本的降权比例。当$\gamma=0$,Focal loss与交叉熵一致,随着$\gamma$增加,调节因子的影响也相应增加。当$\gamma=2$时,置信度为0.9的样本的loss将有100倍下降,而0.968的则有1000倍下降,这变相地增加了误分样本的权重

  实际使用时中,focal loss会添加$\alpha$-balanced,这是从后面的实验中总结出来的

Class Imbalance and Model Initialization

  二分类模型初始化时对于正负样本预测是均等的,而在训练时,样本数多的类别会主导网络的学习,导致训练初期不稳定。为了解决这问题,论文在模型初始化的时候设置先验值$\pi$(如0.01),使模型初始输出$\pi$偏向于低置信度来加大少数(正)样本的学习。在样本不平衡情况下,这种方法对于提高focal loss和 cross entropy训练稳定性有很大帮助

RetinaNet Detector


Architecture

  RetinaNet是one-stage架构,由主干网络和两个task-specific子网组成。主干网络用于提取特征,第一个子网用于类别分类,第二个子网用于bndbox回归

  • Feature Pyramid Network Backbone

  RetinaNet采用FPN作为主干,FPN通过自上而下的路径以及横行连接来增强卷积网络的特征提取能力,能够从一张图片中构造出丰富的以及多尺度特征金字塔,结构如图3(a)-(b)。

  FPN构建在ResNet架构上,分别在level $p_3$-$p_7$,每个level l意味着$2^l$的尺度缩放,且每个level包含256通道

  • Anchors

  level$p_3$到$p_7$对应的anchor尺寸为$32^2$到$512^2$,每个金字塔层级的的长宽比均为${1:2, 1:1, 2:1 }$,为了能够预测出更密集的目标,每个长宽比的anchor添加原设定尺寸的${2^0, 2^{1/3}, 2^{2/3} }$大小的尺寸,每个level总共有9个anchor

  每个anchor赋予长度为K的one-hot向量和长度为4的向量,K为类别数,4为box的坐标,与RPN类似。IoU大于0.5的anchor视为正样本,设定其one-host向量的对应值为1,$[0, 0.4)$的anchor视为背景,$[0.4, 0.5)$的anchor不参与训练

  • Classification Subnet

  分类子网是一个FCN连接FPN的每一level,分类子网是权值共享的,即共用一个FPN。子网由4xCx(3x3卷积+ReLU激活层)+KxA(3x3卷积)构成,如图3(c),C=256,A=9

  • Box Regression Subnet

  定位子网结构与分类子网类似,只是将最后的卷积大小改为4xAx3x3,如图3(d所示)。每个anchor学习4个参数,代表当前bndbox与GT间的偏移量,这个与R-CNN类似。这里的定位子网是类不可知的(class-agnostic),这样能大幅减少参数量

Inference and Training
  • Inference

  由于RetinaNet结构简单,在推理的时候只需要直接前向推算即可以得到结果。为了加速预测,每一个FPN level只取置信度top-1k bndbox($\ge0.05$),之后再对所有的结果进行NMS($\ge0.5$)

  • Focal Loss

  训练时,focal loss直接应用到所有~100k anchor中,最后将所有的loss相加再除以正样本的数量。这里不除以achor数,是由于大部分的bndbox都是easy样本,在focal loss下仅会产生很少loss。权值$\alpha$的设定与$\lambda$存在一定的关系,当$\lambda$增加时,$\alpha$则需要减少,($\alpha=0.25, \lambda=2$表现最好)

  • Initialization

  Backbone是在ImageNet 1k上预训练的模型,FPN的新层则是根据论文进行初始化,其余的新的卷积层(除了最后一层)则偏置$b=0$,权重为$\sigma=0.01$的高斯分布

$$\pi=\frac{1}{1+e^{-b}}$$

  最后一层卷积的权重为$\sigma=0.01$的高斯分布,偏置$b=-log(1-\pi)/\pi$(偏置值的计算是配合最后的激活函数来推),使得训练初期的前景置信度输出为$\pi=0.01$,即认为大概率都是背景。这样背景就会输出很小的loss,前景会输出很大的loss,从而阻止背景在训练前期产生巨大的干扰loss

  • Optimization

  RetinaNet使用SGD作为优化算法,8卡,每卡batchSize=2。learning rate=0.01,60k和80k轮下降10倍,共进行90k迭代,Weight decay=0.0001,momentum=0.9,

training loss为focal loss与bndbox的smooth L1 loss

Experiments


Training Dense Detection
  • Network Initialization

  论文首先尝试直接用标准交叉熵进行RetinaNet的训练,不添加任何修改和特殊初始化,结果在训练时模型不收敛。接着论文使用先验概率$\pi=0.01$对模型进行初始化,模型开始正常训练,并且最终达到30.2AP,训练对$\pi$的值不敏感

  • Balanced Cross Entropy

  接着论文进行平衡交叉熵的实验,结果如Table1a,当$\alpha=0.75$时,模型获得0.9的AP收益

  • Focal Loss

  接着论文进行了focal loss实验,结果如Table 1b,当$\gamma=2$时,模型在$\alpha$-balanced交叉熵上获得2.9AP收益

  论文观察到,$\gamma$与$\alpha$成反向关。整体而言,$\gamma$带来的收益更大,此外,$\alpha$的值一般为$0.25, 0.75$(从$\alpha\in0.01, 0.999$中实验得出)

  • Analysis of the Focal Loss

  为了进一步了解focal loss,论文分析了一个收敛模型($\gamma=2$,ResNet-101)的loss经验分布。首先在测试集的预测结果中随机取$~10^5$个正样本和$~10^7$个负样本,计算其FL值,再对其进行归一化令他们的和为1,最后根据归一化后的loss进行排序,画出正负样本的累积分布函数(CDF),如图4

  不同的$\gamma$值下,正样本的CDF曲线大致相同,大约20%的难样本占据了大概一半的loss,随着$\gamma$的增大,更多的loss集中中在top20%中,但变化比较小

  不同的$\gamma$值下,负样本的CDF曲线截然不同。当$\gamma=0$时,正负样本的CDF曲线大致相同。当$\gamma$增大时,更大的loss集中在难样本中。当$\gamma=2$时,很大一部分的loss集中在很小比例的负样本中。可以看出,focal loss可以很有效的减少容易样本的影响,让模型更专注于难样本

  • Online Hard Example Mining (OHEM)

  OHEM用于优化two-stage检测器的训练,首先根据loss对样本进行NMS,再挑选hightest-loss样本组成minibatches,其中NMS的阈值和batch size都是可调的。与FL不同,OHEM直接去除了简单样本,论文也对比了OHEM的变种,在NMS后,构建minibatch时保持1:3的正负样本比。实验结果如Table 1d,无论是原始的OHEM还是变种的OHEM,实验结果都没有FL的性能好,大约有3.2的AP差异。因此,FL更适用于dense detector的训练

Model Architecture Design
  • Anchor Density

  one-stage检测器使用固定的网格进行预测,一个提高预测性能的方法是使用多尺度/多长宽比的anchro进行。实验结果如Table 1c,单anchor能达到30.3AP,而使用9 anchors能收获4AP的性能提升。最后,当增加到9anchors时,性能法儿下降了,这说明,当anchor密度已经饱和了

  • Speed versus Accuracy

  更大Backbone和input size意味着更高准确率和更慢的推理速度,Table 1e展示了这两者的影响,图2展示了RetinaNet与其它主流检测器的性能和速度对比。大尺寸的RetinaNet比大部分的two-stage性能要好,而且速度也更快

  • Comparison to State of the Art

  与当前的主流one-stage算法对比,RetinaNet大概有5.9的AP提升,而与当前经典的two-stage算法对比,大约有2.3的AP提升,而使用ResNeXt32x8d-101-FPN作为backbone则能进一步提升1.7AP

Conclusion


  论文认为类别不平衡问题是阻碍one-stage检测器性能提升的主要问题,为了解决这个问题,提出了focal loss,在交叉熵的基础上添加了调节因子,让模型更集中于难样本的训练。另外,论文设计了one-stage检测器RetinaNet并给出了相当充足的实验结果

创作不易,未经允许不得转载~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作
在RetinaNet之前,目标检测领域一个普遍的现象就是two-stage的方法有更高的准确率,但是耗时也更严重,比如经典的Faster R-CNN,R-FCN,FPN等,而one-stage的方法效率更高,但是准确性要差一些,比如经典的YOLOv2,YOLOv3和SSD。这是两类方法本质上的思想不同带来这个普遍的结果,而RetinaNet的出现,在一定程度上改善了这个问题,让one-stage的方法具备了比two-stage方法更高的准确性,而且耗时更低。RetinaNet的论文是《Focal Loss for Dense Object Detection》。
chaibubble
2019/08/29
1.9K0
目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作
[Intensive Reading]目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作
目标检测系列: 目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作 目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享 目标检测(object detection)系列(三) Fast R-CNN:end-to-end的愉快训练 目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN 目标检测(object detection)系列(五) YOLO:目标检测的另一种打开方式 目标检测(object detection)系列(六) SSD:兼顾效率和准确性 目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN 目标检测(object detection)系列(八) YOLOv2:更好,更快,更强 目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言 目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度 目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作 目标检测(object detection)系列(十二) CornerNet:anchor free的开端 目标检测(object detection)系列(十三) CenterNet:no Anchor,no NMS 目标检测(object detection)系列(十四)FCOS:用图像分割处理目标检测
chaibubble
2022/05/10
4210
[Intensive Reading]目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作
目标检测--Focal Loss for Dense Object Detection
Focal Loss for Dense Object Detection ICCV2017 https://arxiv.org/abs/1708.02002
用户1148525
2019/05/26
4410
首发 | 何恺明团队提出 Focal Loss,目标检测精度高达39.1AP,打破现有记录
翻译|AI科技大本营(rgznai100) 参与 | 周翔,尚岩奇 他可谓神童。 2009年,在 IEEE 举办的 CVPR 大会上,还在微软亚研院(MSRA)实习的何恺明的第一篇论文“Single Image Haze Removal Using Dark Channel Prior”艳惊四座,获最佳论文,这是第一次完全由中国人组成的团队获得该奖项。 2016年,何恺明所在团队的另一篇论文“Deep Residual Learning for Image Recognition”再获 CVPR 最佳论文奖
AI科技大本营
2018/04/26
1.1K0
首发 | 何恺明团队提出 Focal Loss,目标检测精度高达39.1AP,打破现有记录
Focal Loss 论文详解
Github:https://github.com/ccc013/AI_algorithm_notes
AI算法与图像处理
2021/08/05
9970
Focal Loss 论文详解
Focal Loss for Dense Object Detection(文献阅读)
动机 尽管两阶段检测器取得了成功,那么问题就是:一个简单的单阶段能达到类似的精度吗?单阶段应用于目标位置、尺度和纵横比的常规、密集采样。最近在YOLO和SSD等单阶段上的研究显示出了很有前景的结果,与
狼啸风云
2019/06/13
1.8K0
Focal Loss for Dense Object Detection(文献阅读)
新文预览 | IoU-aware Single-stage Object Detector for Accurate Localization
论文:IoU-aware Single-stage Object Detector for Accurate Localization
VincentLee
2020/01/24
8780
新文预览 | IoU-aware Single-stage Object Detector for Accurate Localization
ICCV2017:Focal Loss for Dense Object Detection
[https://arxiv.org/abs/1708.02002](https://arxiv.org/abs/1708.02002)
CristianoC
2020/06/02
5210
R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet…你都掌握了吗?一文总结目标识别必备经典模型(二)
 机器之心专栏 本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。 本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。 本文将分 3 期进行连载,共介绍 17 个在目标检测任务上曾取得 SOTA 的经典模型。 第 1 期:R-CNN、SPP-Net、Fast R-CNN、Faster R-C
机器之心
2023/03/29
1.4K0
R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet…你都掌握了吗?一文总结目标识别必备经典模型(二)
深度学习500问——Chapter08:目标检测(6)
作者对one-stage检测器准确率不高的问题进行探究,发现主要问题在于正负类别不平衡(简单-难分类别不均衡)。
JOYCE_Leo16
2024/05/05
1640
深度学习500问——Chapter08:目标检测(6)
剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选
论文名称:《 Focal Loss for Dense Object Detection 》
AI科技大本营
2019/11/18
2.8K0
剖析Focal Loss损失函数: 消除类别不平衡+挖掘难分样本 | CSDN博文精选
Focal Loss升级 | E-Focal Loss让Focal Loss动态化,类别极端不平衡也可以轻松解决
长尾目标检测是一项具有挑战性的任务,近年来越来越受到关注。在长尾场景中,数据通常带有一个Zipfian分布(例如LVIS),其中有几个头类包含大量的实例,并主导了训练过程。相比之下,大量的尾类缺乏实例,因此表现不佳。长尾目标检测的常用解决方案是数据重采样、解耦训练和损失重加权。尽管在缓解长尾不平衡问题方面取得了成功,但几乎所有的长尾物体检测器都是基于R-CNN推广的两阶段方法开发的。在实践中,一阶段检测器比两阶段检测器更适合于现实场景,因为它们计算效率高且易于部署。然而,在这方面还没有相关的工作。
集智书童公众号
2022/02/10
1.7K0
Focal Loss升级 | E-Focal Loss让Focal Loss动态化,类别极端不平衡也可以轻松解决
目标检测 | RetinaNet,经典单阶段Anchor-Based目标检测模型
作者认为之前的单阶段检测算法精度不高的原因可能是前后景类别(正负样本)严重不均衡导致的。因此作者重新设计了一个损失:Focal Loss,其能降低可以较好分类的样本的损失权重,防止训练过程中大量的easy negatives给检测器带来的压制影响,并基于Focal Loss设计提出并训练了RetinaNet。
Justlovesmile
2022/03/15
9740
目标检测 | RetinaNet,经典单阶段Anchor-Based目标检测模型
目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘
目标检测系列: 目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作 目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享 目标检测(object detection)系列(三) Fast R-CNN:end-to-end的愉快训练 目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN 目标检测(object detection)系列(五) YOLO:目标检测的另一种打开方式 目标检测(object detection)系列(六) SSD:兼顾效率和准确性 目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN 目标检测(object detection)系列(八) YOLOv2:更好,更快,更强 目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言 目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度 目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作 目标检测(object detection)系列(十二) CornerNet:anchor free的开端
chaibubble
2019/09/18
4K0
目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘
目标检测算法之RetinaNet(引入Focal Loss)
今天来介绍一下目标检测算法中RetinaNet,这篇论文是CVPR2018的作品,Kaiming He大神也是作者之一,同时这篇论文提出的Focal Loss也对工程上训练更好的目标检测模型做出了很大贡献,所以我们尝试理解一下这篇论文的思想。论文地址为:https://arxiv.org/pdf/1708.02002.pdf
BBuf
2019/12/04
2.4K0
目标检测算法之RetinaNet(引入Focal Loss)
何恺明Focal Loss改进版!GFocal Loss:良心技术,无cost涨点
在ICCV 2017上,Kaiming大神所在的FAIR团队“随手”发了一篇名为《Focal Loss for Dense Object Detection》的论文。
AI科技评论
2020/10/27
1.6K0
何恺明Focal Loss改进版!GFocal Loss:良心技术,无cost涨点
目标检测经典工作:RetinaNet和它背后的Focal Loss
RetinaNet 是通过对单目标检测模型 (如 YOLO 和 SSD) 进行两次改进而形成的:
AI算法修炼营
2020/05/08
1.7K0
目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection
论文: Cascade R-CNN: Delving into High Quality Object Detection
VincentLee
2020/01/24
1.1K0
目标检测 | 经典算法 Cascade R-CNN: Delving into High Quality Object Detection
Focal Loss 论文理解及公式推导
精度最高的目标检测器往往基于 RCNN 的 two-stage 方法,对候选目标位置再采用分类器处理. 而,one-stage 目标检测器是对所有可能的目标位置进行规则的(regular)、密集采样,更快速简单,但是精度还在追赶 two-stage 检测器. <论文所关注的问题于此.>
AIHGF
2019/02/27
5.4K0
论文阅读: RetinaNet
此篇论文获得了ICCV最佳学生论文奖,指导人是FAIR的He Kaiming大神:
JNingWei
2018/09/27
1.7K0
论文阅读: RetinaNet
推荐阅读
相关推荐
目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档