整体把握
SiamBAN是今年CVPR中效果最好的跟踪器之一,研究它的原理更加能够很好的帮助我们掌握目前跟踪器发展的趋势。
SIamBAN,按照意思分析是孪生自适应框。“孪生”,说明该跟踪使用了Siamese网络架构;而“自适应框”,则是该跟踪器采用了anchor-free的策略,不预先设定anchor框的尺寸,使得框拥有更大强大的自由度。
通过分析论文和代码,我认为SiamBAN就是一个优化版的SiamRPN++,最大的创新点在于anchor-free的引用,去掉了预定义的anchor,从而使得模型整体的参数下降,使得速度得到进一步的提升。
对于SiamBAN的原理分析,我准备采用三个方面:网络框架、训练、跟踪。
网络框架
与SIamRPN++相似,或者说网络框架基本相同。不过不同点在于SiamBAN中引入了空洞卷积的原理,经过实验证明,空洞卷积能够增大感受野,提升跟踪性能。
SIamBAN的网络框架如下图所示:
通过上图,可以发现网络分为两个分支:搜索分支和模板分支。
整体的运行原理:
- 将搜索补丁和模板补丁输入对应的网络分支,在第4、5个卷积模块中添加空洞卷积,膨胀因子分别设置为2和4。
- 分别取出搜索分支和模板分支中第3、4、5卷积模块的卷积结果。为了减少计算量,作者只选取了模板分支卷积结果的 7 × 7 7\times7 7×7区域。因为当输入补丁的尺寸为 127 × 127 127\times127 127×127,输出的特征图的尺寸为 15 × 15 15\times15 15×15,这时候选取[4:11]的区域,完全可以代表模板中选定的物体。
- 将相对应的卷积结果进行互相关操作。比如,搜索分支第3卷积模块的卷积结果应该与模板分支第3卷积模块的卷积结果进行互相关,其中模板分支的卷积结果作为卷积核。那么,最后获得了三份互相关的特征图。(上图显示)
- 将这三份互相关特征图合并为一张。SiamBAN在代码中使用的方法是取平均,即一个位置的三个值相加除以三。最后得到了一份互相关特征图。
- 实际上,当运行到第4步的时候,就可以发现其实网络运行就可以结束了。但是作者为了能够减少计算量, 将互相关图的维度减少到256.(neck)
细节补充
- 骨干网络选取的ResNet-50。
- 三个互相关特征图的尺寸是一样的。虽然他们是不同层的卷积结果,但是通过控制卷积核大小、padding、dilation、stride完全可以实现输出的尺寸相同。可以参考下面输出尺寸的公式:
H n e w = H o l d + 2 × p a d d i n g − d i l a t i o n × ( k e r n e l − 1 ) − 1 s t r i d e H_{new}=\frac{H_{old}+2\times padding-dilation\times (kernel-1)-1}{stride} Hnew=strideHold+2×padding−dilation×(kernel−1)−1
训练
将搜索补丁和模板补丁输入网络后会得到二通道分类得分图和四通道偏差坐标图。那么,想要网络得到这样的输出就要对网络进行训练。
分类训练
正样本代表分类特征点为1,负样本代表分类特征点取值为0.
所谓分类训练,指的就是教会网络分辨正样本和负样本的能力,在跟踪过程中正样本和负样本的界定为跟踪目标和其他。那么界定方法的不同也就成为了区分不同训练过程的关键。可以用下列图表表示:
之前的SiamRPN中对于正负样本的界定为特征图对应搜索补丁上anchor与真实框的IOU分数。IOU>0.6的特征点为正样本,用1表示;IOU<0.3的特征点为负样本,用0表示。又因为样本的数量太多可能会增加计算负担,所以只挑选了最多16个正样本,48个负样本。特征图对应搜索补丁上的anchor示意图,如下所示:
右图的anchor与真实框的IOU决定对应特征图上一点的正、负取值。
而对于SiamBAN而言,正负样本的界定为如下图所示:
从上图中可以看到,在搜索补丁上画了两个椭圆
E
1
、
E
2
E_1、E_2
E1、E2。它们以目标中心,分别以(
g
h
2
,
g
w
2
\frac{g_h}{2},\frac{g_w}{2}
2gh,2gw)、(
g
h
4
,
g
w
4
\frac{g_h}{4},\frac{g_w}{4}
4gh,4gw)为半径,获得椭圆(
g
w
、
g
h
g_w、g_h
gw、gh代表真实框的宽和高)。表达式为:
E
1
:
(
p
i
−
g
x
c
)
2
(
g
w
2
)
2
+
(
p
j
−
g
y
c
)
2
(
g
h
2
)
2
=
1
E
2
:
(
p
i
−
g
x
c
)
2
(
g
w
4
)
2
+
(
p
j
−
g
y
c
)
2
(
g
h
4
)
2
=
1
E_1:\frac{(p_i-g_{x_c})^2}{(\frac{g_w}{2})^2}+\frac{(p_j-g_{y_c})^2}{(\frac{g_h}{2})^2}=1\\ E_2:\frac{(p_i-g_{x_c})^2}{(\frac{g_w}{4})^2}+\frac{(p_j-g_{y_c})^2}{(\frac{g_h}{4})^2}=1
E1:(2gw)2(pi−gxc)2+(2gh)2(pj−gyc)2=1E2:(4gw)2(pi−gxc)2+(4gh)2(pj−gyc)2=1
规定在椭圆
E
2
E_2
E2内的部分为正样本,椭圆
E
1
E_1
E1外的部分为负样本,两个椭圆之间的部分忽略。
因为在SiamBAN中特征图上的点与搜索补丁上的点的对应关系为:
(
p
i
,
p
j
)
=
[
w
i
m
2
+
(
i
−
w
2
)
×
s
,
h
i
m
2
+
(
j
−
h
2
)
×
s
]
(p_i,p_j)=[\frac{w_{im}}{2}+(i-\frac{w}{2})\times s,\frac{h_{im}}{2}+(j-\frac{h}{2})\times s]
(pi,pj)=[2wim+(i−2w)×s,2him+(j−2h)×s]
其中
(
p
i
,
p
j
)
(p_i,p_j)
(pi,pj)为搜索补丁上的坐标,
w
i
m
、
h
i
m
w_{im}、h_{im}
wim、him为搜索补丁的宽、高,
w
、
h
w、h
w、h为特征图的宽、高,
s
s
s为总步长(所有步长的乘积)。
那么可以得到特征图上的点映射会搜索补丁。落在搜索补丁正样本区域的点取正值,为1;落在负样本区域的点取负值,为0.示意图如下:
当正负样本设定好后,损失函数的选取为通用的交叉熵函数。
回归训练
之前SiamRPN中回归训练遵循的原理为:
g
t
−
a
n
c
h
o
r
=
偏
差
gt-anchor=偏差
gt−anchor=偏差。通过比较预测偏差和实际偏差的损失来不断逼近真实框。这种方法是基于anchor的回归。但是SiamBAN的作者认为人在观察物体的时候并没有anchor的存在,于是引入了anchor-free的策略进行回归。
在SiamBAN中,作者遵循的原理为:
g
t
−
搜
索
补
丁
的
坐
标
=
偏
差
gt-搜索补丁的坐标=偏差
gt−搜索补丁的坐标=偏差,即特征图对应搜索补丁上每点与真实框四条边的距离。
当我们通过网络获得特征图对应搜索补丁上每点与真实框四条边的预测距离后,利用下面等式:
p
x
1
=
p
i
−
d
l
r
e
g
p
y
1
=
p
j
−
d
t
r
e
g
p
x
2
=
p
i
+
d
r
r
e
g
p
y
2
=
p
i
+
d
b
r
e
g
p_{x_1}=p_i-d_l^{reg}\\ p_{y_1}=p_j-d_t^{reg}\\ p_{x_2}=p_i+d_r^{reg}\\ p_{y_2}=p_i+d_b^{reg}\\
px1=pi−dlregpy1=pj−dtregpx2=pi+drregpy2=pi+dbreg
可以得出特征图对应搜索补丁上每点预测框的左上角和右下角(注意理想情况下每点的预测框应该相同,因为原理中的偏差是每点与真实框的距离,那么反推回来每点预测的应该都是真实框)。通过将左上角和右下角的转换,可以得到特征图对应搜索补丁上每点的预测框,进而也能得到预测框与真实框的IOU。利用回归损失函数:
1
−
I
O
U
1-IOU
1−IOU可以进行训练。
跟踪
- 输入跟踪视频
- 划定需要跟踪的目标
- 跟踪器初始化(第一帧的处理)
- 截取模板补丁(方法与SiamRPN相同)
- 将模板补丁输入网络,得到第3、4、5层的卷积结果,并且对卷积结果进行处理(降维和模板特征图截取7x7区域)
- 进行跟踪
- 截取搜索补丁(方法与SiamRPN相同)
- 将搜索补丁输入网络,得到第3、4、5层的卷积结果
- 与模板补丁的三个卷积结果进行相关卷积,并且将得到的三个互相关特征图进行加权平均,得到分类特征图和偏差坐标图。
- 利用上述公式(回归训练中),将得到的偏差坐标图转换成多个预测框
- 施加平移惩罚和尺度惩罚,从多个预测框中获得最佳跟踪框,从而实现跟踪。
时间有限,如果想看具体的跟踪过程,请留言告诉我,多的话我就把它写出来。其实这个跟踪过程跟SiamRPN差不多,那个看懂了这个自然没问题。