查看原文
其他

【源头活水】Transformer实现Video Instance Segmentation

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

作者:知乎—西瓜学习

地址:https://www.zhihu.com/people/swy-5

End-to-End Video Instance Segmentation with Transformers

这篇应该是第一篇将Transformer用于视频实例分割的paper。Transformer是一个非常有潜力的结构,可以统一不同模态的数据,统一不同的视觉任务。
  • Transformer可以用于建模long-range依赖,非常适用于视频相关的任务,对时序信息建模。
  • Transformer的核心self-attention,可以不断的学习,更新,基于帧与帧之间的相似性。
本篇论文的VisTR(Video Instance Segmentation TRansformer)对一个序列并行解码,预测。首先我们宏观的来看一下整个网络的pipeline:
  • 第一阶段,将若干帧一起输入pipeline,经过CNN提取特征后,将多帧按照时间顺序concat在一起,得到clip-level sequence。
  • 第二阶段,transformer将上述clip-level sequence作为输入,按顺序输出一些列object预测结果。
object预测按照输入图片得顺序输出。如上图,同样得形状表示属于同一帧得object。同样得颜色表示这些object属于同一类。
为了解决如何保持输出序列得有序性以及合理得mask。

01

VisTR架构
整个架构由四部分组成,backbone,transformer,instance sequence matching,instance sequence segmentation。输入一个视频序列,输出该视频序列对应的每帧的mask。


02

Overall architecture
Backbone
backbone负责提取一个序列帧的特征。提取每一帧的特征并将所有的特征图concat一起,得到  。

Transformer Encoder

Encoder利用self-attention ,建模视频内每一个像素之间的相似性。首先使用1×1的卷积将输入的特征图tensor降维到  。为了使得T输入的tensor适用于Transformer的结构,将spatial和temporal维度flatten到同一维,得到  ,其为一个二维的tensor。d相当于transformer在处理语言时句子的长度,T×H×W相当关于embedded vector的长度。将该tensor输入到multi-head self-attention module和fully connected feed forward network。

Temporal and spatial positional encoding
Vision下的transformer同样需要position encoding。Transformer的结果是与输入序列顺序无关的(permutation-invariant),而实例分割任务需要精确的位置信息。论文采用原始transformer的位置编码公式,得到包含temporal和spatial三个维度的编码信息。计算三个维度的position encoding,然后concat在一起。
其中,  ,d要能被3整除。该部分编码类似于DETR中的position encoding,无非是这里使用的是三维,而DETR使用的是二维。
Transformer Decoder
同样借用DETR中的思想,预设每一帧有固定n个的input embedding用于抽取instance feature,T帧总共会query n×T个instance。这些instance queries是通过模型学习得到的。Decoder的输入为预设的instance queries和encoder的输出。这样,预测的结果按照原始视频帧序列的顺序输出,输出为n×T个instance向量,即学习到的instance queries。
这里预设的instance queries可以理解为Faster-RCNN中预设的anchors,只是queries是可学习的。instance queries的每一个通道,学习到对应instance在所有训练数据中的分布。

Instance Sequence Matching

ViTR的decoder最后得到固定大小的N个prediction序列。Instance Sequence Matching模块是为了解决如何在不同图片的prediction序列中对于相同的instance保持相对位置不变,找到每帧中instance对应的GT从而监督训练。简单来说就是对预测到的instance找到对应的Ground Truth从而训练模型。
decoder输出的固定个数的prediction序列是无序的,每一帧包含n个instance sequence。本论文和DETR相同,利用匈牙利算法进行匹配。ViTR采用了和DETR类似的方法,虽然是实例分割,但需要用到目标检测中的bounding box方便组合优化计算。通过FFN,即全连接计算出归一化的bounding box中心,宽和高。通过softmax计算出该bounding box的label。最后我们得到n×T个bounding box。利用上述得到label概率分布和bounding box匹配instance sequence和gournd truth。
其中,  为pair-wise的代价,  为groudn truth,  为预测的sequence其中一种排列组合。简单来说,就是找  最小的一个prediction的排列组合用于计算损失。如何找到的方法就是用匈牙利算法,该方法更为高效。该代价是为了寻找最佳的组后,并不是训练用的loss。
最后计算匈牙利算法的loss,同时考虑label的概率分布以及bounding box的位置。Loss基本遵循DETR的设计,使用L1 loss和IOU loss。下式为训练用的loss。由label,bounding box,instance sequence三者的loss组成。

Instance Sequence Segmentation

该模块的任务是计算每一个instance在对应帧中的mask。
对于每一帧,将decoder输出的instance preidiction和对应帧的encoder得到的feature 输入到一个self-attention模块中,得到初始的attention map。从这个操作可以看出,将encoder和decoder的输出做一个self-attention,可以把encoder看作一个feature map,decoder看作一个attention map,attention map是通过上面的Instance Sequence Matching Module 匹配后训练得到的。feature map和attention map对应通道相乘即为该帧上该通道对应的instance的mask结果。
之后self-attention的结果会和backbone提取的特征和encode的输出按帧的顺序融合。最后输出每一帧中instance的mask结果。
网络的最后,基于不同帧中同一个instance可以相互增强的思想,使用3D卷积输出最后的instance segmentation 结果。


03

Expriments
使用YouTube-VIS数据集测试,该数据集视频最大帧数为36,所以设定T为36。不需要后处理将多个处理结果拼接在一起。预设每一帧至多10个instance,故instance query的长度为360。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存