【论文学习笔记009】RetinaNet

文章目录

    • 1.论文信息
    • 2. 论文创新点
    • 3.欲解决的问题
    • 4.解决方案
        • 4.1 焦点损失
            • 4.1.1 交叉熵损失函数
            • 4.1.2 平衡交叉熵
            • 4.1.3 焦点损失定义
        • 4.2 RetinaNet检测器
            • 4.2.1 概述
            • 4.2.2 FPN
            • 4.2.3 Anchors
            • 4.2.4 分类子网络
            • 4.2.5 边界框回归子网络
    • 5.几点思考
        • 5.1 什么是类别不平衡
        • 5.2 类别不平衡如何导致检测精度变低
        • 5.3 为什么二阶段目标检测算法可以避免类别不平衡而一阶段算法不可以
    • 6.论文结果
    • 7.待解决的问题

1.论文信息

题目 Focal Loss for Dense Object Detection
作者 Tsung-Yi Lin, Priya Goyal,Ross Girshick, Kaiming He, Piotr Doll´ar
年份 2017
论文地址 https://arxiv.org/abs/1703.10295
项目地址 https://github.com/fizyr/keras-retinanet

2. 论文创新点

  • 在标准交叉熵损失函数的基础上,提出了焦点损失函数,解决了类别不平衡问题,进而实现了一阶段目标检测算法的速度与二阶段目标检测算法的精度的结合
  • 提出了一个新网络RetinaNet,即FPN+Sub-Net+FL,验证了焦点损失函数的作用

3.欲解决的问题

  • 一阶段目标检测算法速度可达实时但精度一般,二阶段目标检测算法精度很高但速度一般;如何设计一种网络综合两者算法的优点,其问题的核心在于解决一阶段目标检测算法的类别不平衡问题

4.解决方案

4.1 焦点损失

4.1.1 交叉熵损失函数
  • 基于二分类的交叉熵损失函数引入焦点损失函数,用于目标检测器训练时存在的极端样本不平衡问题。交叉熵损失函数(CE)公式如下:
    【论文学习笔记009】RetinaNet_第1张图片
  • p t p_{\mathrm{t}} pt定义为: p t = { p  if  y = 1 1 − p  otherwise  p_{\mathrm{t}}=\left\{\begin{array}{ll}{p} & {\text { if } y=1} \\ {1-p} & {\text { otherwise }}\end{array}\right. pt={p1p if y=1 otherwise 
    交叉熵损失函数改写为 C E ( p , y ) = C E ( p t ) = − log ⁡ ( p t ) \mathrm{CE}(p, y)=\mathrm{CE}\left(p_{\mathrm{t}}\right)=-\log \left(p_{\mathrm{t}}\right) CE(p,y)=CE(pt)=log(pt),其特性是正确分类的样本也会有不小的损失函数值。如下图蓝色曲线所示。
    【论文学习笔记009】RetinaNet_第2张图片
4.1.2 平衡交叉熵
  • 一种简单的方法是为类别1引入权重 α∈[0,1] ,为类别-1引入权重 1−α。 α t \alpha_{\mathrm{t}} αt平衡的损失如下式所示: C E ( p t ) = − α t log ⁡ ( p t ) \mathrm{CE}\left(p_{\mathrm{t}}\right)=-\alpha_{\mathrm{t}} \log \left(p_{\mathrm{t}}\right) CE(pt)=αtlog(pt)
4.1.3 焦点损失定义
  • 虽然α能够平衡正负样本,但是不能够区分易分、难分样本。本文提出减少易分样本的权重,聚焦难分负样本的训练,可调聚焦参数 γ≥0 ,焦点损失如下式所示:
    F L ( p t ) = − ( 1 − p t ) γ log ⁡ ( p t ) \mathrm{FL}\left(p_{\mathrm{t}}\right)=-\left(1-p_{\mathrm{t}}\right)^{\gamma} \log \left(p_{\mathrm{t}}\right) FL(pt)=(1pt)γlog(pt)
  • 如上图所示,当样本被误分类且 p t p_{\mathrm{t}} pt很小时,模块因子趋于1,对损失影响不大。当 p t p_{\mathrm{t}} pt趋于1时,因子趋于0,正确分类的样本权重减小。模块因子减小了易分样本对损失的影响,并且扩展了样本产生低损失的范围。

4.2 RetinaNet检测器

4.2.1 概述
  • RetinaNet模型由一个主干网络和两个子网络组成。主干网络用于计算整幅图像的卷积特征,第一个子网络用于对主干网络的输出进行目标分类,第二个子网络用于边界框回归。网络结构图如下所示。
    【论文学习笔记009】RetinaNet_第3张图片
4.2.2 FPN
  • FPN网络通过自顶向下路径和横向连接来增强卷积网络,从而有效地从单个分辨率输入图像构建丰富的多尺度特征金字塔。特征金字塔的每一层可以用于检测不同尺度的目标。
  • 本文在ResNet的头部构建FPN, P 3 P_{3} P3 P 7 P_{7} P7层金字塔,所有的金字塔层有256个通道。
4.2.3 Anchors
  • 采用平移不变性的anchor,anchor的面积从32x32到512x512,对应金字塔 P 3 P_{3} P3 P 7 P_{7} P7层。每一层的anchor高宽比为 {1:2,1:1,2:1},每一层 anchor 数量为9。相对于输入图像,它们的尺度覆盖了32−813像素。
  • 每个anchor被分配了一个长度为K的分类目标的one−hot向量,其中K是目标类别数量,以及一个长度为4的目标边界框向量。当交并比超过阈值0.5时,anchor属于真值框;当交并比在 [0,0.4)时,anchor属于背景类;其余anchor忽略。
4.2.4 分类子网络
  • 分类子网络在FPN的每一层使用FCN实现,子网络参数在金字塔各层实现共享。给定特征层的输入特征图有C个通道,子网络使用四个3×3卷积层,每层有C个卷积核,使用ReLU函数激活,后面连接一个有KA个3×3卷积核的卷积层。最后,使用Sigmoid激活在每个空间位置输出 KA个预测。
4.2.5 边界框回归子网络
  • 边界框回归子网络在FPN的每一层使用FCN,对每个锚框到最近的真值框进行回归来实现。每个空间位置的每个anchor的4个输出预测了真值框和anchor的相对偏移量。

5.几点思考

5.1 什么是类别不平衡

  • 目标检测算法在前期卷积时会产生大量边界框,但图片中目标数量有限,因此绝大多数的边界框有属于背景,只有少部分边界框属于真值框,这就导致了类别不平衡问题

5.2 类别不平衡如何导致检测精度变低

  • 属于背景的边界框数量过多,这导致分类器误将所有的边界框都归类为背景,因此分类器训练失败,检测精度随之降低。

5.3 为什么二阶段目标检测算法可以避免类别不平衡而一阶段算法不可以

  • 二阶段目标检测算法的RPN网络会对锚框进行二分类,这导致属于背景的边界框大幅削减,降低了类别不平衡问题的不良影响
  • 一阶段目标检测算法直接对所有边界框分类输出预测框与标签,同时交叉熵损失函数作为分类任务的损失函数无法抗衡分类不平衡问题,这就导致了分类器训练失败

6.论文结果

【论文学习笔记009】RetinaNet_第4张图片

7.待解决的问题

  • RetinaNet网络的主干网络是FPN,这对算力与内存要求极高,训练成本高昂。

你可能感兴趣的:(2D目标检测)