参考代码:video_analyst
导读:这篇文章指出之前的一些跟踪算法没有深入讨论针对跟踪任务的实质,很多时候只是在某些点上进行突破,因而最后方法的性能总是有局限性的。对此文章深入分析了跟踪网络的特性,因而对跟踪网络的设计提出了4点建议:G1(目标位置估计和目标判别需要接耦,分别具有各自的分支)/G2(目标判别置信度不能与实际相模糊)/G3(不能依赖数据分布等先验知识,否则导致泛化性鲁棒性不强)/G4(目标位置的估计应该准确)。正是基于上的4点设计指导,文章设计了SiamFC++网络,在5个VOT数据集(OTB2015/VOT2018/LaSOT/GOT-10k)上表现为state-of-art,并且在TrackingNet大型数据集上达到75.4的AUC,在2080Ti GPU上帧率为90FPS。
对于之前的一些跟踪算法文章进行分析,大致上可以将其划分为3个大类:
就目前较好的跟踪网络SiamRPN文章将其与SiamFC++进行对比,见下图所示:
可以看到SiamRPN中目标的判别分数和实际的anchor是并不匹配的这就导致了其性能的缺陷。通过探究跟踪网络的性质,文章对于跟踪网络的设计给出了下面的几点指引:
对此文章在章节“Comparison with Trackers that Do not Apply Our Guidelines”对其进行了讨论。其具体表现在SiamRPN++中主要由三点与文章提出的跟踪网络设计思路不相匹配:
文章的网络pipeline已经在图2中给出了,可以很明显的看到其将目标判别分支和目标位置估计分支做了隔离,则其特征抽取和匹配的过程可以描述为下式:
f i ( z , x ) = ψ i ( ϕ ( z ) ) ∗ ψ i ( ϕ ( x ) ) f_i(z,x)=\psi_i(\phi(z))*\psi_i(\phi(x)) fi(z,x)=ψi(ϕ(z))∗ψi(ϕ(x))
其中, ∗ * ∗代表cross-correlation操作, ϕ ( ⋅ ) \phi(\cdot) ϕ(⋅)代表的siamese backbone输出的特征, ψ i ( ⋅ ) \psi_i(\cdot) ψi(⋅)代表对应的具体的任务分支,实现从普通的特征到特定任务空间特征的转变, i ∈ { c l s , r e g } i\in\{cls,reg\} i∈{cls,reg}代表目标判别任务和目标位置估计任务。
在图2中可以清楚看到文章已经将目标判别和目标位置估计使用不同的预测头进行区分。
目标判别分支:
对于判别分支输出特征图上的一点 ( x , y ) (x,y) (x,y),其在原图的位置经过映射为 ( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) (\lfloor\frac{s}{2}\rfloor+xs,\lfloor\frac{s}{2}\rfloor+ys) (⌊2s⌋+xs,⌊2s⌋+ys),要是这个点落在了GT框的内部,那么就算做是正样本,反之就是负样本了,其中 s = 8 s=8 s=8是网络的stride。
目标位置估计:
对于位置预测特征图上的一点 ( x , y ) (x,y) (x,y),其在原图上对应的点为 ( ⌊ s 2 ⌋ + x s , ⌊ s 2 ⌋ + y s ) (\lfloor\frac{s}{2}\rfloor+xs,\lfloor\frac{s}{2}\rfloor+ys) (⌊2s⌋+xs,⌊2s⌋+ys),而对应的该点出的位置GT预测值描述为 t ∗ = ( l ∗ , t ∗ , r ∗ , b ∗ ) t^{*}=(l^{*},t^{*},r^{*},b^{*}) t∗=(l∗,t∗,r∗,b∗), ( x 0 , y 0 ) (x_0,y_0) (x0,y0)和 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)代表GT的左上角和右下角点的坐标,则对应各个GT分量的计算过程描述为:
l ∗ = ( ⌊ s 2 ⌋ + x s ) − x 0 , t ∗ = ( ⌊ s 2 ⌋ + y s ) − y 0 l^{*}=(\lfloor\frac{s}{2}\rfloor+xs)-x_0,\ t^{*}=(\lfloor\frac{s}{2}\rfloor+ys)-y_0 l∗=(⌊2s⌋+xs)−x0, t∗=(⌊2s⌋+ys)−y0
r ∗ = x 1 − ( ⌊ s 2 ⌋ + x s ) , b ∗ = y 1 − ( ⌊ s 2 ⌋ + y s ) r^{*}=x_1-(\lfloor\frac{s}{2}\rfloor+xs),\ b^{*}=y_1-(\lfloor\frac{s}{2}\rfloor+ys) r∗=x1−(⌊2s⌋+xs), b∗=y1−(⌊2s⌋+ys)
对于G2文章的方法是采用密集预测的方式也就是整个特征图(每个坐标位置预测一个sample)参与,因而每个位置上是能够代表与目标位置的对应关系的,满足G2。而且正式这种不借用任何外部参数进行的预测(直接进行回归)避免了外部先验参数的引入,从而满足G3。
这里需要对目标位置估计的质量进行评估,不过这里不同于ATOM的方法(其采用IoU-Net的方法预测IoU值),这里是通过预测PSS值得到的(通过与目标判别分支的预测结果相乘使得那些背景区域的置信度更低,从而容易将其排除),这是通过在目标判别分支旁边平行加一个预测分支,其结构可以参考图2中的对应部分。其对应的标注生成过程可以描述为:
P S S ∗ = m i n ( l ∗ , r ∗ ) m a x ( l ∗ , r ∗ ) ∗ m i n ( t ∗ , b ∗ ) m a x ( t ∗ , b ∗ ) PSS^{*}=\sqrt{\frac{min(l^{*},r^{*})}{max(l^{*},r^{*})}*\frac{min(t^{*},b^{*})}{max(t^{*},b^{*})}} PSS∗=max(l∗,r∗)min(l∗,r∗)∗max(t∗,b∗)min(t∗,b∗)
文章采用的损失函数为:
L ( { p x , y } , q x , y , { t x , y } ) = 1 N p o s ∑ x , y L c l s ( p x , y , c x , y ∗ ) + λ N p o s 1 { c x , y ∗ > 0 } ∑ x , y L q u a l i t y ( q x , y , q x , y ∗ ) + λ N p o s 1 { c x , y ∗ > 0 } ∑ x , y L r e g ( t x , y , t x , y ∗ ) L(\{p_{x,y}\},q_{x,y},\{t_{x,y}\})=\frac{1}{N_{pos}}\sum_{x,y}L_{cls}(p_{x,y},c_{x,y}^{*})+\frac{\lambda}{N_{pos}}\mathcal{1}_{\{c_{x,y}^{*}\gt 0\}}\sum_{x,y}L_{quality}(q_{x,y},q_{x,y}^{*})+\frac{\lambda}{N_{pos}}\mathcal{1}_{\{c_{x,y}^{*}\gt 0\}}\sum_{x,y}L_{reg}(t_{x,y},t_{x,y}^{*}) L({px,y},qx,y,{tx,y})=Npos1x,y∑Lcls(px,y,cx,y∗)+Nposλ1{cx,y∗>0}x,y∑Lquality(qx,y,qx,y∗)+Nposλ1{cx,y∗>0}x,y∑Lreg(tx,y,tx,y∗)
其中, 1 { ⋅ } \mathcal{1}_{\{\cdot\}} 1{⋅}代表的是该点是否为正样本,也就是是不是在GT框内部, L c l s L_{cls} Lcls表示为focal loss, L q u a l i t y L_{quality} Lquality表示为BCE loss, L r e g L_{reg} Lreg表示为IoU loss。
在测试的过程中参考了SiamRPN类的infer优化方法,使得预测的结果更加鲁棒,可以参考文章附录章节“B Test Phase Behavior”