Focal Loss for Dense Object Detection(retinaNet Detecter)

Focal Loss for Dense Object Detection

  1. information
    1.1. 作者:FAIR团队
    1.2. 时间:2018
    1.3. 阅读时间:2020.11.20
  2. 前言
  3. Abstract
    3.1. 在标准的交叉熵上,添加一个因子:(1-pt)^γ, 减少对正确样本的注意力,增加对难分类样本的关注。实验显示,在密集对象检测上,取得了较好的结果。
    3.2. 本篇文章将解释,为啥One-stage的精度没有Two-stage的精度高,
    3.3. 想要做的就是,通过对容易检测的对象,进行降权重,从而能够很好的训练。
    3.4. 这个损失函数可以将目光聚焦在稀疏分布的比较难分的样本上,防止大量简单样本对于训练的负面影响。
    3.5. 为了检验这个损失函数的有效性,构造了一个简单的检测模型:RetinaNet。
    3.6. 使用Focal Loss损失函数训练的检测器,速度上可以与单阶段相媲美,精度上超越了双阶段检测器。
    3.7. 当年就是个无敌的存在???
  4. introduce
    4.1. 双阶段检测器已经达到了非常优异的效果,那么问题来了,单阶段检测器是否能够达到这样的acc?
    4.2. 在进行这一工作的时候,我们确认了,训练过程中的类间不平衡是单精度检测器精度的一大障碍,因此设计在这样一个损失函数来消除他。
    4.3. 类间不平衡的解决受到R-cnn两级检测和采样方式的启发:做线通过第一步筛选,快速减少相应的待检测数量(解决问题一)。在第二阶段检测中,采取前景背景采样比:1:3,对难分类样本的挖掘等等,达到前景和背景的一个均衡(解决问题二)
    4.3.1. Hard negative mining:将很多简单样本都过滤掉了,导致简单样本反向传导权重过低。
    4.4. 与之相比,单阶段检测器在一张图片上就要进行大量的候选位置处理。实际中需要处理的就有大量的空间位置,尺寸和横纵比。尽管采取了相似的采样试探法,但是检测效果仍被大量存在的简单前背景所支配。
    4.5. 在这篇文章中,我们将提出一种方法—Focal函数,来有效的替代之前的方法来解决类别不平衡问题。
    4.6. 当正确类别的置信度增加时,缩放因子衰减到0.并且可以自动的降低简单因子的权重,将模型集中到困难例子上。
    4.7. 实验证明,在一阶段检测器上使用了这样的损失函数后,就可以不使用以前的两个可以使模型达到最先进水平的方法以提高训练的准确度。
    4.8. 为了检验,我们就设计了一个这样的检测器,基于ResNet-101-FPN,这个网络超过了当时最优的水平(不论单双阶段)
  5. Related Work
    5.1. Classic Object Detectors
    5.2. Two-stage Detectors
    5.3. One-stage Detectors
    5.3.1. 这篇文章的目的就是为了检测,单阶段是否可以超越双阶段的精度同时保持其速度
    5.4. Class Imbalance
    5.4.1. 这是目标检测所自古到今都要面临的问题
    5.4.2. 产生大量的候选框。但是只有少部分的目标,带来了两个问题:
    • 1.大量简单易识别的物体在训练没有效率,不会贡献可供学习的信号
    • 2.太多简单的信息存在,会使模型能力退化(只会简单的,不会难得)
    5.4.3. 常见的解决方法:
    • 对难得负样本进行挖掘
    • 训练时进行更加复杂得采样以及重新加载权重
    5.5. Robust Estimation
  6. Focal Loss
    6.1. summary
    6.1.1. 主要是集中解决一阶段训练中前景和背景中难易样本极端分布不平衡问题
    • CE损失函数

• 即使加了权重,也不能很好的解决难易样本问题。
• 对比见图。
• Pt与P之间得关系

• 将高置信度的样本的损失降低一些会发生什么呢?
• 得到FL

