这篇ICCV2019的论文可算是厉害了。单目标视频目标分割(VOS)中的SOTA效果,并且速度还惊人的快。
Idea
近年来,Match based和Propagation based 方法做快速VOS的效果显著。这篇工作就将这两个方法的优点融合进来。为了让读者能快速理解VOS的发展趋势,我简单说下什么是Match based和Propagation based 。
- Match based:代表有FEELVOS和siammask,通过学习(当前帧和参考帧)两帧之间的像素之间的相似性,用相似图结合卷积特征来帮助目标分割
- Propagation based:代表有MaskTrack,通过提供前一帧的mask信息,把mask 直接concat到输入图像上,然后送到卷积网络输出目标的分割结果。
作者认为,Propagation based方法会有误差的漂移,而Match based方法会有错误的matching,使得网络学习的是次优模型。
如a图,圆圈里面有一个叉的符号,代表学习相似性,目前往往是cross correlation操作,(RGMP用的是concat)。b图则就是把mask concat一下。c图就是RANet提出的抽象结构了。输入第t帧作为当前帧,参考帧(或者称作模板)和当前帧学的相似性,得到相似图。Ranking模块为每一个map学的一个score,根据score排序,选出score大的一些map,用这些map送到Deconv当中,得到目标的分割图。
main contributions
- 作者把matching和propagation都整合进一个框架中,形成了能实时(33fps)的半监督VOS方法。
- 提出一种Ranking attention Module 来给特征图打分,然后挑选出重要的特征图,用于更加精细的VOS
- 在DAVIS16,17上测试,得到了state of the art的效果。并且在DAVIS2016,目前是最高的J&F。同时具有30fps的速度
Method
overview
首先是encoder,通过卷积网络如resnet得到图像的特征。然后送到correlation模块中学习和第一帧的特征的相似性。所以也是一种孪生结构。注意第一帧的特征是经过reshape的。这个也会在后面的小节中细讲。
学习到了相似图有
H
0
∗
W
0
H_0 *W_0
H0∗W0个。
H
0
,
W
0
H_0,W_0
H0,W0是第一帧得到的卷积特征的分辨率。也就说是,参考帧特征的每一个单元(C维向量)都会和当前帧特征去做相关性学习,参考帧特征图有
H
0
,
W
0
H_0,W_0
H0,W0个单元,所以得到的相似图特征的shape是
H
∗
W
∗
(
H
0
∗
W
0
)
H *W *(H_0*W_0)
H∗W∗(H0∗W0)。接下来相似图会分成两个流到两个RAM模块中,一路RAM的目标是挑选出对前景分割有利的相似图,另一路RAM的目标是挑选出对背景分割有利的相似图。
通过挑出出重要的相似图之后,就把两路特征融合一下,融合的方式很简单就不再多说。注意融合的时候,concat了第t-1帧的预测结果。最后把最终的特征送到deconv中,得到最后的分割图。
Correlation
参考帧特征记作
I
1
∈
R
C
∗
H
0
∗
W
0
I^1 \in R^{C*H_0*W_0}
I1∈RC∗H0∗W0,当前帧特征记作
I
t
∈
R
C
∗
H
∗
W
I^t \in R^{C*H*W}
It∈RC∗H∗W。
先把
I
1
I_1
I1reshape为
R
H
0
∗
W
0
∗
(
C
∗
1
∗
1
)
R^{H_0*W_0*(C*1*1)}
RH0∗W0∗(C∗1∗1),记
K
=
K
j
∣
j
=
1...
H
0
∗
W
0
K={K_j | j=1...H_0*W_0}
K=Kj∣j=1...H0∗W0,K是
I
1
I^1
I1的单元特征的集合,每一个元素都是C维特征。K中的每一个元素经过L2 normalize之后,去和
I
t
I^t
It做correlation操作。相当于把每一个元素当成卷积核,1*1的卷积核。得到的相似图集合记作S。
S
=
{
S
j
∣
S
j
=
K
j
∗
I
t
}
S = \left\{S_j | Sj=K_j * I^t \right\}
S={Sj∣Sj=Kj∗It}
S中的每一个元素代表一张相似图,是从模板特征(参考特征)中的一个单元通过correlation得到的。其实建立的是:模板特征的单元向量和当前帧中的特征,哪个位置最相似
如上图,将得到的相似图可视化之后,可以发现某些区域是很亮的,说明这些区域和对应的单元向量(来自参考帧)很相似。
RAM
在得到了相似图之后,相似图被送到两路RAM中。这里仅仅以第一路为例。从总览图中可以清晰的看到,第一路RAM的输入有两个,分别是相似图集合S和第一帧的前景mask。
ram模块分三步走:
- 之前说了S的shape是 ( H 0 ∗ W 0 ) ∗ H ∗ W (H_0*W_0)*H*W (H0∗W0)∗H∗W,第一个维度是通道维度。现在reshape为 ( H ∗ W ) ∗ H 0 ∗ W 0 (H*W)*H_0*W_0 (H∗W)∗H0∗W0。就是交换一下空间维度和通道维度。然后和mask相乘。mask的分辨率本来和原图一样大,把mask resize到 H 0 ∗ W 0 H_0*W_0 H0∗W0,作者认为,这一步目的是将不是前景的区域的特征抑制掉。(其实我觉得一步很没道理啊,既不是空间注意力,又不是点积相似性,而且空间维度和通道维度都交换了,怎么还能乘上mask去抑制无关的背景特征呢?)。得到的特征记作 S 1 S^1 S1。
- 然后 S 1 S^1 S1经过一个两层的CNN,同时还有channel-wise 的GMP,得到两个 H 0 ∗ W 0 H_0*W_0 H0∗W0的map。这两个map相加再reshape为向量的形式,就代表了一组ranking score了
- 第三步,把ranking score和相似图S送入Rank模块(白色矩形框框)。这个Rank模块的工作机制很简单。
就是根据score挑选出最大的256个map,组成新的feature。注意如果score中大于0的数的没有256个,则剩下的用0 padding组合成256通道的特征图。
propagation and Deconv
这个部分从示意图中看出,就是concat上一帧预测的mask,(当然这个mask是经过resize的),然后送到分割头网络中得到最终的分割结果。deconv网络具体的结构,作者提交了一份补充说明材料,不在这篇论文上。
details
encoder
采用resnet101,将bn替换为in(instance norm),把后三个stage的特征用卷积层降维,并且通过L2的normalize,这是为了多尺度的融合以及特征裁剪(pruning)
decoder
采用一般的deconv。把encoder的最后三个stage的特征送进来。
training
输入图像resize到480*864。数据增强采用的是随机旋转(-30-+30),随机scaling(0.75-1.25),随机裁剪,还有一个叫做Thin plate Splines(TPS)。(不知道这是啥,没听说过)
experiments
具体实验数据就不说了,总之很强就对了。哈哈
作者的源码还没开放,说是会不久之后到。我估计就是在ICCV2019大会之后吧