Soft-NMS – Improving Object Detection With One Line of Code
论文链接: https://arxiv.org/abs/1704.04503
一、 Problem Statement
传统的NMS首先会对预测出来的bounding box进行排序,然后选择一个最大值与所设置的阈值进行比较,从而删除那些重叠度较高的bounding box。但是会有下图所示的问题:
传统的NMS会把相邻的检测框的置信度变为0。因此一个目标如果真的出现在重叠的阈值范围内,它很有可能被遗漏,导致一个精度的下降。
二、 Direction
作者考虑如果我们降低检测的分数,而不是直接置为0,这个检测框依旧在排序的队列之中。也就是说,如果一个bounding box 与最大值的bounding box有很高的重叠度,它应该被赋予一个较低的值。如果它与最大值的bounding box有非常低的重叠度,它就维持原来的值。
三、 Method
传统的NMS:
s
i
=
{
s
i
,
i
o
u
(
M
,
b
i
)
<
N
t
0
,
i
o
u
(
M
,
b
i
)
≥
N
t
s_i = \{ \begin{aligned} s_i, \quad iou(M,b_i) < N_t \\ 0, \quad iou(M,b_i) \geq N_t \end{aligned}
si={si,iou(M,bi)<Nt0,iou(M,bi)≥Nt
N t N_t Nt是阈值, s i s_i si为分数, M M M是最大值。然而,NMS需要考虑下列条件:
- 相邻检测框的分数应该是减小到一定的程度,使得有较小的的可能增加false positive比例
- 用较小的NMS阈值去移除相邻检测框是sub-optimal的。如果在测试的阶段(evaluation)使用较大的NMS阈值,增加miss-rate
- 如果使用大的NMS阈值,会导致average precision下降。
因此作者重新设计rescoring function for Soft-NMS,如下:
s
i
=
{
s
i
,
i
o
u
(
M
,
b
i
)
<
N
t
s
i
(
1
−
i
o
u
(
M
,
b
i
)
)
,
i
o
u
(
M
,
b
i
)
≥
N
t
s_i = \{ \begin{aligned} s_i, \quad iou(M,b_i) < N_t \\ s_i(1-iou(M,b_i)), \quad iou(M,b_i) \geq N_t \end{aligned}
si={si,iou(M,bi)<Ntsi(1−iou(M,bi)),iou(M,bi)≥Nt
也就是说,如果大于NMS阈值的话,只是减少它的分数,而非置为0。作者更进一步考虑,如果这个penalty不是连续的,可能会导致检测框ranked list改变的很大。理想状态下应该是:如果没有重叠区域,应该是没有penalty的,反之,IoU越大,penalty越大。而且,如果IoU小,应该逐渐增大penalty。最后如果bounding box
b
i
b_i
bi与
M
M
M的IoU接近1,
b
i
b_i
bi应该有很大的penalty。
所以作者最后使用了Gaussian penalty。
s
i
=
s
i
e
−
i
o
u
(
M
,
b
i
)
2
σ
,
∀
b
i
∉
D
s_i = s_ie^{-\frac{iou(M,b_i)^2}{\sigma}}, \quad \forall b_i \notin D
si=sie−σiou(M,bi)2,∀bi∈/D
σ \sigma σ在本论文中使用0.5。具体的伪代码如下:
四、 Conclusion
Soft-NMS改进了传统的NMS算法,而没有增加额外的参数,容易拓展到其他检测网络中。