【阅读笔记】SiamMask

论文:https://arxiv.org/abs/1812.05050
Github:https://github.com/foolwood/SiamMask
项目网站:http://www.robots.ox.ac.uk/~qwang/SiamMask/

Abstract

作者提出的模型,可以同时实现视频目标跟踪和视频目标分割这两个任务,并能达到实时的效果。作者称这个模型为SiamMsk。该模型通过在用于目标跟踪的全卷积Siamese神经网络上增加mask分支来实现目标的分割,同时增强网络的loss,优化网络。一旦网络训练好之后,SiamMask仅依赖于初始的一个bounding box就可以实现类别无关的目标实时跟踪及分割(at 35 frames per second)。这个模型简单,功能多样,速度快,其效果也超越了其他跟踪方法。同时,还在DAVIS-2016, DAVIS-2017视频分割数据集上取得了具有竞争力的表现和最快的速度。

1.Introduction

目标跟踪有很多应用,比如自动监控、车辆导航、视频标注等。以往的目标跟踪方法通常只能预测出一个跟踪物体的矩形框,也有一些做视频目标分割的方法可以对目标进行分割,但是这些方法在使用时都需要给出第一帧的分割mask。而文章提出的模型,在infernce阶段,只需要在开始时框出目标物体,就可以对目标进行自动的跟踪以及分割。效果如下图:
在这里插入图片描述
与传统的对象跟踪器一样,作者提出的跟踪器依赖于初始化的bounding box(蓝色)。与ECO (红色)等最先进的跟踪器不同,SiamMask(绿色)能够生成二进制分割掩码,可以更准确地描述目标对象。
作者结合了SiamMask网络,同时在三个任务中进行训练,每个任务对应于不同的策略,以便在新的一帧中建立目标对象与候选区域之间的对应关系。作者提出的架构,每个任务由不同的分支表示,最终的损失是三者加在一起。下面讲介绍一下关于Siamese网络一些相关的工作。

2.Related Work

2.1 Visual Object Tracking

直到最近,最主流的用于物体跟踪的方法仍然是在线训练一个分类器,基于视频第一帧的信息,然后在线更新它。这个策略通常被称作"tracking-by-detection"。在过去几年,相关滤波器(Correlation Filter)成为解决 tracking-by-detection 的一个快速而有效的策略。

最近,有人提出了一个完全不同的方法。它不在线学习一个判别分类器,而是线下训练相似度函数。全卷积Siamese方法的改进版通过region proposals, hard negative mining, ensembling, 和 memory networks,极大地提升了跟踪性能。

绝大多数的跟踪器都使用一个bounding box来初始化目标物体,然后在接下来的画面上预测位置。尽管很方便,但是一个简单的矩形框通常无法很好地表现一个物体。这促使我们提出一个能够生成二元分割mask的跟踪器,同时也只需要初始化一个物体边框。

2.2 Semi-supervised Video Object Segmentation

没有研究分割领域,跳过。

3.Methodology

为了实现在线可操作性和快速性,我们采用了完全卷积的Siamese框架。首先先介绍一下先前流行的SiamFC,SiamRPN这两个方法。

3.1 SiamFC&&SiamRPN

SiamFC这篇文章算是将深度学习应用于目标跟踪的开山之作(开篇之作应该是SINT),也是第一个将siamese network用于目标跟踪的,网络的结构很简单,如下图:
在这里插入图片描述
这里的z就是初始帧的bounding box目标图像,这里的x就是后面的每一帧图像。φ就是siamese network,用于提取图像特征。由于z比x的尺寸小,所以生成的特征图F1肯定也是小于x生成的特征图F2。然后将F1在F2上进行滑动,利用一种相似性度量函数将两个矩阵合并成一个得分矩阵。最后,在得分矩阵里面取最大值,也就是置信度最大的点,在图像x上所对应区域即为该帧图像的预测区域。
SiamFC的方法很简单,但其缺点也是很明显的,就是预测的区域的比例是固定的,而且位置很粗糙(如上图,1717的得分矩阵对应的只有1717个原图的位置)。因此,SiamRPN在SiamFC的基础上进行改进,解决了这个缺陷。

SiamRPN在SiamFC的基础上增加了一个bounding box的预测分支。结构如下:
在这里插入图片描述
和SiamFC一样,SiamRPN也是先将模板(上)和待搜索区域(下)送入孪生网络得到特征。不同的是,SiamRPN在得到两者的特征之后,并不是直接将两者融合生成得分矩阵。而是对两者(经过上图橙色的卷积,这里不是孪生的)分别生成了分类分支和回归分支的特征,然后再两两组合,经过相关性的操作(星号处)得到后面的分类响应和回归响应。

图中的k指的是anchor数量,也就是每一个位置对应的不同尺寸的anchor的数量。在预测时,在score分支中排序筛选出k个proposal,然后再通过余弦窗和尺度惩罚来对其进行排序,根据回归分支得到各个proposal的边界框,最后使用NMS(非极大值抑制)得到最终结果。

