SiamCorners: Siamese Corner Networks for Visual Tracking 笔记
一、创新点
- 引入了一个修改的corner pooling layer,从以往的边界框估计转变为对角预测(左上和右下)
- 引入了一种分层的特征融合策略,可以使得corner pooling模块能够预测深度网络中的跟踪目标的多个角点
- 引入了一个新的惩罚项
二、RPN的缺陷
- anchor数量多,正负样本不平衡导致分类性能下降
- 设计选项较多(anchor数量,大小,纵横比等)
三、SiamCorners网络结构
四、Tracking Coners Loss
从图2我们可以看到经过Corner Pooling之后会得到热图和偏差,在热图中由于只有角的位置为正,而其余位置均为负,所以使得网路难以学习,因此本文将对正位置半径以内的负位置减少惩罚,这里的偏差指的是由于热图与搜索区域之间隐射时会产生的误差。
下面给出热图的损失函数:
其中
X
^
x
y
\hat{X}_xy
X^xy表示的是热度图中(x,y)这个点的预测分数,而
X
x
y
=
e
x
p
(
−
(
x
−
c
^
x
)
2
+
(
y
−
c
^
y
)
2
2
δ
c
^
2
)
X_xy=exp(-\frac{(x-\hat{c}_x)^2+(y-\hat{c}_y)^2}{2\delta_{\hat{c}}^{2}})
Xxy=exp(−2δc^2(x−c^x)2+(y−c^y)2)表示的是热度图中(x,y)这个点的经过非规范高斯函数ground-truth分数,可以看出
(
1
−
X
x
y
)
(1-X_xy)
(1−Xxy)减少了预测角在正位置的半径内的惩罚,
δ
c
^
\delta_{\hat{c}}
δc^是半径的1/3。
下面给出偏差的损失函数:
其中
m
k
和
n
k
m_k和n_k
mk和nk是原图对象的第k个角标,
o
k
o_k
ok指的是ground_truth偏差,而
o
^
k
\hat o_k
o^k网络预测的偏差。
下面得出总的loss
五、Corner Pooling
结构图
有关Corner Pooling的介绍可参考link.
公式表示为:
六、角热图和偏移量的解码
通过前面一系列的步骤后,我们得到热图和偏移后,需要对热图进行sigmoid处理,然后用nms去除冗余的角点,紧接着我们需要分别从左上角和右下角热图中相对应的选取得分最高的N个,我们将这N个角集表示为、
其中
在获得N个角的
C
O
R
∗
COR^*
COR∗之后,我们需要采用多层特征融合和惩罚策略来选择最优跟踪角。
六、多层次特征融合和角点选择
1、多层次特征融合
在这里很简单,将上面得到的
C
O
R
∗
COR^*
COR∗进行拼接得到一个纬度为3N*5的角集COR
2、角点选择
首先通过以下公式计算角点的整体尺度:
其中
w
=
X
B
r
−
X
T
l
,
h
=
Y
B
r
−
Y
T
l
,
p
=
1
2
(
w
+
h
)
w=X_{B_r}-X_{T_l},h=Y_{B_r}-Y_{T_l},p=\frac{1}{2}(w+h)
w=XBr−XTl,h=YBr−YTl,p=21(w+h),以相同的方式我们可以求出最后一帧的尺度记做
c
s
c
^
2
\hat{c_sc}^2
csc^2,因此我们利用惩罚项来抑制目标的大小和比例的变化
其中
c
r
和
c
^
r
c_r和\hat c_r
cr和c^r分别表示当前帧和最后一帧的长宽比
然后我们将COR中的每个角的得分计算为:
进一步我们引入了新的索引项U(u),u=1,2,…,3N,表示COR中每个角相对于上一帧从大到小变化程度的指标,其中变化程度是由两个相邻帧之间目标的中心、宽度和高度之差的绝对值之和决定的。
因此最终的COR中的角的得分表示为:
其中
S
h
a
n
u
S_han^u
Shanu表示的是汉宁窗的一个变体,因为我们只使用了汉宁窗的单挑递增部分。
最后我们选取得分最高的一个作为跟踪的边界框,利用线性插值运算更新目标尺寸,实现形状的平滑变化。
整个算法的伪代码: