论文笔记
发表时间:2020
期刊会议:ECCV
方向分类: 目标跟踪
研究内容
做了什么:
本文提出了一个能够在视频序列中传播目标附近场景信息的跟踪结构,这种场景信息被用来实现提高目标预测的场景感知能力。
解决了什么问题:
已存在的跟踪器只依靠外观来跟踪,没有利用任何周围场景中的信息,容易被相似的物体干扰。
现状不足
- 已存在的跟踪器只依靠外观来跟踪,没有利用任何周围场景中的信息;
- 在线更新模板的方法虽然也利用了已跟踪的帧,但是这样的策略不能捕捉到场景中其他目标的位置和特点。
创新点
- 提出了一个新的跟踪结构,能捕捉场景信息,并将其表示为一个位置状态向量(state vector);
- 提出了一个传播模块,该模块能将上一帧中目标附近的对象位置状态映射到后续帧;
- 提出了一个预测器模块,该模块能够有效的融合目标外观模型的输出与场景信息对目标位置进行预测;
- 使用RNN网络模块来更新新的场景信息。
总体架构

四个模块:1.Propagation Module;2.Appearance Model;3.Target Predictor;4.State Update
总体思路:在传统的跟踪流程中增加一个state vector(传统跟踪是指仅使用appearance model和predictor),作用是保存上一帧中目标附近的场景信息并映射到当前帧。实际上,这个向量表示了上一帧中当前位置是属于背景、目标还是相似干扰物。
跟踪流程:使用两个线索进行跟踪:1)目标的外观,2)场景信息(目标附近其他对象的位置信息)。对于目标的外观,使用正常的跟踪流程即可得到。例如DiMP中预测一个目标外观模型,然后使用这个模型在测试帧上进行卷积得到最后的响应图sts_tst。对于场景信息,由state vector得到。给定前一帧的场景信息 ht−1h_{t-1}ht−1 ,通过Propagation 模块得到当前帧的场景信息h^t−1{\hat h_{t - 1}}h^t−1,和h^t−1{\hat h_{t - 1}}h^t−1中每个位置的值的置信度ξt{\xi _t}ξt。最后将通过外观模型得到的响应图sts_tst,当前帧的场景信息h^t−1{\hat h_{t - 1}}h^t−1,以及置信度ξt{\xi _t}ξt输入到最后的预测模块中得到最后的位置响应图。