SiamRPN通过增加了回归分支,可以让网络学习物体所在的具体位置进行回归,即可得到更加精准的预测,而且尺寸也可以通过预测得到,而不像siamFC中只能是固定比例。

总的来说,将全卷积的siamese network用于目标跟踪,生成得分矩阵,即得到了siamFC;在siamFC的基础上加上box分支,用于预测box的具体位置和长宽,即得到了siamRPN。那么再接下来,作者在siamRPN的基础上增加mask分支,就得到了本文要讲的siamMask。

3.2 SiamMask

作者通过一个简单的两层神经网络 h ϕ h_\phi hϕ和学习参数 ϕ \phi ϕ来预测 w × h w\times h w×h的二元masks(每个RoW都有一个)。用 m n m_n mn示预测的mask,对应着第 n n n个RoW。
m n = h ϕ ( g θ n ( z , x ) ) m_n=h_\phi(g^n_\theta(z,x)) mn=hϕ(gθn(z,x))
在这里插入图片描述这里的*d是depth-wise的cross correlation操作,也就是说是深度可分离卷积(具体看附录A),所以得到的响应保持了通道数不变(这里是256)。文章把中间的这个响应称为RoW(response of candidate window),而后在这个RoW的基础上分出了三个分支,分别进行分割,回归和分类。
在这里插入图片描述这个是作者提出的SiamMask的一个变种,也就是把box分支去掉了。因为根据预测的mask,也可以直接生成对应的bounding box

3.2.1Loss Function

在训练过程中,每一个RoW都标注有一个二元标签 y n ∈ { ± 1 } y_n\in \{\pm1\} yn{±1},以及一个像素级的真值mask c n c_n cn,大小是 w × h w\times h w×h。让 c n i j ∈ { ± 1 } c_n^{ij}\in\{\pm1\} cnij{±1}表示第n个RoW物体mask里的像素点(i,j)的对应标签。损失函数 L m a s k L_{mask} Lmask​是一个覆盖所有RoWs的二元logistic回归损失:
L m a s k ( θ , ϕ ) = ∑ m ( 1 + y n 2 w h ∑ i j l o g ( 1 + e − c n i j m n i j ) ) L_{mask}(\theta,\phi)=\sum ^{}_{m}(\frac{1+y_n}{2wh} \sum^{}_{ij}log(1+e^{-c_n^{ij}m_n^{ij}})) Lmask(θ,ϕ)=m(2wh1+ynijlog(1+ecnijmnij))

因此, h ϕ h_\phi hϕ的分类层有 w × h w\times h w×h个分类器,每一个表示某像素点是否属于候选框内的物体。注意, L m a s k L_{mask} Lmask仅针对正的RoWs考虑(即 y n y_n yn=1)

3.2.2 Mask representation

分割任务中的 h θ h_\theta hθ网络有两个 1 × 1 1\times1 1×1的卷积层组成,一个有256通道,另一个有 6 3 2 63^2 632个通道。这允许每一个像素分类利用整个RoW内的信息,因此对 x x x内的候选窗口有着更全面的了解,这可以消除那些与目标物体类似的对象所造成的影响。为了产生更加准确的物体masks,我们将低分辨率和高分辨率的特征融合起来,通过多个由上采样层和 skip connections构成的 refinement 模块实现。详细内容在附录A。

3.2.3 Two Variants

作者增加了一个分割分支和损失函数 L m a s k L_{mask} Lmask,得到了两个SiamMask的two-branch和three-branch。它们的损失函数分别为 L 2 B 和 L 3 B L_{2B}和L_{3B} L2BL3B
L 2 B = λ 1 ⋅ L m a s k + λ 2 ⋅ L s i m L 3 B = λ 1 ⋅ L m a s k + λ 2 ⋅ L s c o r e + λ 3 ⋅ L b o x L_{2B}=\lambda_1\cdot L_{mask}+\lambda_2 \cdot L_{sim} \\ L_{3B}=\lambda_1 \cdot L_{mask}+\lambda_2 \cdot L_{score}+\lambda _3 \cdot L_{box} L2B=λ1Lmask+λ2LsimL3B=λ1Lmask+λ2Lscore+λ3Lbox

对于 L 3 B L_{3B} L3B,如果RoW的一个anchor box与真实边框的IOU大于等于0.6,那么它被认为正的( y n y_n yn=1),否则就是负的( y n y_n yn=-1)。这里作者将 λ 1 \lambda_1 λ1设置为32, λ 2 = 1 , λ 3 = 1 \lambda_2=1 ,\lambda_3=1 λ2=1,λ3=1。边框和置信度的输出分支都是由两个 1 × 1 1\times 1 1×1的卷积层组成。至于score分支和box分支,文章分别采用了SiamFC和SiamRPN的计算方式

3.2.4 Box generation

