参考代码:SiamMask

1. 概述

导读:这篇文章在基于孪生网络的目标跟踪算法离线训练的过程中嵌入一个mask分割分支,从而可到一个既可以做VOT也可以做VOS(分割性能这块可以还有很大空间)的网络结构SiamMask(含3和2输出的两个变种)。训练完成之后只需要给定初始的边界框初始化就可以产生跟踪目标的分割mask与对应的旋转外接矩(或者更加符合跟踪目标的边界框表达),此外由于不需要finetune且网络简单因而额速度很快能达到55FPS,但是分割性能就差一些。这篇文章将跟踪与分割组合点子还是不错的,使人想到了mask rcnn。

下面是使用文章的方法进行跟踪与目标分割的结果展示:

这篇文章的基础是基于孪生网络(不同数据输入,网络权值共享)的跟踪算法,文章很大的灵感是来自于SiamFC与SiamRPN的,下面也将会这两个网络进行介绍。

SiamFC
在孪生网络对于当前帧与参考目标运算之后会得到两个特征图(x,zx,zx,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​(θ)
其中,nnn就是对应的滑动窗口位置索引。之后SiamFC就在这些位置上去寻找最大响应的地方,之后通过卷积的映射关系还原出目标在当前帧的位置,使用的损失函数是Logistic Loss(记为LsimL_{sim}Lsim​)。文章对相关性分析这块进行了改进,使用了n∗cn*cn∗c维度上的分组卷积进行实现。

SiamRPN
这个方法是在SiamFC的基础上进行改进的,改进之处就是给网络添加了RPN的网络结构,每个RoW编码kkk个anchor box,输出是每个框的置信度与偏移量回归,使用的损失函数是交叉熵损失函数与Smooth L1损失函数,记作Lscore,LboxL_{score},L_{box}Lscore​,Lbox​。

2. SiamMask方法

SiamMask方法参考了之前讲到的SiamFC与SiamRPN方法,对应的就是文章提出的带有3个输出分支与2个输出分支的版本了。对应见图2所示:

2.1 分割分支

这里假设输入的目标样本分辨率为w∗hw*hw∗h,则对应的分割分支也需要生成对应大小的mask结果hϕh_{\phi}hϕ​,这是有由两层的卷积网络实现的(对于每个RoW都会有一个Mask),这里对分割掩膜的生成与之前的FCN类的分割方法还不太一样,其是在RoW的channel维度上增加,从而提升性能。因而对于第nnn个RoW其生成的分割掩膜为:
mn=hϕ(gθn(z,x))m_n=h_{\phi}(g_{\theta}^n(z,x))mn​=hϕ​(gθn​(z,x))
这里生成的掩膜是二值的,使用的损失函数是Logistic Loss,二值目标标签为yn∈{−1,1}y_n\in \{-1,1\}yn​∈{−1,1},则对应的分割损失函数为:
Lmask(θ,ϕ)=∑n(1+yn2wh∑i,jlog(1+ecni,jmni,j))L_{mask}(\theta,\phi)=\sum_{n}(\frac{1+y_n}{2wh}\sum_{i,j}log(1+e^{c_n^{i,j}m_n^{i,j}}))Lmask​(θ,ϕ)=n∑​(2wh1+yn​​i,j∑​log(1+ecni,j​mni,j​))
从上面的损失计算过程可以看出这里只对正样本做了损失计算

上面的分割约束过程是在Cross-Correlation结果的spatial上的一个点上做的,也就是说上面的每个点就是一个mask的预测,在给出的代码里面使用,下面的代码来将这个点转化为一个分割结果:

# ref: https://github.com/foolwood/SiamMask/blob/master/models/siammask.py
# N*(63*63)*1*1-->N*1*1*(63*63)-->N*1*63*63
p_m = p_m.permute(0, 2, 3, 1).contiguous().view(-1, 1, o_sz, o_sz)

除了上面提到的在channel维度上增加(为了去预测63*63大小的分割结果) ,文章还是使用了低层次特征来优化的方式,类似于分割模型里面的decoder部分。其结构见下图所示:

其中的上采样连接模块为:

这部分的代码请参考:
https://github.com/foolwood/SiamMask/blob/master/experiments/siammask_sharp/custom.py
https://github.com/foolwood/SiamMask/blob/master/models/siammask_sharp.py

2.2 网络结构的变种

文章添加了Mask分支之后产生了对应两个模型分支(带有3或2个输出分支),对应的2分支的损失函数为:
L2B=λ1Lmask+λ2LsimL_{2B}=\lambda_1 L_{mask}+\lambda_2 L_{sim}L2B​=λ1​Lmask​+λ2​Lsim​
对应的3分支的损失函数为:
L3B=λ1Lmask+λ2Lscore+λ3LboxL_{3B}=\lambda_1 L_{mask}+\lambda_2 L_{score}+\lambda_3 L_{box}L3B​=λ1​Lmask​+λ2​Lscore​+λ3​Lbox​
其中,λ1=32,λ2=λ3=1\lambda_1=32,\lambda_2=\lambda_3=1λ1​=32,λ2​=λ3​=1。

3. 实验结果

跟踪性能:

视频分割性能:

消融实验:

推荐文章:

  1. siammask:Fast Online Object Tracking and Segmentation: A Unifying Approach论文解读和代码详解

《SiamMask:Fast Online Object Tracking and Segmentation:A Unifying Approach》论文笔记相关推荐

  1. 论文笔记之Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 论文链接:http://dwz.cn/6qPeIb 本文的主要思想是为了剖析出一个跟踪算法中到 ...

  2. 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    本人为目标追踪初入小白,在博客下第一次记录一下自己的论文笔记,如有差错,恳请批评指正!! 论文相关信息:<Understanding and Diagnosing Visual Tracking ...

  3. 论文笔记Understanding and Diagnosing Visual Tracking Systems

    最近在看目标跟踪方面的论文,看到王乃岩博士发的一篇分析跟踪系统的文章,将目标跟踪系统拆分为多个独立的部分进行分析,比较各个部分的效果.本文主要对该论文的重点的一个大致翻译,刚入门,水平有限,如有理解错 ...

  4. 目标跟踪笔记Understanding and Diagnosing Visual Tracking Systems

    Understanding and Diagnosing Visual Tracking Systems 原文链接:https://blog.csdn.net/u010515206/article/d ...

  5. 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)

    追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems) PROJECT http://winsty.net/tracker_di ...

  6. ICCV 2015 《Understanding and Diagnosing Visual Tracking Systems》论文笔记

    目录 写在前面 文章大意 一些benchmark 实验 实验设置 基本模型 数据集 实验1 Featrue Extractor 实验2 Observation Model 实验3 Motion Mod ...

  7. Understanding and Diagnosing Visual Tracking Systems

    文章把一个跟踪器分为几个模块,分别为motion model, feature extractor, observation model, model updater, and ensemble po ...

  8. CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做SANet.作者在论文中提到,CNN模型主要适用于类间判别,对于相似物体的判别能力不强.作者提出使用RNN对目标物体的self-structure进行建模,用于提 ...

  9. ICCV 2017 UCT:《UCT: Learning Unified Convolutional Networks forReal-time Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文模型叫做UCT.就像论文题目一样,作者提出了一个基于卷积神经网络的end2end的tracking模型.模型的整体结构如下图所示(图中实线代表online trackin ...

  10. CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记

    理解出错之处望不吝指正. 本文提出的模型叫做STRCF. 在DCF中存在边界效应,SRDCF在DCF的基础上中通过加入spatial惩罚项解决了边界效应,但是SRDCF在tracking的过程中要使用 ...

最新文章

  1. 那些年你用过哪些消息中间件?为什么又弃了?现在用的是什么?
  2. Handler、Looper与MessageQueue源码分析
  3. nginx实现web负载均衡
  4. ui边框设计图_UI设计形状和对象基础知识:填充和边框
  5. Zongsoft.Data 发布公告
  6. CSS之七个高度有效的媒体查询技巧
  7. [转载] java中关于用\t格式输出
  8. WordPress主题modown6.2+erphpdown11.7
  9. 【Vue2.0】—Vue监视数据的原理(五)
  10. php.ini修改php上传文件大小限制的方法
  11. selenium启动火狐浏览器_selenium之nodejs入门使用
  12. mysql中计算日期整数差
  13. 使用shell脚本实现二进制、十进制、十六进制转换
  14. 知乎被爆裁员20%锤子60%,BAT裁员缩招为啥急于否认?
  15. 服务器功耗计算器_无服务器在您的用例中便宜吗? 用这个计算器找出答案。
  16. Python面向对象版学员管理系统
  17. stm32f107使用外部16MHz晶振
  18. java实体类及类属性判空
  19. 棋盘dp 牛牛的DRB迷宫I
  20. WPF之路——绘制几何图形

热门文章

  1. 即速应用——不会代码也能做App
  2. 基于词汇衔接的文档级扩展机器翻译评测指标
  3. 背景颜色渐变(shape属性)
  4. 国家数据字典mysql_数据字典 · MySQL DBA · 看云
  5. 【零基础-3】PaddlePaddle学习Bert
  6. 微信云托管-填坑之旅
  7. 计算机上计算器不见,win10系统自带的计算器不见了的处理教程
  8. iOS SDWebImage 清空缓存 新方法
  9. 企业数字化转型思考系列文章(一)何为数字化转型?
  10. 用计算机升级ipad系统软件,ipad如何升级系统 三大方法推荐【图解】