参考代码:SiamMask
1. 概述
导读:这篇文章在基于孪生网络的目标跟踪算法离线训练的过程中嵌入一个mask分割分支,从而可到一个既可以做VOT也可以做VOS(分割性能这块可以还有很大空间)的网络结构SiamMask(含3和2输出的两个变种)。训练完成之后只需要给定初始的边界框初始化就可以产生跟踪目标的分割mask与对应的旋转外接矩(或者更加符合跟踪目标的边界框表达),此外由于不需要finetune且网络简单因而额速度很快能达到55FPS,但是分割性能就差一些。这篇文章将跟踪与分割组合点子还是不错的,使人想到了mask rcnn。
下面是使用文章的方法进行跟踪与目标分割的结果展示:
这篇文章的基础是基于孪生网络(不同数据输入,网络权值共享)的跟踪算法,文章很大的灵感是来自于SiamFC与SiamRPN的,下面也将会这两个网络进行介绍。
SiamFC
在孪生网络对于当前帧与参考目标运算之后会得到两个特征图( x , z x,z x,z),之后使用参考目标的特征图当作滑动窗口(文中对应位response of a candidate window,RoW)在当前帧的特征图上进行滑动,计算不同位置处的cross-correlated:
g θ n = f θ ( z ) ⋅ f θ n ( θ ) g_{\theta}^n=f_{\theta}(z)\cdot f_{\theta}^n(\theta) gθn=fθ(z)⋅fθn(θ)
其中, n n n就是对应的滑动窗口位置索引。之后SiamFC就在这些位置上去寻找最大响应的地方,之后通过卷积的映射关系还原出目标在当前帧的位置,使用的损失函数是Logistic Loss(记为 L s i m L_{sim} Lsim)。文章对相关性分析这块进行了改进,使用了 n ∗ c n*c n∗c维度上的分组卷积进行实现。
SiamRPN
这个方法是在SiamFC的基础上进行改进的,改进之处就是给网络添加了RPN的网络结构,每个RoW编码 k k k个anchor box,输出是每个框的置信度与偏移量回归,使用的损失函数是交叉熵损失函数与Smooth L1损失函数,记作 L s c o r e , L b o x L_{score},L_{box}