从SiamFC开始,涌现了一大批基于孪生神经网络(Siamese Network)的跟踪算法,其中包括多目标跟踪和单目标跟踪。本文将以SiamFC为开山之作,介绍后续的部分基于Siamese Network的单目标跟踪算法。
以孪生神经网络为基础,是孪生神经网络进行单目标跟踪的开山之作。将目标的跟踪方式从在线执行随机梯度下降以适应网络的权重进行跟踪转变为前后帧目标对的形式进行匹配。通过同一网络AlexNet作为backbone,输出模板图像和待查询图像的特征图,并进行互卷积(相关滤波)操作,得到目标响应结果,反向映射到原图,计算当前帧目标位置。
细节可参考另一篇博客:SiamFC论文解读及代码实现
跟踪阶段:
针对这些问题,到目前为止,都有很多论文提出方法,进行解决,有的融合了当时时新的trick,有的对网络结构和存在的问题进行了深入探讨并改进。这些工作都很棒,接下来将会分板块进行介绍。
本文提出了一种新的训练策略,通过训练时在Siamese Network中加入triplet loss提取出目标跟踪的深度表达特征。图中 φ \varphi φ表示特征提取网络,当 φ = φ ′ \varphi=\varphi^{'} φ=φ′时,遵循SiamFC范式,当 φ ≠ φ ′ \varphi\neq\varphi^{'} φ=φ′时,遵循CFNet范式。
基于SiamFC框架,在训练过程中修改loss,从SiamFC中的Logistical loss增加到Logistical loss和Triplet loss的和。模型没有大改动,仅在训练时多加了一个triplet loss。
跟踪阶段由于目标会不断变化,网络直接在跟踪阶段自设置不同变换的待跟踪图像。SiamFC在跟踪阶段使用图像金字塔,但仅仅是crop不同大小的图像区域。Siam-BM则在跟踪阶段,不仅是图像金字塔,同时对每层图片加入了旋转操作。让网络在跟踪时更鲁棒。
最初的SiamFC只是将每一帧与对象的初始外观进行比较。相比之下,我们在每一帧中计算一个新的模板,然后与之前帧的模板进行融合。
每一帧计算时,SiamFC公式如下:
f ( z , x ) = γ φ ( z ) ∗ φ ( x ) + b 1 {f(z,x)=\gamma\varphi(z)*{\varphi(x)}+b\mathbb{1}} f(z,x)=γφ(z)∗φ(x)+b1
那么CFNet公式如下:
f ( z , x ) = γ w ( φ ( z ) ) ∗ φ ( x ) + b 1 {f(z,x)=\gamma{w(\varphi(z))*{\varphi(x)}+b\mathbb{1}}} f(z,x)=γw(φ(z))∗φ(x)+b1
CFNet的模板图像输入也是 255 ∗ 255 ∗ 3 255*255*3 255∗255∗3,这样的话, φ ( z ) \varphi(z) φ(z)和 φ ( x ) \varphi(x) φ(x)的输出特征图都是一样大小,为 49 ∗ 49 ∗ 32 49*49*32 49∗49∗32。之后利用相关滤波模块(Correlation Filter)CF Block w = w ( x ) w=w(x) w=w(x)提取在每一帧中的模板。输出 17 ∗ 17 ∗ 32 17*17*32 17∗17∗32的模板特征。与待查询图像互卷积。
CFNet和SiamFC一样,有必要引入标量参数 γ \gamma γ和 b b b,使分数范围适合逻辑回归。
注:相关滤波看不太懂,还得再学习
以SiamFC为基础,在backbone提取模板图像和待跟踪图像的特征后,模板特征后加入了残差注意力(Residual Attention)、通道注意力(Channel Attention)和通用注意力(General Attention),同时将互卷积更改为加权互相关层(WXCorr)。
当一张模板和一张待搜索图像流入网络时,通过backbone生成特征图。基于模板特征,使用三种注意力机制提取了模板信息。模板、待搜索特征、作为权重的attention输出,被输入到WXCorr,并最终转换为响应图。
WXCorr公式:
f ( z , x ) = ( γ ⊙ ϕ ( z ) ) ∗ ϕ ( x ) + b 1 f(z,x)=(\gamma\odot\phi(z))*\phi(x)+b\mathbb{1} f(z,x)=(γ⊙ϕ(z))∗ϕ(x)+b1
相比于SiamFC中的XCorr公式:
f ( z , x ) = ϕ ( z ) ∗ ϕ ( x ) + b 1 f(z,x)=\phi(z)*\phi(x)+b\mathbb{1} f(z,x)=ϕ(z)∗ϕ(x)+b1
只增加了 γ ⊙ \gamma\odot γ⊙, γ \gamma γ表示注意力机制得到的权重。 ⊙ \odot ⊙表示对模板特征做了权重的点乘,对应模板特征上每一个点都有一个权重,再进行互卷积操作。
观察到在图像分类任务中学习到的语义特征和在相似性匹配任务中学习到的外观特征相辅相成,我们构建了一个双分支网络。SASiam由Semantic branch语义分支和Appearance branch外观分支两部分构成,语义分支中还加入了通道注意力机制SEBlock。分别训练这两个网络,将特征图加权输出。
外观特征网络:加入了SEBlock的SiamFC
语义特征网络:Alexnet在ImageNet上训练的权重,并不再跟踪数据集上fine-tune,直接拿过来用。
外观特征更像对于同一个目标外观的相似程度,而语义特征更像是对于同一类目标的相似程度,两者相辅相成。
SASiam的堆料版本。。这里放一张SASiam的网络结构图做对比。
MBST中有两个分支,其中一条是AlexNet分支,另外一条有很多结构一模一样的Context Dependent分支,通过一个分支选择结构,选择输出结果更好的一个Context Dependent。
AlexNet Branch对应了A-Net(appearance net)
单个Context Dependent对应了S-Net(Semantic net),但没有注意力机制,只是普通的SiamFC。
同SASiam一样,AlexNet Branch从ImageNet上训练后直接在网络中使用。
基于SiamFC,不再采用AlexNet作为Backbone,而是设计的新的网络结构,网络中有Dense Block,Block结构如下。并在网络提取到target image,加入自注意力机制,强化模板特征。
基于SiamFC范式,修改网络backbone的后几层,对其进行一定的处理。文中提到,处理的方法就是,局部模式检测和上下文建模两种方式。
局部模式检测:
对每个特征图切片后,对每个特征图单独操作,即对每个局部(特征图切片)检测( 11 ∗ 11 11*11 11∗11卷积->BN层->ReLU层-> 3 ∗ 3 3*3 3∗3最大池化-> 5 ∗ 5 5*5 5∗5卷积->BN层->ReLU层-> 3 ∗ 3 3*3 3∗3最大池化)其模式(Sigmoid输出结果)。原文中这里的特征图切片有256个,对每一片特征图都有单独的一个检测。。。。。
上下文建模:
我们将条件随机场(CRF)近似引入到我们的网络中。使用一个图Graph来描述目标的局部模式检测问题,并通过CRF对前一阶段生成的局部模式之间的联合概率关系进行建模
本文致力于在不减小精度的情况下,提高网络速度
EAST全名:early stop。从名字中可以看出,网络在浅层的时候若发现比较容易跟踪,则直接输出结果,而不再前向传播。即使用廉价的特征(DCF、HOG)处理简单的帧,使用昂贵的深层特征(SiamNet)处理具有挑战性的帧。在网络浅层加入HOG和DCF方法,在网络每一层都利用Q learning加入8个actions,利用强化学习学习并输出bbox的8种不同结果,如图所示。
如何1)有效地学习目标外观的时间变化,2)在保持实时响应的同时排除杂波背景的干扰,是视觉目标跟踪的一个基本问题。本文围绕这个问题提出了目标外观变换层和背景抑制层,名字为动态孪生神经网络(Dynamic Siamese Network, DSiam),即对template image使用目标外观变换层,让其更趋进于当前帧的目标外观,对current image使用背景抑制层,抑制背景带来的跟踪干扰。
目标外观变换层和背景抑制层都是使用的相关滤波方法。
加入了相关滤波方法的目标外观变换层和背景抑制层
模板更新,不再一直使用第一帧模板的特征,有相关滤波的更新过程
网络自适应地集成了多层深层特征融合
Siamese方法通过从当前帧中提取一个外观模板来解决视觉跟踪问题,该模板用于在下一帧中定位目标。通常,此模板与前一帧中累积的模板线性组合(最初的SiamFC有且仅使用第一帧目标外观作为模板),导致信息随时间呈指数衰减。虽然这种更新方法已经带来了更好的结果,但它的简单性限制了通过学习更新可能获得的潜在收益。因此,我们建议用一种学习更新的方法来取代线性加权。我们使用卷积神经网络,称为UpdateNet,它给出初始模板、累积预测模板和当前帧的模板,目的是估计下一帧的最佳模板。
不更新模板:
T i ~ = T 0 G T \widetilde{T_i}=T^{GT}_0 Ti =T0GT
线性加权更新模板:
T i ~ = ( 1 − γ ) T ~ i − 1 + γ T i \widetilde{T_i}=(1-\gamma)\widetilde{T}_{i-1}+\gamma{T_i} Ti =(1−γ)T i−1+γTi
UpdateNet更新模板:
T i ~ = ϕ ( T 0 G T , T ~ i − 1 , T i ) \widetilde{T_i}=\phi{(T^{GT}_0,\widetilde{T}_{i-1},T_i)} Ti =ϕ(T0GT,T i−1,Ti)
(左)对象模板的在线更新由UpdateNet执行,UpdateNet接收groundtruth、上次累积模板和当前预测模板作为输入,并输出更新后的累积模板。(右)在下一帧中使用groundtruth模板训练UpdateNet。
方法都在图里!仍然是SiamFC范式,在响应图后加入全连接层,直接预测目标位置。FC层的作用是将目标对象中的特征与当前帧中的特征进行比较,以找到目标对象移动的位置。
公式如下:
c x ′ = c x ′ + △ x c^{'}_x=c_x'+\triangle{x} cx′=cx′+△x
c y ′ = c y ′ + △ y c^{'}_y=c_y'+\triangle{y} cy′=cy′+△y
w ′ = γ w × w w^{'}=\gamma_w\times{w} w′=γw×w
h ′ = γ h × h h^{'}=\gamma_h\times{h} h′=γh×h
网络预测 [ △ x , △ y , γ w , γ h ] [\triangle{x},\triangle{y},\gamma_w,\gamma_h] [△x,△y,γw,γh],在SiamFC手动预测 [ △ x , △ y ] [\triangle{x},\triangle{y}] [△x,△y]的基础上,GOTURN网络直接输出偏移量和变换比例,简洁又舒服!!
图中为SiamRPN的框架:左侧是孪生网络(Siamese Network)提取特征。中间是RPN网络(Region Proposal Network),RPN网络有两个分支,一个分支用于回归,另一个分支用于分类。两个分支输出两个互相关的响应图,再通过卷积层分别输出 [ 17 , 17 , 2 k ] [17,17,2k] [17,17,2k]的类别分数, [ 17 , 17 , 4 k ] [17,17,4k] [17,17,4k]的anchor偏移量。
k k k表示anchor的数量
2 k 2k 2k表示每个anchor在分类上有2个输出,即是目标(positive)和非目标(negtive)的分数
4 k 4k 4k表示每个anchor在偏移量上有4个输出,即每个anchor对应真实目标位置d的 [ d x , d y , d w , d h ] [dx,dy,dw,dh] [dx,dy,dw,dh]
[ 17 , 17 ] [17,17] [17,17]表示特征图的大小,也即有 17 ∗ 17 17*17 17∗17个anchor,特征图上每一个点都对应一个anchor
SiamRPN在存在类似干扰物和大的变化(形变、光照等原因)时,效果不佳,为了应对此问题,文章提出了Siamese Cascaded RPN(C-RPN),即在SiamRPN基础上,多层特征图上都进行了RPN操作,并一级接一级连在一块,称为级联。
文章提到,当网络过深时,反而会影响跟踪性能。发现潜在的原因主要是由于孪生网络跟踪的内在限制,因此,在引入所提出的孪生跟踪网络模型之前,我们首先对孪生跟踪网络进行了更深入的分析。原因如下:
深层网络中的padding操作会破坏严格的平移不变性,RPN需要不对称的特征来进行分类和回归——提出了空间感知采样策略,即不再以图像中心为groundtruth进行训练,而是在中心周围进行均匀分布的偏移。文中取便宜量 [ 0 , 16 , 32 ] [0, 16, 32] [0,16,32]来进行验证,证明此方法有效地缓解了padding方法对严格平移不变性的破坏
普通的互卷积例如SiamFC中search image的 [ 128 , 22 , 22 ] [128,22,22] [128,22,22]与exemplar image的 [ 128 , 6 , 6 ] [128,6,6] [128,6,6]的互卷积操作,每个 [ 1 , 6 , 6 ] [1,6,6] [1,6,6]卷积核都要和128个特征切片进行卷积,这样的卷积操作会进行128*128次。因此文中提出采用Depth-wise的卷积方法,即逐通道卷积,这样的话就只需要进行128次卷积,即一个exempalr特征切片对应一个search特征切片。复杂度大大降低。
额。。。。分割的论文没咋看,还不了解分割的具体过程
作者提出,高质量的训练数据对于视觉跟踪中端到端表征学习的成功至关重要,主要解决了正负样本不均衡和样本丰富性的问题。有以下三点:
深度学习包含数据和模型两部分,该论文从数据出发,发现数据中的缺漏,并查漏补缺。
和SiamRPN++有共同之处,即思考了网络无法加深的具体原因,得出结论:
和SiamRPN++的数据增强方式不同,网络提出了一种网络中的块结构,修改了ResNet中的Residual块和GoogleNet中的Inception块。具体方法是怎么填充的怎么删,网络中填充了1padding,那么在块结构输出中,将特征图的大小crop出1padding操作的大小。
The cropping operation removes features whose calculation is affected by the zero-padding signals
裁剪操作将删除其计算受零填充信号影响的特征