本文共 2867 字,大约阅读时间需要 9 分钟。
参考代码:
导读:在视频分割任务中网络从视频帧中获取到的目标信息会随着分割的进行逐渐丰富起来,现有的一些分割方法确实或多或少地采用了之前帧的分割结果,但是并没有将当前帧之前的所有帧得到的信息进行融合,帮助当前帧进行分割,因而这篇文章就是从这角度出发,构建一个大的memory池子从而提出了一种半监督的视频分割方法STM(Spatial-Time Memory Network ),将当前帧的信息与之前帧的所有信息在空间与时序维度上进行特征匹配,从而得到超过之前方法的性能表现,由于采用了之前帧的所有信息自然其对遮挡和目标外表变化的鲁棒性能更加出色。文章的这个方法在DAVIS与Youtube-VOS数据集上性能表现都是很强的。不过要是部署到端上还是一个坑啊-_-||,不过还是很有借鉴参考价值的。
文章中对现有的一些视频分割方法进行了分析,将其划分为了下图中的集中类型:
PS:将当前帧之前的所有帧及其mask都保存到Memory里面是很低效的,文章中默认保存前一桢与首帧,其它的帧则是间隔 N = 5 N=5 N=5进行采样。
文章的方法流程可以划分为Memory和Query部分,前一个部分是对过去帧的图像和mask进行编码,另外一个部分是当前帧的图像编码,并使用Memory听过read模块输出的信息进行分割mask的decoder,其流程见下图所示:
这篇文章的算法使用的是ResNet-50作为其backbone,其在解码的时候由于Memory与Query的差异导致输入的数据并不相同,因而文章将这部分的编码器划分为了两个:
在得到两个部分的编码之后的键值对之后就需要将当前帧与之前的帧进行关联,也就是在之前的帧(Memory)中检索寻找与当前帧相似的帧,并计算他们的相似度。这部分的工作是有key完成的,对于两个key的相似度计算可以描述为:
f ( k i Q , k j M ) = e x p ( k i Q ⋅ K j M ) f(k_i^Q,k_j^M)=exp(k_i^Q\cdot K_j^M) f(kiQ,kjM)=exp(kiQ⋅KjM) 这里使用的是矩阵运算的形式进行的,得到当前帧 i i i与之前帧 j j j之后就需要read出当前帧与之前帧的联合特征图了,其是使用Concat的形式进行组合的: y i = [ v i Q , 1 Z ∑ ∀ j f ( k i Q , k j M ) v j M ] y_i=[v_i^Q,\frac{1}{Z}\sum_{\forall j}f(k_i^Q,k_j^M)v_j^M] yi=[viQ,Z1∀j∑f(kiQ,kjM)vjM] 其中,归一化参数为: Z = ∑ ∀ j f ( k i Q , k j M ) Z=\sum_{\forall j}f(k_i^Q,k_j^M) Z=∑∀jf(kiQ,kjM)。 其具体的计算过程可以描述为下图中的形式:这篇文章的训练方法与作者之前的文章RGMP具有相似的地方,都是使用两阶段进行训练的。
第一阶段训练: 这里对图像数据进行随机的仿射变换从而得到不同的数据,并将这些数据使用起来进行第一阶段的训练工作。第二阶段训练:
这部分的训练是在一阶段模型的基础上使用视频数据训练得到的,其在视频数据集上进行采样得到sample,这里会对此采样的间隔进行变化,文章中说的是0~25之间间隔采样。不同阶段的训练给性能带来的影响:
分割性能:
转载地址:http://wwkhj.baihongyu.com/