阅读笔记-TransVOS: Video Object Segmentation with Transformers

image.png

文章要解决的任务是semi-supervised video object segmentation, 该任务的定义是给定一段图像序列,其中第一帧提供了目标的mask,希望能够通过算法获得其后逐帧的目标mask。

motivation

目前解决该任务的主流方法是基于匹配的方法,其基本思想是计算当前帧与历史帧中目标的相似度,确定当前帧中哪些是前景区域。代表性方法比如STM等,构建当前帧的每个像素与历史帧每个像素的时空attention,作者认为这些方法仅考虑了当前帧信息与历史帧信息的关联,但并没有考虑历史帧之间的关系。同时也忽略了帧内不同像素点的关联。另外一些引入temporal relationships的方法忽略了空间关系。而本文将不同帧的不同像素都作为tokens,显然能将时空信息都同等的纳入考虑,于是选择了transformer结构

该任务还存在的一个问题是 输入表示问题,当前帧只有RGB,但参考帧有RGB和mask,两者显然无法同样表示。大多数方法使用两个独立的encoder处理这两种信息,这种做法会有大量的冗余参数,过于庞大。另一些方法则是从让两种信息共享参数的角度出发,比如RANet利用siamese网络处理RGB信息,然后将reference frames的RGB特征和mask结合,作者认为这类方法直接将mask与高层语义结合,忽略了mask具有的edge和contour信息,另一些方法比如RGMP和AGSS-VOS则给当前帧附加了一个伪mask,然后统一成4通道的信息,从而共享网络参数,但这种方法会存在mask对齐的问题,即使使用flow对mask进行wrap,也会带来大计算量。本文的思路是利用两个很浅的层分别处理两种信息,进行尺度统一再输入到共享网络提取特征。相当于折衷方案吧。

method

文章方法的pipeline如Figure 2所示, feature extractor其实处理了两种不同信息,达到统一形式。Transformer包括encoder 和 decoder和DETR的结构一样, 最后的segmentation模块是将transformer获得的target 模板信息target predictions与当前帧的信息融合对尺度的获得当前帧中目标的mask。

image.png
  • Feature extractor, 一般的multi-stage backbone,如VGG, ResNet都可以拿过来用,但第一个stage需要替换成这里的two-path input layer,以处理不同形式的信息。对于query frame的path就是常规的cnn模块,对于reference sets,因为包含RGB和mask,所以该path设计了3个conv分支,分别处理RGB, mask的前景和mask的背景, 然后将三个分支的特征相加作为该path的输出。两个path的融合是将特征在时间T维度上cat,可以理解为batch上,送入到CNNbackbone上提取特征,最后在backbone的后面加了一个1x1的卷积层用于降维,以减少transformer的计算量。最终只有最后一个stage的输出参与了transformer,但不同stage的输出特征还会再segmentation head中用到。
  • transformer, transformer这一块大体上就是标准的流程,tokens是每个frames的每个pixel, 其pos编码采用的是sinusoidal positional encoding,但其参数包含时间和空间。在decoder部分query只有一个,这时候decoder的self-attention部分不需要计算内积和softmax部分,所以直接就是两个线性层映射。
  • Segmentation,在TAB中主要是利用target predictions计算query上存在目标的可能性,然后和query的transformer融合后特征cat一起用于反推当前帧的mask。 是transformer 的encoder输出的当前帧的特征。是decoder的输出。
  • [图片上传失败...(image-ad2694-1623323130370)]
  • Segmentation head,这部分通过skip-connection的fan公式融合了TAB的输出和feature extractor获得的当前帧的表观特征,类似于FPN的反向金字塔方式最终获得当前帧1/4分辨率下的mask。这部分怎么理解呢?我个人觉得 表示了时域的特征,可以认为是种背景信息, attention则可以认为是一种粗糙的mask,feature extractor的输出则是侧重当前帧的信息,从而在当前帧只能更好的区分出背景和前景区域

Training and Inference, 在training时,由于transformer可以是任意数量的token,所以这部分其实对于reference set的基数没有要求,其限制可能来自于CNN的backbone和segmentation head是否使用BN。训练数据则主要来自于合成数据,然后在真实数据上进行微调。损失函数包括二分类的交叉熵损失和mask的IOU损失。在Inference时,从时间角度考虑,inference sets仅使用了第一帧和前一帧。第一帧比较准确,前一帧是与当前帧关联最大。

Experiments

  • 在与SOTA方法对比时,无论是否使用YouTube辅助数据进行训练,性能优势都很明显,证明了该方法处理VOS任务的优越性。

  • 消融实验部分。

  • Mask utilization,主要分析了mask的不同使用时机的影响。multiply是直接与RGB数据乘在一起,这时候两个path应该一样吧?没看到补充材料,具体不清楚;residual表示(mask+1)*features, 这个时候应该两个path也一样吧?, weights-shared就是本文方法,即mask内容和RGB图共享网络。发现mask在更高层上融合比开始就融合的效果好,而本文其实不是mask的简单融合,而是mask所表示内容的特征抽取,其信息更丰富吧。

  • Reference set, 这部分对比了仅利用第一帧,仅利用前一帧和两帧都利用的性能,但为什么没有对比利用T帧reference set的情况呢?

  • Transformer structure, 对比了是否利用decoder的性能,以及仅利用1层decoder和1层encoder的性能。不利用decoder是怎么做的不是很清楚,猜测是直接将query token作为query prediction?

  • input resolution, 增大分辨率显然分割效果更好,但是会带了tokens的数量激增,计算量的压力更大。

image.png
image.png

Thoughts

Transformer可能适合做图像分割,但对于示例分割这种更依赖局部信息,且需要更强区域鉴别性的任务能否取得好效果呢?但attention像Graph attention network一样,除了刻画相似度,也能反映不相似度,所以原理上应该是可以做的。那么这个方法能不能扩展到处理MOTS任务呢?

你可能感兴趣的:(阅读笔记-TransVOS: Video Object Segmentation with Transformers)