模块细节
- State 向量的构造
- 为了知道目标周围的场景信息,本文为目标附近的每个区域维持了一个state 向量。具体的,对于深度特征xtx_txt中的每个空间位置r∈Ωr \in \Omegar∈Ω,作者设置了一个S维的state向量hrh^rhr,即h∈RW×H×Sh \in {\mathbb{R}^{W \times H \times S}}h∈RW×H×S。这些state向量包含了有益于单目标跟踪的信息,例如他包含了这个位置对应的是目标,背景还是相似干扰物的信息。
- 在首次跟踪时,使用一个包含了两个卷积层的小网络Υ\UpsilonΥ来初始化state向量,这个网络使用初始帧中目标标注B0B_0B0作为输入,生成一个特定目标位置的单通道标签图。
- 在传播过程中,给定测试帧ttt,使用propagation模块将state向量ht−1h_{t-1}ht−1从前一帧的位置转换到当前帧的位置,即(h^t−1,ξt)=Π(xt,xt−1,ht−1)({\hat h_{t - 1}},{\xi _t}) = \Pi ({x_t},{x_{t - 1}},{h_{t - 1}})(h^t−1,ξt)=Π(xt,xt−1,ht−1). 其中ξt{\xi _t}ξt表示传播后每个位置的state向量的置信度。
- 在更新过程中,使用最后得到的位置响应图ςt{\varsigma _t}ςt和外观模型预测得到的响应图sts_tst来更新state向量。简单来说就是使用当前帧的响应图信息来更新场景信息,例如重新设置不正确的信息,将新进入的对象标记为干扰物。
- State 传播模块
这一部分对应于propagation module,作用是将上一帧中目标附近各个位置对应的场景信息传播到当前帧。
输入:前一帧的深度特征xt−1x_{t-1}xt−1,当前帧的深度特征xtx_txt,前一帧的场景信息ht−1h_{t-1}ht−1.(注意这里的深度特征与外观模型中使用的深度特征不一定相同)过程:目的是计算两帧之间的密集对应性,并将这种对应性表示为一种概率分布,其中p(r′∣r)p(r'|r)p(r′∣r)表示在已知当前帧位置r的情况下,该位置的目标对应于上一帧位置r’处的目标的概率。
- 对于当前帧的所有像素点我们可以得到一个4D的 CV∈RW×H×W×H{\text{CV}} \in {\mathbb{R}^{W \times H \times W \times H}}CV∈RW×H×W×H(cost volume),他表示了当前帧中每个位置与上一帧中每个位置的匹配损失。CV中每个元素CV(r′,r){\text{CV}}(r',r)CV(r′,r)的计算方法是:上一帧特征中以位置r’为中心的3x3窗口与当前帧特征中以位置r为中心的3x3窗口计算互相关。为了计算的高效性,不计算所有像素点之间的对应关系,只计算离目标一定距离(dmaxd_{max}dmax)之内的像素点之间的对应关系。
- 下一步对这个对应关系CV进行处理。将CV切片CVr′(r)∈RW×H{\text{C}}{{\text{V}}_{r'}}(r) \in {\mathbb{R}^{W \times H}}CVr′(r)∈RW×H(表示上一帧位置r’与当前帧所有位置的对应关系)通过两个卷积块得到处理后的匹配损失ϕ(r′,r)\phi (r',r)ϕ(r′,r)(r’是一个常数,表示上一帧的位置),然后使用softmax对ϕ(r′,r)\phi (r',r)ϕ(r′,r)进行处理得到初始对应关系ϕ′(r′,r)=exp(ϕ(r′,r))∑r′′∈Ωexp(ϕ(r′,r′′))\phi' (r',r) = \frac{{\exp (\phi (r',r))}}{{\sum\nolimits_{r'' \in \Omega }{\exp (\phi (r',r''))}}}ϕ′(r′,r)=∑r′′∈Ωexp(ϕ(r′,r′′))exp(ϕ(r′,r))。softmax操作聚合当前帧维度上的信息,并提供两个帧之间位置的软关联。类似的,为了聚合上一帧的位置信息,将ϕ’\phi’ϕ’通过两个更多的卷积块并在前一帧的位置维度上使用softmax。然后我们就得到了上一帧位置r’处的场景信息在当前帧每个位置r处的概率分布**p(r′∣r)p(r'|r)p(r′∣r)。
- 最后就是在上一帧state向量的基础上根据p(r′∣r)p(r'|r)p(r′∣r)来计算当前帧的state向量(当前帧位置r处的state向量应该是与上一帧中对应关系最高的state向量)。
h^t−1r=∑r′∈Ωht−1r′p(r′∣r)\hat h_{t - 1}^r = \sum\limits_{r' \in \Omega } {h_{t - 1}^{r'}p(r'|r)}h^t−1r=r′∈Ω∑ht−1r′p(r′∣r)- 在使用h^t−1r\hat h_{t - 1}^rh^t−1r进行目标定位时我们有必要知道由上一帧传播得到的当前帧位置r处的场景信息是否正确,因此针对当前帧每个位置r处的概率分布p(r′∣r)p(r'|r)p(r′∣r)估计一个置信度ξtr{\xi _t^r}ξtr。p(r′∣r)p(r'|r)p(r′∣r)中的值表示我们对当前帧位置r对应于上一帧某个位置的自信程度,正常情况下应该是呈正态分布。但当p(r′∣r)p(r'|r)p(r′∣r)呈均匀分布时,这在另一方面体现出的是一种不确定性,这时上述公式计算的是ht−1r′h_{t-1}^{r'}ht−1r′的均值,计算出的h^t−1r\hat h_{t - 1}^rh^t−1r是不可信的。为此本文使用p(r′∣r)p(r'|r)p(r′∣r)的负香农熵来得到h^t−1r\hat h_{t -1}^rh^t−1r的置信度(感觉就是计算与均匀分布的相似程度,越相似越不可信):
ξtr=∑r′∈Ωp(r′∣r)log(p(r′∣r))\xi _t^r = \sum\limits_{r' \in \Omega } {p(r'|r)\log (p(r'|r))} ξtr=r′∈Ω∑p(r′∣r)log(p(r′∣r))
这个ξtr\xi _t^rξtr随后会被用来决定是否信任h^t−1r\hat h_{t - 1}^rh^t−1r用来计算最后的目标置信分数。输出:当前帧的每个位置r处的state向量h^t−1r\hat h_{t - 1}^rh^t−1r,当前帧每个位置r处state向量的置信度ξtr\xi _t^rξtr
- Target Confidence Score 预测
这一部分对应于Predictor模块,预测当前帧中目标的位置。
输入:场景信息h^t−1\hat h_{t-1}h^t−1,场景信息置信度ξt{\xi _t}ξt,外观模型的预测输出sts_tst。(sts_tst对该位置进行背景与目标的分类,h^t−1\hat h_{t-1}h^t−1包含了该位置在上一帧的背景与目标的分类信息,ξt{\xi _t}ξt表达了场景信息中每个位置的置信度)
过程:将三个输入在通道维度上进行concatenate,然后经过两个卷积块,一个sigmoid层,最终得到中间的位置响应图ξt{\xi _t}ξt。但这个响应图在目标与其他物体交错时变得不可靠,为了处理这个情况,对响应图进行了进一步的处理。具体的,设定一个阈值μ\muμ,使用一个指示函数将响应图中小于这个阈值的全部mask掉。注意mask操作是可微操作。
输出:最终的位置响应图ςt{\varsigma _t}ςt.
- State更新
这一部分对应于State Update模块,根据当前帧的信息更新State向量。
输入:sts_tst,ςt{\varsigma _t}ςt,h^t−1\hat h_{t-1}h^t−1
过程:具体的功能是标记新的干扰物,修正错误的state向量。模块包含一个卷积门控循环单元(ConvGRU,是一种RNN网络)。首先将sts_tst与ξt{\xi_t}ξt的最大值concatenate到一起得到ConvGRU的输入ft∈RW×H×4{f_t} \in {\mathbb{R}^{W \times H \times 4}}ft∈RW×H×4,并将h^t−1\hat h_{t-1}h^t−1作为ConvGRU前一个时间步的隐藏状态(hidden states)。然后ConvGRU使用输入的ftf_tft更新h^t−1\hat h_{t-1}h^t−1的状态得到hth_tht。
输出:新的state向量hth_tht
- 训练方式
输入:一个视频序列
处理:采样NtrainN_{train}Ntrain帧用来构造外观模型,再采样一个包含NseqN_{seq}Nseq帧的子序列,用来对模型进行训练
过程:
- 正常跟踪训练:首先使用初始帧初始化一个state向量h0h_0h0,然后传播给下一帧得到h^0\hat h_0h^0,并预测目标ξ1{\xi_1}ξ1,最后使用预测得到的目标分数对state向量进行更新得到$ h_1$。重复这个过程直至序列结束。
- 为了保证propagation模块能够得到学习,添加了一个小的网络头来预测state向量是属于目标还是背景。
- 因为外观模型预测的sts_tst在大部分情况下是准确的,因此predictor模块有可能只是sts_tst的恒等变换,无法利用state向量。为了避免这种情况,训练期间在sts_tst上随机加上一些干扰峰,激励预测器去利用场景信息来排除干扰。
损失计算:
- 计算最终的ξt{\xi _t}ξt与标签之间的均方差损失LtpredL_t^{pred}Ltpred
Ltpred=∥ςt−zt∥2L_t^{pred} = {\left\| {{\varsigma _t} - {z_t}} \right\|^2}Ltpred=∥ςt−zt∥2- 这里ztz_tzt是高斯函数生成的标签
- 计算predictor预测的原始ξt{\xi _t}ξt与标签之间的损失Ltpred,rawL_t^{pred,raw}Ltpred,raw
- 计算网络头对传播前的state向量分类的损失LtstateL_t^{state}Ltstate,使用二分类交叉熵损失计算
- 计算网络头对传播后的state向量分类的损失Ltstate,propL_t^{state,prop}Ltstate,prop,使用二分类交叉熵损失计算
总损失如下:
L=1Nseq−1∑t=1Nseq−1Ltpred+αLtpred,raw+β(Ltstate+Ltstate,prop)L = \frac{1}{{{N_{seq}} - 1}}\sum\limits_{t = 1}^{{N_{seq}} - 1} {L_t^{pred} + \alpha L_t^{pred,raw} + \beta (L_t^{state} + L_t^{state,prop})}L=Nseq−11t=1∑Nseq−1Ltpred+αLtpred,raw+β(Ltstate+Ltstate,prop)
4341

被折叠的 条评论
为什么被折叠?



