目标跟踪
CREST
在目标目标跟踪领域,目前最常用大多以相关滤波为主。CREST作者认为现有的相关滤波方法将特征提取与滤波器更新分离开,无法进行端到端训练。而作者则提出了使用一层CNN网络来模拟相关滤波操作,并将特征提取、模型训练等集成在一起,可以进行端到端训练。同时为了避免模型退化,作者采用了残差思想对网络进行了部分优化。
作者认为相关滤波主要有两个缺点:
1)相关滤波的将特征提取与跟踪器训练等隔离开,无法进行端到端的训练;
2)大多数相关滤波进行更新的时候都采用线性插值,这种带有经验性的插值方法不好,可能会使得模型更新后的跟踪器将带有噪声,导致模型漂移。
为了解决上述缺点,作者采用的方法:
1)使用一层卷积网络来代替相关滤波操作,在此处使用卷积网络计算空域相关性去替代频域上面的相关滤波操作;
2)使用残差思想去优化更新过程,使之能更好捕捉目标外观变化等情况。
作者创新点主要有三个:
1)将相关滤波操作用一层CNN进行替代,这样做使得特征提取、生成相应图等集成在一起,可以进行端到端训练;
2)将残差思想应用到tracking中,目的是捕捉时空上的目标外观变化;
3)CREST取得了 state-of-the-art 的效果。
CREST网络结构
CREST流程如下图所示,首先其特征提取网络采用VGGNET,而用于跟踪网络可以粗略分为两部分,分别为base layer(基础网络)和residual layer(残差网络)。其中base layer是用一层卷积代替相关滤波,而残差网络又细分为空域残差和时域残差两个部分。base layer和residual layer分别得到三个相应图后进行一个合并,将合并后得到的相应图作为最终相应图。
其中用于跟踪的网络结构如下图所示。输入是VGGNET中提取到的feature map(特征图)base layer是用一个大的卷积核进行卷积运算来代替相关滤波操作,而residual layer则是右边结构得到对应响应图,将所有的响应图进行合并得到最终响应图。
CREST具体流程
模型训练
第一帧以目标为中心裁剪一个patch块,然后将patch块输入VGGNET进行特征提取得到feature map。而跟踪网络部分采用随机初始化,跟踪网络在第一帧的输入feature map而label是第一帧已知目标形成的一个高斯label。利用反向传播进行训练,得到用于跟踪的网络。
在线检测
从第二帧开始进入跟踪阶段,以上一帧得到的目标位置为中心裁剪patch块,然后进入VGG进行特征提取,再将特征放入跟踪网络中进行一次前向传播,得到最后的响应图,而响应图中最大点的响应被认为是目标。
尺度估计
在多个尺度求最大响应,然后考虑到尺度变化问题,作者采用以下更新公式
(
w
t
,
h
t
)
=
β
(
w
t
∗
,
h
t
∗
)
+
(
1
−
β
)
(
w
t
−
1
,
h
t
−
1
)
(w_t, h_t) = \beta(w_t^*, h_t^*) + (1-\beta)(w_{t-1}, h_{t-1})
(wt,ht)=β(wt∗,ht∗)+(1−β)(wt−1,ht−1)
其中
w
t
w_t
wt 和
h
t
h_t
ht 是当前帧目标的目标宽和高,
w
t
∗
w_t^*
wt∗ 和
h
t
∗
h_t^*
ht∗ 是当前帧响应图得到的宽和高,
w
t
−
1
w_{t-1}
wt−1 和
h
t
−
1
h_{t-1}
ht−1 是上一帧的目标宽和高,
β
\beta
β 是权重因子,通过上述公式可以更平滑的求解得到当前目标尺度。
模型更新
作者在论文中每隔2帧对跟踪器进行更新。
效果评价
只有base layer的跟踪效果和base layer + 空域残差效果以及base layer + 空域残差 + 时域残差跟踪效果对比图如下所示。
OTB 50 不同跟踪器效果对比图
OTB100不同跟踪器效果对比图
对于CREST代码的理解,请看CREST代码理解