《SiamMask:Fast Online Object Tracking and Segmentation:A Unifying Approach》论文笔记
参考代码: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}
Lscore,Lbox。
2. SiamMask方法
SiamMask方法参考了之前讲到的SiamFC与SiamRPN方法,对应的就是文章提出的带有3个输出分支与2个输出分支的版本了。对应见图2所示:
2.1 分割分支
这里假设输入的目标样本分辨率为
w
∗
h
w*h
w∗h,则对应的分割分支也需要生成对应大小的mask结果
h
ϕ
h_{\phi}
hϕ,这是有由两层的卷积网络实现的(对于每个RoW都会有一个Mask),这里对分割掩膜的生成与之前的FCN类的分割方法还不太一样,其是在RoW的channel维度上增加,从而提升性能。因而对于第
n
n
n个RoW其生成的分割掩膜为:
m
n
=
h
ϕ
(
g
θ
n
(
z
,
x
)
)
m_n=h_{\phi}(g_{\theta}^n(z,x))
mn=hϕ(gθn(z,x))
这里生成的掩膜是二值的,使用的损失函数是Logistic Loss,二值目标标签为
y
n
∈
{
−
1
,
1
}
y_n\in \{-1,1\}
yn∈{−1,1},则对应的分割损失函数为:
L
m
a
s
k
(
θ
,
ϕ
)
=
∑
n
(
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_{n}(\frac{1+y_n}{2wh}\sum_{i,j}log(1+e^{c_n^{i,j}m_n^{i,j}}))
Lmask(θ,ϕ)=n∑(2wh1+yni,j∑log(1+ecni,jmni,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分支的损失函数为:
L
2
B
=
λ
1
L
m
a
s
k
+
λ
2
L
s
i
m
L_{2B}=\lambda_1 L_{mask}+\lambda_2 L_{sim}
L2B=λ1Lmask+λ2Lsim
对应的3分支的损失函数为:
L
3
B
=
λ
1
L
m
a
s
k
+
λ
2
L
s
c
o
r
e
+
λ
3
L
b
o
x
L_{3B}=\lambda_1 L_{mask}+\lambda_2 L_{score}+\lambda_3 L_{box}
L3B=λ1Lmask+λ2Lscore+λ3Lbox
其中,
λ
1
=
32
,
λ
2
=
λ
3
=
1
\lambda_1=32,\lambda_2=\lambda_3=1
λ1=32,λ2=λ3=1。
3. 实验结果
跟踪性能:
视频分割性能:
消融实验:
推荐文章:
相关文章
- 论文笔记(2):Deep Crisp Boundaries: From Boundaries to Higher-level Tasks
- 2018年3月17日论文阅读
- 论文笔记(2):Deep Crisp Boundaries: From Boundaries to Higher-level Tasks
- Paper之NIPS/NeurIPS:2009年~2019年NIPS/NeurIPS(神经信息处理系统进展大会)历年最佳论文简介及其解读
- Paper之IEEE&RSJ:2009年~2019年机器人技术(IEEE机器人和自动化国际会议&RSJ智能机器人与系统国际会议&机器人技术:科学与系统&机器人学报)历年最佳论文简介及其解读
- DL之DilatedConvolutions:Dilated Convolutions(膨胀卷积/扩张卷积)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- ML之LS&OLS:LS&OLS算法的简介、论文、算法的改进(最佳子集选择OFSS法、前向逐步回归FSR法)、代码实现等详细攻略
- DL之GoogleNet:GoogleNet(InceptionV1)算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- 计算机毕设 SSM Vue的企业销售人才培训管理系统(含源码+论文)
- 毕业设计 Spring Boot的公寓宿舍后勤管理系统(含源码+论文)(1)
- 论文解读(soft-mask GNN)《Soft-mask: Adaptive Substructure Extractions for Graph Neural Networks》
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
- 暴力破解研究论文
- 论文投稿指南——准研究生们建议早点发小论文
- 【讲座笔记】科研论文的构思、规划和写作--中南大帅词俊
- 论文投稿指南——中文核心期刊推荐(航空、航天2)
- 论文投稿指南——中文核心期刊推荐(有机化学工业)
- 论文投稿指南——中文核心期刊推荐(外国语言)
- 论文笔记系列:经典主干网络(二)-- DenseNet
- 《论文阅读》Towards Emotional Support Dialog Systems
- 美团外卖——物流论文小笔记(Python实现)
- 论文理解与笔记【CVPR_2022.6】Region-Aware Face Swapping
- NILM论文笔记:R.Reddy, et al: A feature fusion technique for improved NILM
- 【目标检测论文解读复现NO.28】基于改进YOLO v5的电厂管道油液泄漏检测
- 论文阅读笔记5-An Asynchronous Energy-Efficient CNN Accelerator with Reconfigurable Architecture