IoU-aware single-stage object detector for accurate localization论文阅读笔记
(一)Title
前言:这篇文章提出了classification score和IoU之间不相关的问题,通过预测detected boxes和Ground Truth之间IoU,并在Inference阶段同时使用预测的IoU和classification score得到一个新的检测置信度,在新的检测置信度基础上进行NMS和AP的计算。
(二)Summary
作者指出目前single-stage检测器存在的问题:classification score和localization accuracy之间的低相关性使得模型性能无法得到提升,为了解决这个问题,提出了IoU-aware single-stage object detector,
核心做法是:
对每一个预测的bounding box,同时预测一个IoU,然后用这个IoU乘上classification score作为最终的检测置信度,使用这个检测执行度来进行后续的NMS操作,通过这个IoU使得我们的预测更加准确。作者通过实验也说明了这一点
性能表现:
在COCO test-dev上AP检测性能提升了1.7%-1.9%,AP75提升了2.2%-2.5%。同时在PASCAL VOC上AP提升了 2.9%–4.4% ,AP80, AP90 by 4.6%–10.2%。从后面COCO的实验结果上Table4来看,我们发现AP升了,AP50降了,AP70,80,90之间的差距变小了,作者提出的方法能够提升网络更加准确的框选目标的能力
本文的主要贡献是:
- 提出 IoU-aware single-stage object detector,用于解决classification score和localization accuracy之间不匹配的问题(分类和回归使用单独的目标函数进行训练,使得存在着高classification socre却对应低IoU,低classification 对应高IoU的预测结果,使用NMS时会造成性能上有损害),模型的性能,特别是定位精度可以大大提高,而不牺牲效率。
- 本文进行大量实验,分析了我们方法的工作原理、performance bound以及我们预测的IoU和真实的IoU之间的差异。
(三)Research Object
作者指出single-stage的网络在性能上赶不上multi-stage的网络,但是其简单、高效的特点在实际应用中很受欢迎,因此,作者希望能够提升single-stage检测器的性能,作者这里指出single-stage 检测器classification score和localization accuracy之间的低相关性在一定程度上影响了性能。关于低相关性产生原因以及为什么低相关性会影响性能在后面的Notes 8.1小结有详细的叙述。
作者基于RetinaNet,引入了An IoU prediction head ,这个IoU 预测head parallel with the regression head is attached to the last layer of the regression branch。相当于现在有了3个头,这个IoU预测头和classification头以及regression头联合进行训练。接着在预测时, classification score和predicted IoU相乘作为检测置信度,从而使得检测置信度和定位精度之间的相关性更强,
(四)Problem Statement
当前single-stage 在做inference的时候需要使用NMS来对神经网络输出的bounding boxes进行筛选,目前筛选时主要考虑classification score,但是由于我们的classification score和localization regression是分开训练的,因此,可能会出现high classification score 但是 low iou,或者是high IoU 但是low classification score的情况,导致classification score 和localization quality estimation之间相关性较差,使得网络预测的bounding boxes在AP上的表现较差。
针对该问题,作者提出了通过预测每一个detected boxes的IoU,然后使用预测的IoU乘上classfication score来作为NMS最终的筛框标准,从而在一定程度上提升了AP。
(五)Method
作者使用RetinaNet相同的backbone以及特征金字塔结构,不同的是在最后的输出上,作者增加了一个IoU Prediction Head,用于预测IoU。并在inference阶段使用Classification score乘上预测IoU作为最终NMS筛框的准则。
5.1 损失函数
分类损失使用Focal Loss
L
c
l
s
=
1
N
P
0
S
(
∑
i
∈
P
o
s
N
F
L
(
p
i
,
p
^
i
)
+
∑
i
∈
N
e
g
M
F
L
(
p
i
,
p
^
i
)
)
L_{c l s}=\frac{1}{N_{P 0 S}}\left(\sum_{i \in P o s}^{N} \mathrm{FL}\left(p_{i}, \hat{p}_{i}\right)+\sum_{i \in N e g}^{M} \mathrm{FL}\left(p_{i}, \hat{p}_{i}\right)\right)
Lcls=NP0S1⎝⎛i∈Pos∑NFL(pi,p^i)+i∈Neg∑MFL(pi,p^i)⎠⎞
回归损失使用smooth L1 Loss
L
l
o
c
=
1
N
P
0
S
∑
i
∈
P
0
N
∑
m
∈
C
X
,
c
,
w
,
h
smooth
L
1
(
l
i
m
−
g
^
i
m
)
L_{l o c}=\frac{1}{N_{P 0 S}} \sum_{i \in P_{0}}^{N} \sum_{m \in C X, c, w, h} \text { smooth }_{\mathrm{L} 1}\left(l_{i}^{m}-\hat{\mathrm{g}}_{i}^{m}\right)
Lloc=NP0S1i∈P0∑Nm∈CX,c,w,h∑ smooth L1(lim−g^im)
重头戏:IoU prediction loss 使用的是BCE(但是Ground Truth不是0,1)
并且仅仅对正样本计算损失
L
l
o
U
=
1
N
P
o
s
∑
i
∈
P
0
S
N
B
C
E
(
I
o
U
i
,
I
O
^
U
i
)
=
1
N
P
o
s
∑
i
∈
P
0
S
N
[
−
I
O
^
U
i
∗
l
o
g
(
1
−
I
o
U
i
)
−
(
1
−
I
O
^
U
i
)
∗
l
o
g
(
1
−
I
O
U
i
)
]
L_{l o U}=\frac{1}{N_{P o s}} \sum_{i \in P_{0} S}^{N} \mathrm{BCE}\left(I o U_{i}, I \hat{O} U_{i}\right) = \frac{1}{N_{P o s}} \sum_{i \in P_{0} S}^{N}[- I \hat{O} U_{i}*log(1-I o U_{i})-(1-I \hat{O} U_{i})*log(1-I O U_{i})]
LloU=NPos1i∈P0S∑NBCE(IoUi,IO^Ui)=NPos1i∈P0S∑N[−IO^Ui∗log(1−IoUi)−(1−IO^Ui)∗log(1−IOUi)]
其中这个
I
o
^
U
i
I \hat o U_{i}
Io^Ui表示的是预测bounding box和Ground Truth之间真正的IoU,这个值是[0,1]之间的,而
I
O
U
i
I {O} U_{i}
IOUi是网络输出的预测IoU值。
计算BCE Loss对
I
O
^
U
i
I \hat{O} U_{i}
IO^Ui的梯度结果为:
∂
B
C
E
(
I
o
U
i
,
I
O
^
U
i
)
∂
I
U
^
U
i
=
log
1
−
I
o
U
i
I
o
U
i
\frac{\partial \mathrm{BCE}\left(I o U_{i}, I \hat{O} U_{i}\right)}{\partial I \hat{U} U_{i}}=\log \frac{1-I o U_{i}}{I o U_{i}}
∂IU^Ui∂BCE(IoUi,IO^Ui)=logIoUi1−IoUi
这里有一点疑问就是:一般的BCE损失是
−
y
∗
l
o
g
(
y
^
)
−
(
1
−
y
)
∗
l
o
g
(
1
−
y
^
)
-y*log(\hat y)-(1-y)*log(1-\hat y)
−y∗log(y^)−(1−y)∗log(1−y^),其中y为真实值,
y
^
\hat y
y^为预测值,上文中给出的BCE,这边的符号有一点乱用了,一般
I
O
^
U
I \hat O U
IO^U表示预测值,作者这里却用来表示真实的IoU。
对应的梯度图像为:
作者从这个图中指出两个发现为:
- 对于正样本来说,预测的IOU一般不会小于0.5,此时,从上图中看到的梯度是非正的,因此,沿着梯度方向会使真实的IoU值( I O ^ U I \hat O U IO^U)向着逐渐增大的方向前进
- 预测的IoU( I O U I O U IOU)增加,网络会向着损失减小的位置移动,从而使得真实的IOU I O ^ U I \hat O U IO^U增加,这怎么看出来减小了预测IoU和真实IoU I O ^ U I \hat O U IO^U之间的gap?并且使得预测的IoU和真实的IoU I O ^ U I \hat O U IO^U之间更加相关呢?
在训练过程中,IoU 预测头是和classfication head以及regression head联合进行训练的。
5.2 Inference 阶段
在Inference阶段,我们将预测的IOU
I
o
U
i
IoU_{i}
IoUi乘上classification score
p
i
p_i
pi作为最终的置信度分数
S
d
e
t
S_{det}
Sdet
S
d
e
t
=
p
i
α
I
o
U
i
(
1
−
α
)
S_{d e t}=p_{i}^{\alpha} I o U_{i}^{(1-\alpha)}
Sdet=piαIoUi(1−α)
其中
α
\alpha
α是调节classification score 以及 Predicted IoU之间的权重项。
(六)Experiment
6.1 实验设置
使用数据集为MS COCO,PASCAL VOC,对于所有的实验,使用的度量包括:
A
P
AP
AP: averaged AP at IoUs from 0.5 to 0.95 with an interval of 0.05
A
P
50
AP_{50}
AP50:AP at IoU threshold 0.5
A
P
75
AP_{75}
AP75:AP at IoU threshold 0.75
A
P
S
AP_S
APS:AP for objects of small scales
A
P
M
AP_M
APM:AP for objects of medium scales
A
P
L
AP_L
APL:AP for objects of large scales
6.2 我们和state-of-art的比较
其中"+"表示的在计算
L
I
O
U
L_{IOU}
LIOU梯度的时候,对
I
O
^
U
I \hat O U
IO^U(这个相当于真实的IoU的值)也计算梯度,这样能够得到更好的效果,相比与baseline,我们的AP提升了1.7%~1.9%,AP75大幅提升,达到了2.2% ~ 2.5%,AP50提升在0.7% ∼ 2.3%之间
6.3 我们的Ablation Studies
IoU 预测损失的选择
从上图中可以看出,使用BCE Loss带来的提升效果最好,作者在接下来的实验中使用BCE Loss进行实验。
最终检测置信度的计算超参数
α
\alpha
α
不计算
L
I
O
U
L_{IOU}
LIOU对真实IOU
I
O
^
U
I \hat O U
IO^U的梯度
计算
L
I
O
U
L_{IOU}
LIOU对真实IOU
I
O
^
U
I \hat O U
IO^U的梯度,来自IoU prediction head的梯度会反向传递到regression head。
6.4 在PASCAL VOC上的Ablation 实验
在PASCAL VOC上同样验证了我们的实验结果。
6.5 关于我们网络的一些讨论情
我们模型的upper bound
使用真实的IoU值来代替预测的IoU值,得到了该网络能够实现的理想情况:
可以看出预测的IoU和真实的IoU之间存在着较大的性能差异,作者指出原因为:我们的预测IoU在精度上和真实的IoU之间存在着较大差异,如果能够减小这个差异,就可以提升网络性能。
为什么我们的IoU-aware RetinaNet能够提升模型性能?
首先定义符号:
I
o
U
e
v
a
l
IoU_{eval}
IoUeval:定义为Inference阶段,每一个detected boxes,有一个类别,我们计算这个detected box和该类别下所有Ground Truth之间的IoU,我们将最大的那个IoU定义为
I
o
U
e
v
a
l
IoU_{eval}
IoUeval
从上图中可以看出,提出预测IoU和真实IoU之间存在很大差异,上图中的b图相比于a的变换较小。为模型性能提供了很大的改进空间。
一个很有趣的现象是,上图中的c,在
I
o
U
e
v
a
l
IoU_{eval}
IoUeval很小时,Detection confidence比较大,意味着此时的
I
o
U
T
r
u
t
h
IoU_{Truth}
IoUTruth比较大,但是可能存在着类别分错的问题,使得
I
o
U
e
v
a
l
IoU_{eval}
IoUeval显得很小。
(七)Conclusion
在这项工作中,作者说明了single-stage object detection在Classification score和Localization Quality之间的低相关性会严重损害模型的性能(mAP)。因此,作者提出的IoU-aware single-stage object detector是通过在regression分支的最后一层添加IoU Prediction head来预测每个detected box 的IoU。使得模型知道每个detected box的localization Quality。在推断过程中,通过将分类分数和预测IoU相乘最为最终的检测置信度,然后在随后的NMS和AP计算中使用该置信度对所有检测进行排序。
(八)Notes
8.1 classification score和localization accuracy之间低相关性产生的原因
分类子网络和localization子网络使用彼此独立的目标函数进行训练,在不知道预测bounding box和真实Ground Truth之间的IoU就给出了预测的classification score时,因此导致了往往会出现那种IoU分数很低,但是类别置信度很高的检测目标。或者是IoU分数很高,但是预测的类别分数却很低的,从而导致了下图所示的问题:
这些高分类分数但是低IoU,低分类分数但是高IoU的检测目标在模型推断时,从两个方面影响着模型性能:
- 我们在检测目标时,有一个阈值,我们只保留这些阈值超过(比如说0.3的)那些bounding boxes,此时,可能有一部分的bounding boxes,他们的预测classification score小于这个阈值,但是和目标Ground Truth之间同样具有较大IoU。这些目标被阈值丢弃掉了
- 当我们从网络中检测出这些目标后,我们需要按照分类Score对这些阈值超过0.3的bounding boxes进行排序,利用这个排序顺序,我们保留那些和前面的bounding boxes IoU较小的bounding boxes。在这个过程中,我们又会抑制掉一部分的具有高IoU,但是classification score低的预测结果。
8.2 classification score和localization accuracy相关性的研究工作
解决两者之间低相关性的一些方法:
设计额外的子网络
- Fitness NMS将 localization accuracy 分为5个等级,将定位精度预测问题变换到分类任务上,接着在Inference阶段,每一个detected box的fitness被定义为预测fitness 概率的一个加权和(没看过这篇论文,不是很清楚具体是怎么实现的),将每一个detected box的classification score乘上fitness作为最终的检测标准。
- IoU-Net 提出an IoU Prediction head 和R-CNN并行预测每一个RoI的回归IoU,在inference阶段,按照predicted IoU对detected box进行排序,
- MS R-CNN增加a MaskIoU head parallel with the Mask head 去预测 预测Mask和真实Mask之间的IoU,在预测时,预测IoU分数乘上类别分数作为最终的mask 置信度去rank mask。
- Precise detection,设计了一个Soft-IoU层来预测质量分数,然后在EM merging unit中使用这个quality score检测重叠歧义
设计更好的损失函数
- PISA在分类损失上的改动是通过IoU-HLR计算出来一个权重,接着使用这个权重对classification loss进行加权。在回归损失上,使用class probability(博主个人觉得这里应该是classfication score)来对regression loss进行一个加权,称之为classification-aware regression loss。从而提升了分类和回归之间的相关性。
- IoU-balanced classification loss 使用regressed IoU对classification loss进行重新加权(博主认为这里应该是IoU大的,具有较大权重,使得网络能够更专注于降低IoU较大的分类损失),使得higher IoU的能够学习到更高的classification score。
8.3 更加精确的目标定位
- Multi-region detector
single-stage 在回归到一个准确的位置时很受限,因此,提出了一个迭代的 bounding box回归过程,重新调整bounding box的坐标, - Cascade R-CNN
使用multi-stage 目标检测框架,它训练一系列具有递增IoU阈值的R-CNN。 - RefineDet
通过two-step bounding box 回归提升了single-stage检测器的定位精度。使用anchor refinement module(ARM)细化手动设计的anchors,接着object detection module(ODM)使用更加精细的anchors来进行bounding boxes的回归。 - Libra R-CNN
designs balanced L1 loss - IoU-balanced localization loss
使用回归出来的IoU对定位loss进行加权,这个加权增加了inliers的权重,降低了outlier的权重
8.4 Anchor-free single-stage 检测器的研究情况
- FCOS
a per-pixel prediction 方式的FCN,它由三个head组成:classification head、regression head以及centerness head。在inference阶段,centerness head乘上classification score作为最终的score。
我们的IoU预测是anchor-based的方法,而FCOS中提出的方式是anchor-free的。