参考代码:feelvos
1. 概述
导读:现有一些经典的视频分割算法都是比较复杂的,很依赖于在第一帧上进行finetune,并且运算的速度也是很慢的,这就严重限制了其实际使用。针对这些问题文章提出了一种并不依赖于finetune的简单快速方法FEELVOS,这个方法中首先利用利用特征图上逐像素的embedding(参考Pixel-Wise Metric Learning,用于相关性分析),之后将第一帧与前一帧通过全局(第一帧)与局部(前一帧)的matching机制进行整合得到最后的结果(对应文中提到的Dynamic Segm Head),从而实现当前帧的分割。embedding之后的信息会作为卷积网络的内部引导使用,并且这部分也是可以训练的,从而实现了端到端的多目标分割方法(使用的损失函数为交叉熵损失函数),在DAVIS 2017数据集上达到了71.5%的性能。
针对现有的视频分割算法,文章从实用性的角度将算法设计的需求归纳为以下几点:
- 1)方法简单:只需要单个神经网络完成任务并且不需要模拟数据;
- 2)运行速度快:整个分割算法能够快速部署,这就不能在第一帧的基础上进行finetune了;
- 3)端到端集成:分割方法不会随着分割目标数量的变化而改动耦合结构,全部整合到一个端到端的方法中去;
- 4)高性能:其分割的性能应该足够强,在DAVIS 2017数据集上达到至少64%;
基于上面的要求文章将目前的一些分割算法进行分析比较,得到下表:
这篇文章算法的主要设计思想源自于PML(Pixel-Wise Metric Learning),在PML训练过程中使用triplet loss学习pixel-wise的embedding,在测试阶段通过与邻域的比较将当前像素映射到第一帧的像素空间中实现分割。但是这样的方法并没有使用端到端的方式去进行分割学习,经常由于一些较难通过邻域进行匹配而引入分割噪声。在这篇文章的方法FEELVOS中也学习了embedding与领域匹配,但是该方法将这两个信息作为卷积网络的内部引导而不是最后分割结果决策,并且引入语义分割中常用的交叉熵损失函数。
2. 方法设计
2.1 算法流程结构
文章中采用的backbone是DeepLabV3+(去掉了最后的upsample输出,只保留decoder部分stride=4的输出),在backbone输出的接触上使用embedding layer去生成embedding vector,之后使用global matching与local matching将当前帧的embedding vector与第一帧和前一帧做匹配。之后将这些有效信息(global matching distance maps、local matching distance maps、前一帧预测结果、backbone输出)送入到dynamic Segmentation head中去生成最后结果。
2.2 Semantic Embedding
对于特枕图上的每个位置像素
p
p
p其对应的semantic embedding vector记作
e
p
e_p
ep,他是代表特征图在
H
,
W
H,W
H,W维度上每个像素点上的特征提取(加入特征图为
C
∗
H
∗
W
C*H*W
C∗H∗W则抽取出来的特征向量为
C
∗
1
∗
1
C*1*1
C∗1∗1维度的)。文章里面定义了分别来自两个特征图的特征向量距离定义度量:
d
(
p
,
q
)
=
1
−
2
1
+
e
x
p
(
∣
∣
e
p
−
e
q
∣
∣
2
)
d(p,q)=1-\frac{2}{1+exp(||e_p-e_q||^2)}
d(p,q)=1−1+exp(∣∣ep−eq∣∣2)2
上式的结果
d
(
p
,
q
)
∈
[
0
,
1
]
d(p,q)\in [0,1]
d(p,q)∈[0,1],分别在很相近和相差大的时候趋近于。
2.3 Global Matching
在视频分割任务中需要通过考虑邻近区域学习到的embedding空间,将第一帧中的语义信息传递到后序的帧中。使用
P
t
P_t
Pt代表
t
t
t帧的所有像素,
p
t
,
o
⊆
P
t
p_{t,o}\subseteq P_t
pt,o⊆Pt代表类别为
o
o
o的像素,因而对于帧
t
t
t时刻的像素
p
∈
P
t
p\in P_t
p∈Pt且其属于类别
o
o
o,它与第一帧
P
1
,
o
P_{1,o}
P1,o的最邻近具体表示为
G
t
,
o
(
p
)
G_{t,o}(p)
Gt,o(p)表示为:
G
t
,
o
=
min
q
∈
P
1
,
o
d
(
p
,
q
)
G_{t,o}=\min_{q\in P_{1,o}}d(p,q)
Gt,o=q∈P1,omind(p,q)
上面的结果可以理解为当前帧中像素与第一帧中对应类别的相似性。
在图2中展示了global matching的可视化结果,可以看出其是有较大的噪声的直接用于分割结果判断会存在较大的误差,因而后面也是使用dynamic Segmentation head来实现的。
2.4 Local Previous Frame Matching
与global matching采用类似的机制,只不过这里考虑的是当前帧输出与前一帧的关系。在global matching中是考虑全部的像素的相关性,而在local matching中则是着重考虑局部的相关性,因而相邻帧之间的位移变化并不是很大。对于来自帧
t
t
t中的像素
p
p
p和来自帧
t
−
1
t-1
t−1中的像素
q
q
q,再给定一个窗口大小
k
k
k,则由这个窗口可以确定一个元素数量为
(
2
k
+
1
)
2
(2k+1)^2
(2k+1)2的集合
N
(
p
)
N(p)
N(p)。则局部的相关性就是通过这个来实现,兼顾了效率与准确性。因而两帧之间的相关性可以表述为:
其中,
P
t
−
1
,
o
p
=
P
t
−
1
,
o
∩
N
(
p
)
P_{t-1,o}^p=P_{t-1,o}\cap N(p)
Pt−1,op=Pt−1,o∩N(p)。
local matching的可视化结果见图2中的右下部分。
2.5 Dynamic Segmentation Head
为了系统且高效的处理数量不同的对象,这里在前面讲到的4个输出之上添加dynamic Segmentation head,其结构见下图3所示:
3. 实验结果
网络性能:
运算时间比较:
消融实验(first frame global matching、previous frame local matching、previous frame global matching、previous frame prediction):