论文地址:https://arxiv.org/abs/2105.11237
1.本文针对什么问题
在siamese网络中一般是通过目标分类和边框回归来进行跟踪。通常,在定位过程中我们会选择分类置信度图中最大值点来作为目标所在位置,但是由于分类和回归之间的精度偏差,这个策略可能会跟踪到错误的目标。即由于存在的这个偏差,定位更准确的边界框可能因为没有好的分类分数从而导致被丢弃。
2.已有的工作是什么,有什么问题
在这之前已经有学者尝试来预测定位精度/回归精度,但是因为分类和回归一直是各自独立优化的,所以这个偏差问题一直没有解决。
到后面Ocean [Zhang et al., 2020]部分的思考了相似的问题,并且提出了一个特征对齐模块来解决他:利用回归分支的预测来修正分类分支。但是这个方法不能根除偏差问题因为他的对齐是单向的。
3.为了解决这个问题,做了什么工作
为了解决这个问题,1)本文提出了一个名叫SiamRCR的跟踪算法,该算法在模型训练时建立了分类和回归分支之间的相互链接,这个可以让他们同步进行优化(分类可以通过使用分类置信度对回归损失进行加权来让回归将注意力放在高置信度的地方,回归通过使用定位分数来对分类损失进行加权让分类分数与回归准确度保持一致,即同时高或者同时低),进而可以产生准确度一直的输出;2.)添加了一个定位分支来预测上面使用的定位分数。
除此之外,本文还做了两个设计:1)跟踪模型使用free-anchor跟踪机制来保证模型的轻量和高效;2)在回归时直接预测目标的中心偏移和宽高
4.具体方法是什么
总体结构如下:
1. 总体思路:
使用特征提取网络分别提取模板特征和搜索区域特征;然后将两个特征进行特征融合,具体方式是逐深度的互相关;再然后就是三个头部,一个是分类,一个是预测定位分数(在推理过程中生成比分类置信度更准确的跟踪分数),一个是预测目标中心偏移。
2. 基于anchor-free的边框回归:
在特征图上直接预测边界框的宽高和目标中心偏移,然后使用 ( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) (\left\lfloor {\frac{s}{2}} \right\rfloor + xs,\left\lfloor {\frac{s}{2}} \right\rfloor + ys) (⌊2s⌋+xs,⌊2s⌋+ys)来将坐标映射到原图上。三个头部分别输出分类置信度分数 p x , y c l s p_{x,y}^{cls} px,ycls,一个四维的回归向量 t x , y = ( w , h , Δ x , Δ y ) t_{x,y}=(w,h,\Delta x,\Delta y) tx,y=(w,h,Δx,Δy),和一个定位置信度分数 p x , y l o c p_{x,y}^{loc} px,yloc。
3. 相互分类和回归(Reciprocal Classification and Regression)
当一个回归边框准确度很低时,对应的分类置信度分数对应的也应该很低;同样当一个位置的分类置信度分数很低时,对应的回归边框也不应该高。为了实现这个思路,作者提出了一个叫做Reciprocal Classification and Regression的策略,即让分类分支和回归分支互相链接:
**1)**回归帮助链接(回归给分类损失加权):
为了解决低定位分数仍有高分类分数的问题,作者使用定位分数来为分类损失加权。简单来说就是在分类损失前乘上一个定位分数,公式表示如下:
L
c
l
s
=
1
N
p
o
s
∑
x
,
y
L
F
o
c
a
l
(
p
x
,
y
c
l
s
,
c
x
,
y
∗
)
∗
I
o
U
(
B
x
,
y
,
B
x
,
y
∗
)
{L_{{\rm{c}}ls}} = \frac{1}{{{N_{pos}}}}\sum\limits_{x,y} {{L_{Focal}}} \left( {p_{x,y}^{cls},c_{x,y}^*} \right)*IoU({B_{x,y}},B_{x,y}^*)
Lcls=Npos1x,y∑LFocal(px,ycls,cx,y∗)∗IoU(Bx,y,Bx,y∗)
即在正常的Focal损失后面乘上了一个IOU分数,其中
B
=
(
x
0
,
y
0
,
x
1
,
y
1
)
B=(x_0,y_0,x_1,y_1)
B=(x0,y0,x1,y1),是位置
(
x
,
y
)
(x,y)
(x,y)处的回归边框,这里的回归边框是使用预测的中心位置偏移
(
Δ
x
,
Δ
y
)
(\Delta x,\Delta y)
(Δx,Δy)和宽高
(
w
,
h
)
(w,h)
(w,h)计算出来的:
x
0
=
x
+
Δ
x
−
w
/
2
,
y
0
=
y
+
Δ
y
−
h
/
2
x
1
=
x
+
Δ
x
+
w
/
2
,
y
1
=
y
+
Δ
y
+
h
/
2
\left. \begin{array} { l } { x _ { 0 } = x + \Delta x - w / 2 , \quad y _ { 0 } = y + \Delta y - h / 2 } \\ { x _ { 1 } = x + \Delta x + w / 2 , \quad y _ { 1 } = y + \Delta y + h / 2 } \end{array} \right.
x0=x+Δx−w/2,y0=y+Δy−h/2x1=x+Δx+w/2,y1=y+Δy+h/2
**2)**分类帮助链接(分类给回归损失加权)
与上同理,为了避免分类低置信度的位置有定位分数的回归边框,应该让回归分支能够感知到分类置信度。这里使用
p
x
,
y
c
l
s
p_{x,y}^{cls}
px,ycls来给回归损失动态加权,公式表示如下:
L
r
e
g
=
1
N
p
o
s
∑
x
,
y
I
I
{
c
x
,
y
∗
=
1
}
L
I
o
U
(
t
x
,
y
,
t
x
,
y
∗
)
∗
p
x
,
y
c
l
s
{L_{reg}} = \frac{1}{{{N_{pos}}}}\sum\limits_{x,y} {{\rm I}{{\rm I}_{\left\{ {c_{x,y}^* = 1} \right\}}}{L_{IoU}}\left( {{t_{x,y}},t_{x,y}^*} \right)*p_{x,y}^{cls}}
Lreg=Npos1x,y∑II{cx,y∗=1}LIoU(tx,y,tx,y∗)∗px,ycls
这里
L
I
o
U
L_{IoU}
LIoU是IoU损失,而
I
I
{
c
x
,
y
∗
=
1
}
{{\rm I}{{\rm I}_{\left\{ {c_{x,y}^* = 1} \right\}}}}
II{cx,y∗=1}是一个指示函数,只在
c
x
,
y
∗
=
1
c_{x,y}^* = 1
cx,y∗=1时等于1,否则为0。
4. 定位分数分支:
在训练时使用定位分数为分类损失加权,在这种训练方式下如果在测试时只使用分类置信度图的最大值位置来回归边框仍然可能会存在精度偏差。因为在分类分支的训练过程中定位分数是手动给予的,这个手动给予归纳的训练可以使分类置信度分数与定位分数保持协同但不一定保持一致,(看到这反正我有点懵,我猜测意思大概是这种训练得到的分类置信度分数总体趋势上与定位分数是一样的,但是在值的具体大小上与定位分数仍有差异)。因此作者设计了一个新的分支,叫做定位分数分支,来预测用于回归边界框的特征图的定位分数,损失函数设计如下:
L
l
o
c
=
1
N
p
o
s
∑
x
,
y
I
I
{
c
x
,
y
∗
=
1
}
L
B
C
E
(
p
x
,
y
l
o
c
,
I
o
U
(
B
x
,
y
,
B
x
,
y
∗
)
)
{L_{loc}} = \frac{1}{{{N_{pos}}}}\sum\limits_{x,y} {{\rm{I}}{{\rm{I}}_{\left\{ {c_{x,y}^* = 1} \right\}}}{L_{BCE}}(p_{x,y}^{loc},IoU({B_{x,y}},B_{x,y}^*))}
Lloc=Npos1x,y∑II{cx,y∗=1}LBCE(px,yloc,IoU(Bx,y,Bx,y∗))
其中
L
B
C
E
L_{BCE}
LBCE是指Binary Cross Entropy (BCE) loss。
而在测试推理期间,最后的跟踪分数是通过分类置信度分数 p x , y c l s p_{x,y}^{cls} px,ycls和定位分数 p x , y l o c p_{x,y}^{loc} px,yloc相乘得到的,最后使用这个跟踪分数代替分类置信度分数寻找目标中心的位置。如下图所示:
5. 总的损失函数:
最后的总损失函数如下:
L
=
L
c
l
s
+
λ
1
∗
L
r
e
g
+
λ
2
∗
L
l
o
c
L = {L_{cls}} + {\lambda _1}*{L_{reg}} + {\lambda _2}*{L_{loc}}
L=Lcls+λ1∗Lreg+λ2∗Lloc
这里
λ
1
\lambda_1
λ1和
λ
2
\lambda_2
λ2都是超参数,本文的实验中设置为1。
5. 备注
本文中我最喜欢的一句话是:without bells and whistles,没有花里胡哨的组件和功能,看来不仅是我看见那些花里胡哨的网络结构头疼,哈哈哈哈哈。