1.资源
Adaptive NMS: Refining Pedestrian Detection in a Crowd
2.简介
Adaptive NMS的研究者认为这在物体之间有严重遮挡时可能带来不好的结果。
我们期望当物体分布稀疏时,NMS大可选用小阈值以剔除更多冗余框;而在物体分布密集时,NMS选用大阈值,以获得更高的召回。
既然如此,该文提出了密度预测模块,来学习一个框的密度。
就是想要去自适应的调整NMS时的阈值,使得待检测目标不密集时,用较小的NMS阈值杀掉其他的bbox,待检测目标密集呢(出现重叠),尽可能的保留正确的bbox
3.Adaptive NMS
如何表示密集度呢?
密度定义公式
d
i
:
=
max
b
j
∈
G
,
i
≠
j
iou
(
b
i
,
b
j
)
d_{i}:=\max _{b_{j} \in \mathcal{G}, i \neq j} \operatorname{iou}\left(b_{i}, b_{j}\right)
di:=bj∈G,i=jmaxiou(bi,bj)
i表示每个生成的候选框bbox,j表示真实标注的框。
即每一个候选框的密度定义为,其与所有真实框的最大iou。以此来表示密度。
于是阈值就被定义为:
N
M
:
=
max
(
N
t
,
d
M
)
N_{\mathcal{M}}:=\max \left(N_{t}, d_{\mathcal{M}}\right)
NM:=max(Nt,dM)
这里的M就表示为,当前集合内,置信度得分最高的候选框bbox。
于是伪代码可以表示如下:
集合B
:就是所有出来的候选框;
集合S
:每个候选框的置信度得分;
集合D
:每个候选框的密度情况;
Nt
:NMS杀框时的阈值;
其中红色框内为原始的NMS流程;绿色框内为Adaptive NMS方法。
4.当Soft-Nms 与 Adaptive NMS结合时
原soft-nms公式:
s
i
=
{
s
i
,
iou
(
M
,
b
i
)
<
N
t
s
i
(
1
−
iou
(
M
,
b
i
)
)
,
iou
(
M
,
b
i
)
≥
N
t
s_{i}=\left\{\begin{array}{ll}s_{i}, & \operatorname{iou}\left(\mathcal{M}, b_{i}\right)<N_{t} \\s_{i}\left(1-\operatorname{iou}\left(\mathcal{M}, b_{i}\right)\right), & \operatorname{iou}\left(\mathcal{M}, b_{i}\right) \geq N_{t}\end{array}\right.
si={si,si(1−iou(M,bi)),iou(M,bi)<Ntiou(M,bi)≥Nt
流程图
可以看到soft-nms是慢慢降低si的得分,即惩罚重叠bbox的得分,而不是简单粗暴的直接删除。相当于慢慢的去筛选重叠部分的bbox。
注意
绿色的部分只替换红色的中间那行,也就是说,绿色的if条件省略掉了,他与红色的相同。
这里将soft-nms 与 adaptive nms结合,可以得到。
密度定义:
d
i
:
=
max
b
j
∈
G
,
i
≠
j
iou
(
b
i
,
b
j
)
d_{i}:=\max _{b_{j} \in \mathcal{G}, i \neq j} \operatorname{iou}\left(b_{i}, b_{j}\right)
di:=bj∈G,i=jmaxiou(bi,bj)
阈值定义:
N
M
:
=
max
(
N
t
,
d
M
)
N_{\mathcal{M}}:=\max \left(N_{t}, d_{\mathcal{M}}\right)
NM:=max(Nt,dM)
置信度惩罚公式定义:
s
i
=
{
s
i
,
iou
(
M
,
b
i
)
<
N
M
s
i
f
(
iou
(
M
,
b
i
)
)
,
iou
(
M
,
b
i
)
≥
N
M
s_{i}=\left\{\begin{array}{ll}s_{i}, & \operatorname{iou}\left(\mathcal{M}, b_{i}\right)<N_{\mathcal{M}} \\s_{i} f\left(\operatorname{iou}\left(\mathcal{M}, b_{i}\right)\right), & \operatorname{iou}\left(\mathcal{M}, b_{i}\right) \geq N_{\mathcal{M}}\end{array}\right.
si={si,sif(iou(M,bi)),iou(M,bi)<NMiou(M,bi)≥NM
可以看到,这就是soft-nms,只不过对于Nm这个阈值,有个自适应选择的过程。
通常我们的 f ( i o u ( M , , b i ) ) = e − iou ( M , b i ) 2 σ f(iou(\mathcal{M},,b_{i})) = e^{-\frac{\operatorname{iou}\left(\mathcal{M}, b_{i}\right)^{2}}{\sigma}} f(iou(M,,bi))=e−σiou(M,bi)2
再解释一下吧。这里虽然惩罚了重叠的bbox,使得其置信度分数降低。但是,提高了阈值,假设密度得分高于Nt阈值,则正式的NMS阈值将加大,选择没有那么重叠的bbox不进行惩罚,从而提高了高遮挡下bbox的保留
。
5. 密度预测模块
论文把,密度预测作为一个回归任务,密度的值采用上述定义计算,损失函数为Smooth-L1 loss。
在训练CNN时,每次还需要求出密度作为监督信号,训练网络能够拟合这个密度函数,即输入一张图片,能输出每个位置的物体密度,但这个参数怕是作者调了不短的时间,模型如下:
对应论文第四部分,原文这块也说的不清楚,而且有点坑的是没有公布代码。