在VOS(视频目标分割)任务中,需要生成物体的mask;而在VOT(视频目标跟踪中),最终需要的是框出目标的bounding box。对于bounding box的生成,文章给出了多种方案。
在这里插入图片描述

  • 利用mask生成
    (1)axis-aligned bounding rectangle (Min-max):根据mask的最小最大x、y坐标值生成坐标轴对齐的bounding box,易知,这种方法生成的框是正的,如上图中的红框。
    (2)rotated minimum bounding rectangle (MBR):根据mask计算最小外接矩形作为bounding box,这种方式生成的框可以是歪的,如上图中的绿框。
    (3)Opt:最优的方法。这个最优的策略是在VOT-2016的挑战中被提出来的,生成的框也可以是歪的,如上图中的蓝框。
  • 利用box分支预测(这种方法在二分支的变种中用不了)
    后面有实验证明这几种生成方式的优劣

3.3 Implementation details

3.3.1 Network architecture

作者使用了Res-50一直到第四阶段最后的卷积层。为了在较深的层获得较高的空间分辨率,我们通过步长为1的卷积降低输出步长至8。而且,我们通过膨胀卷积增加了感受野。在我们的模型中,我们在共用的主干网络 f θ f_\theta fθ 上增加了一个非共享的调节层(1×1 1\times 11×1卷积,256个输出)。具体结构在附录A。

3.3.2 Training

样本图片为 127 × 127 127\times 127 127×127,搜索图片为 255 × 255 255\times 255 255×255。网络主干在ImageNet-1k上预训练。使用SGD和一个warmup阶段,也就是前五个epochs上学习率从0.001增加到0.005,然后在后面的15个epochs上,降低至0.0005。

3.3.3 Inference

网络推断的过程大致如下:
(1)在第一帧,用矩形框框出想要跟踪的物体,作为网络的模板z,即网络上半部分的输入。
(2)输入视频中的一帧作为待搜索图像x,即网络下半部分的输入。
(3)网络接收两个输入,得到三个分支的预测。
(4)根据score分支得到预测的目标区域,然后找到对应位置的mask作为输出。
(5)若网络为二分支,则根据Min-max的方法生成一个box,然后用这个box去框出下一帧的对应区域作为下一次的待搜索图像x,再这之前,会先将这个box往外padding一定大小到x的输入尺寸。若是三分支的网络,文中说用box分支去生成这个待搜索区域效果更好。
(6)回到第(3)步进行下一帧的推断。

可以看到,网络只需要给出第一帧,后面就可以自动对目标进行分割和定位。容易产生疑问的是第(5)步中,根据这一帧的预测位置去确定下一帧的搜索区域。

首先,为什么不直接用下一帧的整张图像呢?如果直接用整张图像的话,当图片中有多个相同或者类似物体的时候就会让网络产生误判,比如上图中要跟踪一名球员,如果用整张图片作为输入,就可能会跟错人了。
其次,假如物体突然跳到另一个区域的话那不就找不到了吗?如果这样的话确实是会找不到,但是由于视频一般都是连续的,就算物体运动的比较快,也不怎么会出现这种情况,所以这种方法还是比较work的。

另外,还有两点值得一提。
(1)首先,整个训练和推断过程是类别无关的,也就是理论上无论你框的是一个什么物体,就算是训练的时候没见过的物体,网络也是能够进行跟踪的,但可以想象,效果肯定会差一些。
(2)训练过程是离线进行的,一旦训练完成,在inference的时候,网络就是固定不动的了,也正因此,网络推断速度比较快,能够达到实时的效果。相比之下,过去的很多方法,在推断的时候,在每一帧还需要对网络进行微调,比如修改bn层等,导致推断速度很慢。

4 Experiments

实验部分参考论文

附录A

主网络部分:
在这里插入图片描述前面的卷积不多说,主要看下adjust和xcorr。
1x1卷积来调整通道,这里不共享参数。xcorr是 15 × 15 15\times 15 15×15 31 × 31 31\times 31 31×31的search图像上进行卷积。该卷积采用深度可分离卷积(可参考链接)深度卷积的padding=0,stride=1逐点卷积的padding=0,stride=1,然后得到 17 × 17 × 256 17\times 17\times 256 17×17×256

分支部分:
其中两个变种头部网络的mask分支结构都一样,至于为什么是63x63,作者提到:
设置成63x63x1主要是为了节约计算资源。预测127*127需要1w多的channel。太大了。上采样到127是为了和exemplar一样

其他分支卷积核的设置为了改变通道数,具体作用可参考siamFC,siamRPN。两个变种的卷积具体结构如下:
两分支:
在这里插入图片描述
三分支:
在这里插入图片描述
作者提到,直接这样预测mask的方式得到的精度并不太高,所以提出了如下图所示的Refine模块U来提升分割的精度:在原始的响应图上对每个RoW不采用升维到63x63的方式,而是直接对RoW进行deconv上采样得到mask。
在这里插入图片描述Refine Module借鉴了SharpMask的思路:
在这里插入图片描述

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值