文章目录[隐藏]
本次周报对三篇论文作学习总结,分别是2017年的两篇论文FPN和Focal Loss,以及2021.9.15新近发表的对FPN和Focal Loss改进的论文:达到SOTA的UMOP。
Feature Pyramid Networks
Paper:《Feature Pyramid Networks for Object Detection》
Where:CVPR 2017
论文背景:
多尺度目标检测时的问题是,RoI作用在最后一层,对于大目标的检测没有问题,但是对于小目标的检测就有些问题。因为对于小目标来说,当进行conv到最后一层时,实际上语义信息已经几乎没有了,通过将底层坐标直接除以Stride把一个RoI映射到某个Feature map,随着网络的加深映射过去后也会越小。
创新点:
Feature Pyramid Networks生成的特征金字塔使每一层不同尺度的特征图都具有较强的语义信息,能够在增加较少计算量的前提下,融合低分辨率语义信息较强的特征图,和高分辨率语义信息较弱但空间信息丰富的特征图。
论文结构:
FPN主要分为:
- 自底向上通道
即backbone,它计算一个由多个尺度的feature map组成的特征层次结构,每一级往上用step=2的降采样。通常有许多层产生相同大小的输出图,我们说这些层处于相同的网络阶段,conv1被认为语义信息太低和内存太大而被舍去,conv2,conv3,conv4和conv5的输出层参与预测。
- 自顶向下通道和横向连接
Top-down pathway通过从更高的金字塔层次上进行上采样得到更粗糙但语义更强的feature map,来产生更高分辨率的特征。横向连接Top-down pathway的特征增强了这些特征。每个横向连接从自下而上路径和自上而下路径合并相同空间大小的feature map。自下而上的特征图具有较低的语义,但其激活更精确地localize,因为它被下采样的次数更少。
具体过程为:C5层先经过1 x 1卷积,改变特征图的通道数(文章中设置d=256,与Faster R-CNN中RPN层的维数相同便于分类与回归)。M5通过上采样,再加上(特征图中每一个相同位置元素直接相加)C4经过1 x 1卷积后的特征图,得到M4。这个过程再做两次,分别得到M3,M2。M层特征图再经过3 x 3卷积(减轻最近邻近插值带来的混叠影响,周围的数都相同),得到最终的P2,P3,P4,P5层特征
FPN应用于RPN层
Faster RCNN中的RPN是通过最后一层的特征来做的。最后一层的特征经过3x3卷积,得到256个channel的卷积层,再分别经过两个1x1卷积得到类别得分和边框回归结果。这里将特征层之后的RPN子网络称之为网络头部(network head)。对于特征层上的每一个点,作者用anchor的方式预设了9个框。这些框本身包含不同的尺度和不同的长款比例。
FPN针对RPN的改进是将网络头部应用到每一个P层。由于每个P层相对于原始图片具有不同的尺度信息,因此作者将原始RPN中的尺度信息分离,让每个P层只处理单一的尺度信息。具体的,对{322、642、1282、2562、512^2}这五种尺度的anchor,分别对应到{P2、P3、P4、P5、P6}这五个特征层上。每个特征层都处理1:1、1:2、2:1三种长宽比例的候选框。P6是专门为了RPN网络而设计的,用来处理512大小的候选框。它由P5经过下采样得到。
另外,上述5个网络头部的参数是共享的。作者通过实验发现,网络头部参数共享和不共享两种设置得到的结果几乎没有差别。这说明不同层级之间的特征有相似的语义层次。这和特征金字塔网络的原理一致
使用RPN,Fast RCNN和Faster RCNN在COCO minival的实验结果,AP均有较大幅度的上涨。
在COCO检测基准上的single-model结果比较:论文测试了FPN算法在COCO数据集上面的性能表现,使用了FPN的Faster R-CNN方法获得了很多的最佳指标,尤其是在APs指标上面。总之,我们获得了最好的单模型准确率。
论文发现共享特征可以小幅提高准确性。特性共享也减少了测试时间,准确来说是增加了1.5倍的训练时间(使用4步训练),但减少了测试时间。
如表,论文的使用了一个5×5 MLP的baseline FPN实现了43.4的AR。切换到稍大一点的7×7 MLP,准确性基本没有变化。同时使用两个MLP将精度提高到45.7 AR。将mask输出尺寸从14×14增加到28×28将AR提高另一个点(更大的尺寸开始降低精度)。最后,将训练迭代次数增加一倍,AR增加到48.1。
论文还报告了与DeepMask、SharpMask和InstanceFCN的比较,这是之前在mask建议生成中最先进的方法。论文比这些方法的精度高出8.3个AR点。特别是,论文结果在小物体上的精度几乎提高了一倍。
现有的mask proposal方法是基于密集采样的图像金字塔,计算成本很高。论文的方法基于FPN要快得多(论文的模型运行在6到7帧每秒)。实验结果表明,该模型是一种通用的特征提取方法,可以代替图像金字塔进行其他多尺度检测。
Focal Loss:关注hard negative example
Paper:《Focal Loss for Dense Object Detection》
Where: ICCV 2017
论文背景:
Sliding Window检测方式造成的正负样本比例不平衡,容易分类的负样本占比例太大,这些easy example虽然loss很低,但是数量众多,占据了loss中的大部分,还主导了梯度,影响检测精度。
创新点:
动态缩放优化交叉熵损失函数为Focal Loss损失函数,增加了一个动态变化的参数,降低easy example权重,让模型关注hard negative example,使one stage模型达到two stage模型的精度
论文结构:
二分类问题的标准交叉熵损失为:
L
c
e
=
−
y
l
o
g
y
^
−
(
1
−
y
)
l
o
g
(
1
−
y
^
)
=
{
−
l
o
g
(
y
^
)
,
y
=
1
−
l
o
g
(
1
−
y
^
)
,
y
=
0
L_{ce}=-ylog\hat{y}-(1-y)log(1-\hat{y})=\left\{ \begin{aligned} -log(\hat{y})&,\ y=1 \\ -log(1-\hat{y})&,\ y=0 \end{aligned} \right.
Lce=−ylogy^−(1−y)log(1−y^)={−log(y^)−log(1−y^), y=1, y=0
对于二分类模型用Sigmoid函数激活
y
^
=
σ
(
x
)
\hat{y}=\sigma(x)
y^=σ(x) ,所以
L
c
e
=
−
y
l
o
g
σ
(
x
)
−
(
1
−
y
)
l
o
g
σ
(
−
x
)
=
{
−
l
o
g
σ
(
x
)
,
y
=
1
−
l
o
g
σ
(
−
x
)
,
y
=
0
L_{ce}=-ylog\sigma (x)-(1-y)log\sigma(-x)=\left\{ \begin{aligned} -log\sigma(x)&,\ y=1 \\ -log\sigma(-x)&,\ y=0 \end{aligned} \right.
Lce=−ylogσ(x)−(1−y)logσ(−x)={−logσ(x)−logσ(−x), y=1, y=0
通过设定两个阈值,例如0.4和0.6,当模型对某个负样本的输出小于0.4,或者模型对某个正样本的输出大于0.6时,不需要再根据这个样本来更新模型,而只有在0.4~0.6之间的样本才会更新模型,这样就达到了让模型更关注于hard negative example的目的,从而使的训练后的分类效果更好,两个优化方向:
- 平衡Cross Entropy,添加权重因子
−
α
t
-\alpha_t
C
E
(
p
t
)
=
−
α
t
l
o
g
(
p
t
)
CE(p_t)=-\alpha_tlog(p_t)
- 添加调制系数
(
1
−
p
t
)
γ
(1-p_t)^{\gamma}
L
f
l
=
{
−
σ
γ
(
−
x
)
l
o
g
σ
(
x
)
,
y
=
1
−
σ
γ
(
x
)
l
o
g
σ
(
−
x
)
,
y
=
0
L_{fl}=\left\{ \begin{aligned} -\sigma^{\gamma}(-x)log\sigma(x)&,\ y=1 \\ -\sigma^{\gamma}(x)log\sigma(-x)&,\ y=0 \end{aligned} \right.
γ
\gamma
y
^
γ
\hat{y}^{\gamma}
(
1
−
y
^
)
γ
(1-\hat{y})^{\gamma}
在上图中,X轴表示预测真实值的概率,Y轴是给定预测值下的损失值。当γ=0时,Focal loss为交叉熵损失。从图像中可以看出,当模型以0.6的概率预测真实值时,交叉熵损失在0.5左右,因此为了减少损失,模型会以更高的概率预测真实值,这样会降低模型的鲁棒性,使得模型可能出现过拟合的情况。但是在类别不平衡的情况下,Focal loss会将模型的注意力转向稀有类别,这在一定程度上减小了过拟合情况出现的概率。
Focal Loss损失函数:
F
L
(
p
t
)
=
−
α
t
(
1
−
p
t
)
γ
l
o
g
(
p
t
)
FL(p_t)=-\alpha_t(1-p_t)^{\gamma}log(p_t)
FL(pt)=−αt(1−pt)γlog(pt)
论文设计了应用Focal Loss的RetinaNet,RetinaNet结构简单,在ResNet架构的基础上使用FPN以生成丰富的、多尺度卷积特征金字塔,backbone后跟了两个子net,分别用于anchor boxes分类和把anchor boxes回归到ground-truth object boxes:
在COCO test-dev上速度(ms)与精度(AP)效果:
RetinaNet detector性能优于之前所有one-stage和two-stage检测器性能。
消融实验:以γ=2,3个尺度和3个高宽比的anchor,ResNet-50-FPN为backbone,一个600像素的训练和测试图像比例作为默认参数。
收敛模型中不同γ值正负样本归一化损失的累积分布函数。改变γ对positive examples的损失分布的影响是很小的。然而对于负面影响,增加γ会将损失严重集中在hard examples上,将几乎所有的注意力从easy negatives上转移开。
在COCO test-dev上single-model结果与(2017年)最先进模型目标检测性能对比。
Focal Loss和Focal Loss的变种相对于Cross Entropy在loss和AP上的性能提升。
UMOP:改进金字塔层级level imbalance
Paper:《Progressive Hard-case Mining across Pyramid Levels in Object Detection》
Where:2021.9.15 arxiv
Code:https://github.com/zimoqingfeng/UMOP
论文背景:
level imbalance问题:当前的one-stage detector未能解决训练期间,正样本对负样本的比率在pyramid levels(金字塔层级)之间变化的问题。
创新点:
提出Unified Multi-level Optimization Paradigm(UMOP),UMOP由两部分组成,分别是用来对每个pyramid level设置不同的分类损失的Level-wise Resampling Paradigm(LRP框架),和基于每个pyramid level的positive example的prediction自动调整hard case挖掘度的Progressive Focal Loss(PFL函数)。
论文结构:
UMOP根据样本所在层次的收敛情况,采用动态超参数调整策略对所有样本进行优化。
从所有四个检测器来看,P7中的每个candidate在训练过程中都有较高的概率匹配正样本。结果清楚地揭示了多级探测器在任何情况下都存在level imbalance。因此怀疑在固定超参数设置下的Focal Loss不能同时对所有金字塔级别做出很好的权衡,即论文首次证实:FPN性能在某种程度上会受到Level Imbalanced影响。
解决方案-UMOP包括两部分:
Level-wise Resampling Paradigm:
在训练时独立计算各金字塔层的分类损失,定义总分类损失为所有水平分类损失的均值:
L
o
s
s
c
l
s
=
1
L
∑
l
=
1
L
L
o
s
s
l
(
P
l
,
Y
l
)
Loss_{cls}=\frac{1}{L}\sum^L_{l=1}Loss_l(P_l,Y_l)
Losscls=L1l=1∑LLossl(Pl,Yl)该损失赋予了每个金字塔层级足够灵活性以适应特定的采样所面临的不平衡性.
Progressive Focal Loss:
原始Focal Loss函数是这样的:
F
L
(
p
i
,
y
i
)
=
{
−
α
(
1
−
p
i
)
γ
l
o
g
(
p
i
)
,
y
i
=
1
−
(
1
−
α
)
p
i
γ
l
o
g
(
1
−
p
i
)
,
y
i
=
0
FL(p_i,y_i)=\left\{ \begin{aligned} -\alpha(1-p_i)^{\gamma}log(p_i)&,\ y_i=1 \\ -(1-\alpha)p_i^{\gamma}log(1-p_i)&,\ y_i=0 \end{aligned} \right.
FL(pi,yi)={−α(1−pi)γlog(pi)−(1−α)piγlog(1−pi), yi=1, yi=0
在原始损失中,
α
\alpha
α用于保持正负样例的梯度梯度,
γ
\gamma
γ则用于缓解正负样例不平衡。
新的动态超参调整策略:它可以按照每个金字塔层级的收敛位置动态调整上述超参。对由于金字塔各层次间的不平衡性差异,不同层次实际应用的超参数是完全不同的。
在训练阶段,早期的样例通常比较难训练,而在后期则相对容易。论文优化Focal Loss为Progressive Focal Loss,按照各自的收敛位置动态调整难例挖掘强度。
P
F
L
(
p
i
,
y
i
)
=
{
−
α
a
d
(
1
−
p
i
)
γ
a
d
l
o
g
(
p
i
)
,
y
i
=
1
−
(
1
−
α
a
d
)
p
i
γ
a
d
l
o
g
(
1
−
p
i
)
,
y
i
=
0
PFL(p_i,y_i)=\left\{ \begin{aligned} -\alpha_{ad}(1-p_i)^{\gamma_{ad}}log(p_i)&,\ y_i=1 \\ -(1-\alpha_{ad})p_i^{\gamma_{ad}}log(1-p_i)&,\ y_i=0 \end{aligned} \right.
PFL(pi,yi)={−αad(1−pi)γadlog(pi)−(1−αad)piγadlog(1−pi), yi=1, yi=0
如图示为Progressive Focal Loss与Focal Loss的比较。在训练过程中,案例一般在训练初期比较困难,而在训练后期比较容易。Progressive Focal Loss可以逐步增强hardcase mining程度。
其中,作为难例挖掘的超参数
γ
a
d
\gamma_{ad}
γad和
α
a
d
\alpha_{ad}
αad定义为:
γ
a
d
=
−
l
o
g
(
1
n
p
o
s
∑
i
=
1
n
y
i
⋅
p
i
)
\gamma_{ad}=-log(\frac{1}{n_{pos}}\sum^n_{i=1}y_i\cdot p_i)
γad=−log(npos1i=1∑nyi⋅pi)
α
a
d
=
ω
γ
a
d
\alpha_{ad}=\frac{\omega}{\gamma_{ad}}
αad=γadω
γ
a
d
\gamma_{ad}
γad类似于交叉熵损失,反映了在金字塔水平上的收敛情况。从层次优化的角度设计的策略:
y
i
y_i
yi表示在特定的金字塔层次上为一个样本分配的标签,
p
i
p_i
pi定义为相应的概率结果。因此,
y
i
⋅
p
i
y_i\cdot p_i
yi⋅pi表示正样本的概率,定义为负样本的概率为0。
n
n
n定义为每个金字塔水平的总样本数,
n
p
o
s
n_{pos}
npos表示每个金字塔水平的总正样本数。为保证训练的稳定性,将调整后的超参数固定在有效的
γ
a
d
\gamma_{ad}
γad∈[γ−δ, γ+δ]区间内,且δ集为所有实验的常数。
α
a
d
\alpha_{ad}
αad的调整是按照
γ
a
d
\gamma_{ad}
γad的趋势设计的。具体地说,是一个常数,使
α
\alpha
α由
γ
\gamma
γ计算。此外,作为一种水平重采样方法,需要注意的是,
α
a
d
\alpha_{ad}
αad和
γ
a
d
\gamma_{ad}
γad是即时计算的,在训练过程中不会产生任何额外的求导操作。
UMOP算法的具体步骤:
输入:
- 预测结果集合
P
P
- 和
P
P
Y
Y
输出:
- 总分类损失
L
o
s
s
c
l
s
Loss_{cls}
算法流程:
- 通过每一个金字塔层把
P
P
S
P
S_P
- 通过每一个金字塔层把
Y
Y
S
y
S_y
- 循环对预测结果
P
i
∈
S
P
P_i\in S_P
Y
i
∈
S
y
Y_i\in S_y
- 用
y
j
∈
Y
i
y_j\in Y_i
p
j
∈
P
i
p_j\in P_i
γ
a
d
\gamma_{ad}
- 用
γ
a
d
\gamma_{ad}
α
a
d
\alpha_{ad}
- 计算
P
L
S
i
PLS_i
i
i
- 用
- 计算并返回总分类损失
L
o
s
s
c
l
s
Loss_{cls}
Experience:
COCO minival上的一些检测结果。以ResNet-50为骨干,可视化评分阈值为0.3。如图所示,UMOP可以很好地处理各种对象,包括拥挤的、高度重叠的和非常小的对象。
在COCO minival上平均精度(AP)的改进,结果表明,仅采用PFL和整体方法,性能得到了提高。
COCOtest-dev的收敛速度分析,该方法在更少的迭代中获得了更好的性能。
和最先进的Single-model检测器在COCOtest-dev比较性能,达到SOTA。
参考:
师兄提出的讲论文的要求
要求制作PPT:
- 首先给出目录
- 介绍论文的背景(本篇论文解决了什么问题)
- 目前其他人在同领域做到什么程度
- 本篇论文的创新点(开会的时候会询问具体的参数,和其他的结构异同点)
- 介绍论文的结构(包含数学公式和代码,如果数学公式看不懂就先跳过)
- 本篇论文的实验结果
- 给出自己对这篇论文的理解(如果能进行创新和应用到其他的结构中是最好的)
在创新的时候需要遵循:
- 你这个结构是为了解决什么问题
- 数学公式的支撑(如果暂时没有也可以)
- 和其他同类型的结构相比,你的创新点在哪里
- 实验方案的设计
版权声明:本文为CSDN博主「Far_Rainbow」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_50299150/article/details/120916223
暂无评论