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

SiamMask

  • Abstract
  • 1.Introduction
  • 2.Related Work
    • 2.1 Visual Object Tracking
    • 2.2 Semi-supervised Video Object Segmentation
  • 3.Methodology
    • 3.1 SiamFC&&SiamRPN
    • 3.2 SiamMask
      • 3.2.1Loss Function
      • 3.2.2 Mask representation
      • 3.2.3 Two Variants
      • 3.2.4 Box generation
    • 3.3 Implementation details
      • 3.3.1 Network architecture
      • 3.3.2 Training
      • 3.3.3 Inference
  • 4 Experiments
  • 附录A

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_\phihϕ​和学习参数ϕ\phiϕ来预测w×hw\times hw×h的二元masks(每个RoW都有一个)。用mnm_nmn​示预测的mask,对应着第nnn个RoW。
mn=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都标注有一个二元标签 yn∈{±1}y_n\in \{\pm1\}yn​∈{±1},以及一个像素级的真值mask cnc_ncn​,大小是w×hw\times hw×h。让cnij∈{±1}c_n^{ij}\in\{\pm1\}cnij​∈{±1}表示第n个RoW物体mask里的像素点(i,j)的对应标签。损失函数LmaskL_{mask}Lmask​​是一个覆盖所有RoWs的二元logistic回归损失:
Lmask(θ,ϕ)=∑m(1+yn2wh∑ijlog(1+e−cnijmnij))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+yn​​ij∑​log(1+e−cnij​mnij​))

因此,hϕh_\phihϕ​的分类层有w×hw\times hw×h个分类器,每一个表示某像素点是否属于候选框内的物体。注意,LmaskL_{mask}Lmask​仅针对正的RoWs考虑(即yny_nyn​=1)

3.2.2 Mask representation

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

3.2.3 Two Variants

作者增加了一个分割分支和损失函数LmaskL_{mask}Lmask​,得到了两个SiamMask的two-branch和three-branch。它们的损失函数分别为L2B和L3BL_{2B}和L_{3B}L2B​和L3B​:
L2B=λ1⋅Lmask+λ2⋅LsimL3B=λ1⋅Lmask+λ2⋅Lscore+λ3⋅LboxL_{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​=λ1​⋅Lmask​+λ2​⋅Lsim​L3B​=λ1​⋅Lmask​+λ2​⋅Lscore​+λ3​⋅Lbox​

对于L3BL_{3B}L3B​,如果RoW的一个anchor box与真实边框的IOU大于等于0.6,那么它被认为正的(yny_nyn​=1),否则就是负的(yny_nyn​=-1)。这里作者将λ1\lambda_1λ1​设置为32,λ2=1,λ3=1\lambda_2=1 ,\lambda_3=1λ2​=1,λ3​=1。边框和置信度的输出分支都是由两个1×11\times 11×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_\thetafθ​ 上增加了一个非共享的调节层(1×1 1\times 11×1卷积,256个输出)。具体结构在附录A。

3.3.2 Training

样本图片为127×127127\times 127127×127,搜索图片为255×255255\times 255255×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×1515\times 1515×15在31×3131\times 3131×31的search图像上进行卷积。该卷积采用深度可分离卷积(可参考链接)深度卷积的padding=0,stride=1逐点卷积的padding=0,stride=1,然后得到17×17×25617\times 17\times 25617×17×256

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

其他分支卷积核的设置为了改变通道数,具体作用可参考siamFC,siamRPN。两个变种的卷积具体结构如下:
两分支:

三分支:

作者提到,直接这样预测mask的方式得到的精度并不太高,所以提出了如下图所示的Refine模块U来提升分割的精度:在原始的响应图上对每个RoW不采用升维到63x63的方式,而是直接对RoW进行deconv上采样得到mask。
Refine Module借鉴了SharpMask的思路:

【阅读笔记】SiamMask相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. C++单链表学习随想
  2. MySQL复合条件连接查询
  3. 在myeclipse中导入图片
  4. idea GsonFormat插件使用报错 StringIndexOutOfBoundsException: begin 0, end -1, length 9
  5. Android开发如何使用JNA
  6. 二维随机变量及其分布函数
  7. 【java笔记】线程间通信(1):等待唤醒机制
  8. Object-C 介绍
  9. 分享几款流程图软件,帮助你熟悉工作流程
  10. 如何平衡MMO游戏 ——Einsphoton
  11. 使用EXCEL进行计数
  12. 联想笔记本怎么找计算机放桌面,联想笔记本电脑便签在哪,笔记本电脑便签在哪里?...
  13. 编写lisp程序解一元二次方程_怎样用C语言编一个解一元二次方程的程序?
  14. 谷歌浏览器如何设置搜索结果的语言
  15. 关于在微软学生资源中心下载软件
  16. 实战:Traefik 高级配置2-2022.1.18
  17. 复选框 el-checkbox选不上
  18. “戏”说设计模式——单例模式
  19. 运行微信小程序出现的问题
  20. 如何从API中获取数据(一)

热门文章

  1. 读书笔记《底层逻辑2·理解商业世界的本质》
  2. Octave4.4.1-64位下载
  3. 华盛顿大学计算机专业硕士申请,华盛顿大学计算机科学与系统理学硕士研究生申请要求及申请材料要求清单...
  4. linux批量修改文件名字
  5. Linux基本命令-grep 命令
  6. unity学习———2D人物的移动
  7. SEO 已死,LLMO 万岁
  8. TreeSize Free
  9. android系统ime指令
  10. Boost程序库完全开发指南——深入C++“准”标准库(第3版)