• Y∈{+1、-1}既正负样本。有的版本表示为{0,1}同理。
6.2. Balanced Cross Entropy
6.3. Focal Loss Definition
6.3.1. 当分类较平衡,Pt比较小(被误分类的概率比较小?),factor对因子不起Loss明显的作用。当Pt比较大时,factor开始起作用。
6.3.2. γ对简单样本有着平滑的抑制作用,当γ变大时,抑制作用越明显。文章中最好的参数是2.
6.3.3. 结合sigmoid函数进行计算
6.4. Class Imbalance and Model Initialization
6.4.1. 因为类别不平衡引发的损失累加会在早期训练中造成不稳定
6.4.2. 为了应对,我们在开始训练的时候使用了初始的先验p值,
6.4.3. 使得初始估计的时候,模型对类别较少的例子估计很低???
6.4.4. 这样的初始化方法对交叉熵和Focal Loss都有作用。
6.5. Class Imbalance and Two-stage Detectors
6.5.1. 解决类别不平衡的两种方法
• 两级级联
• 有偏批量采样
6.5.2. 两阶段和一阶段解决的方式
• 损失函数
• 结构机理
7. RetinaNet Detecter
7.1. summery
7.1.1. 检测网络的构成
• 主干网络:resnet
• 检测头:两个subnet
7.1.2. 主干网络:使用了特征金字塔(多尺度输出,能够更好的特征复用),可以在多个尺度上进行检测,有助于于模型的泛化能力。
7.1.3. Anchor类似于17年特征金字塔论文
• 我们使用了更加精细和密集的检测框
• 在我们的设置下提升了AP
• 设置的规则是参考,但是对都多目标检测进行了调整,并且调整了阈值
• 将iou阈值设定成0.05-0.4的则背当成背景
7.1.4. Classification Subnet
• 附属于每个FPN层级的全卷积网络
• 参数在所有金字塔层级间共享
• 我们的子网络更深,且全部使用3×3卷积,并且权重不和回归子网络共享
7.1.5. Box Regression Subnet
• 是与Classification subnet平行的自网络
• 存在的目的是为了回归预测盒子到真实框之间的偏移
• 使用的是类无关的边界框回归器,可以使用更少的参数。
7.1.6. 这两个部分虽然使用了一个大的结构(前头的部分),但是并没有使用一样的参数,这个从他们的运算方式就可以看出来
7.2. Inference and Training
7.2.1. Inference
• 整个网络由Backbone、Classification subnet、box regression subnet三部分构成
• 推理部分只有整个网络的前向传播部分
• 为了提高速度,将阈值设定为0.005后,对得分最高的1000个进行解码,并使用阈值为0.5来进行非极大抑制来产生终极预测。
7.2.2. Focal Loss
• 此损失函数作为分类子网络输出时的子网络
• 在实际中,我们发现γ=2,效果比较好。
• 与之相匹配的α取值为0.25.
• 一般而言,随着γ的增大,α要逐渐减小
7.2.3. Initialization
• 对于预训练的测试是通过ResNet系列网络来进行的(包括有金字塔结构和无金字塔结构)
• 使用的是何凯明的开源模型
• 对于主干网络使用的是一种初始化方式
• 对分类子网络使用的又是一种初始化方式
7.2.4. Optimization
• RetinaNet 使用的是SGD优化网络,并且是在8个GPU上同时使用。
• 除了特殊情况,模型采取90K次迭代,初始学习率是在0.01,然后在60和90的时候,分别再除以10。
• 动量衰减、标签平滑、
7.3. Experiments
7.3.1. Training Dense Detection
• summary
• 使用大量实验来测试损失函数的表现,同时使用各种的优化策略。所有的消融实验都是基于600×600图片上进行的。
• Network Initialization
• 使用标准交叉熵函数的时候,没有经过任何的初始化和学习策略,很快就失败了。
• 当使用了简单的初始化之后,训练效果就变得有效的多。但是结果对精确的初始值并不敏感,所以Π=0.01就够用了。
• Balanced Cross Entropy
• 下一步进行改进的思路:(1)加入3.1中描述的平衡损失函数;结果显示,在α=0.75的时候取得比较好的效果。
• Focal Loss
• γ:聚焦参数。决定了调制能力的强弱
• 当γ=0,focal loss相当于CE,当随着γ增大的时候,简单样本的损失函数将得到更进一步的折扣。
• 当γ=2的时候,AP取得了接近2.9的提高
• 经过实验发现,α最好的范围是在[0.25-0.75],
• Analysis of the Focal Loss
• γ改变对正的样本改变几乎不大,但是对负样本改变非常大。特别是γ=2的时候,会极大的将注意力集中到难解决的负样本上。
• 使用Online Hard Example Mining (OHEM),其太极端了,效果没有FL好。
• Hinge Loss:对于一个确定的Pt,就将损失设置为0。但是这种方式不稳定而且并不能取得有意义的效果。
7.3.2. Model Architecture Design
• Anchor Density
• 一阶段使用的是在同一空间版本进行多个锚点,进行检测。我们开始考虑从每个未知单个锚点到每个位置12个锚点。
• 我们使用三个大小比和三个横纵比之后,效果较单个方形框提升了4个百分点,但是进一步提升的话,并没有明显的提升,也就意味着两阶段检测时,更大更多的Anchor提供更好效果的潜力将不存在了。
• Speed versus Accuracy
• 大的Backbone网络,会提高检测的准确率,但是同时也会降低检测的速度。
• Comparison to State of the Art
• 与其他当前最先进的网络模型进行比较,我们依旧有着优势。我们的AP比最接近我破门的DSSD高5.9,同时有着更快的速度。
• 这里比的是AP值,YOLOv3中比的是具体的速度和AP值。
7.4. Conclusion
7.4.1. 在这篇文章中,我们确定了类别不平衡就是阻碍一阶段检测模型进行训练的主要因素。
7.4.2. 我们提出的FL损失函数,旨在聚焦难得样本,减轻容易样本得权重(比重)

你可能感兴趣的:(目标检测,深度学习,神经网络,pytorch)