STM makes a further step to use all previous frames with the corresponding object segmentation results to infer the object mask on the current frame.
在2019 ICCV论文 STM在获得最高性能的同时,存在一个影响性能的关键问题就是时空存储的成本,在STM中随着对视频序列中帧的预测,将已经预测的帧放入memory module,就意味着不断增大的内存消耗和Key Query匹配时的时间消耗,为了性能、内存和速度的权衡,STM最终建议选择每5帧存入memory module,但是时间的线性复杂度依然存在,并且记忆频率的降低破坏了利用来自先前帧的信息的原始目的。
这篇论文的core component是一个新颖的全局上下文模块(global context module),
(1):该模块可以有效地汇总(summarizes)和传播(propagate)整个视频序列中的信息(区别于仅适用一帧或几帧来指导当前帧分割的方法,使用了来自视频序列中的所有帧)
(2):该模块使用了固定大小的特征表示,即使用了与视频长度无关的恒定内存,显著减少了内存和计算成本, light-weight,从而实现了实时速度。
同时,Experiments on DAVIS and YouTube-VOS benchmarks show that our proposed global context module can achieve top accuracy in video object segmentation and is highly efficient that runs in real time.
pipeline:充分利用先前帧以及预测出的mask,通过Global Context Module 产生Global Context Features来增强当前帧的外观表示,产生更好的分割结果。当视频向前移动一帧,该表示会自动更新。
结构为解码器-编码器结构,并且GC模块构建在编码器的顶部,其中主要操作为:
1、对处理后的帧及其预测的mask进行上下文特征的提取和更新
2、使用上下文特征描述用于处理当前帧,使用Decoder生成最终分割结果。
蓝色的Encoder使用RGB和Mask作为输入,以将帧和分割信息编码仅特征空间中。
黄色的Encoder使用当前帧的RGB图像作为输入,编码特征嵌入。
当提取全局上下文特征时,全局上下文模块首先按照与STM模块相同的步骤生成key和value,其大小分别为H×W×Cn和H×W×Cm,其中Cn和Cm是通道数。与直接存储key和value的STM模块不同,全局上下文模块通过全局汇总进一步处理。
全局汇总不将key视做每个位置尺寸为Cm的H×W向量,而是将Cm 1通道映射为所有位置的未归一化权重(Cm × HW)。对于每个这样的加权,全局上下文模块计算value的加权总和,其中每个值由标量在加权的相应位置处加权。 每个这样的加权和称为全局上下文向量。 全局上下文模块将所有CM全局上下文向量组织到全局上下文矩阵中,作为全局摘要的输出。 该步骤可以有效地实现为key矩阵和value矩阵的转置之间的矩阵乘积,可以由以下公式表示:
其中t表示当前帧,Xt是GC模块的输入(即当前帧在Encoder模块的输出),k和v是生成key和value的模块,Ct是该帧对应的上下文矩阵,然后通过简单地利用该上下文矩阵来更新全局上下文矩阵。Gt是前t帧的全局上下文,G0是一个零矩阵,通过权重加权,表示了每个Ct对于总体Gt的贡献。
在将上下文特征存储之后,需要对distribution process,首先
模型使用与STM相同的方法为当前帧产生Query和Value。但是与STM不同的是,STM模块使用Query来计算与Memory中Key的相似性得分,然后计算使用相似性得分加权后的memory value的总和;而GC模块,则把Query解释为对内存中全局上下文特征的一组加权权重,并计算上下文特征的加权作为对应当前帧的分布式上下文信息,公式:q为计算Query的模块,Xt为当前帧通过Encoder计算得到的特征,Gt-1为前t-1帧的全局上下文特征,Dt为通过加权的分布式全局特征
全局上下文模块即summarize过去帧中上下文特征在当前帧的Query 位置中感兴趣的语义区域,与STM模块的区别如下图所示:
STM模块通过首先通过query-key匹配来识别此类区域,然后通过加权和来汇总其值来实现此目的。 全局上下文模块更有效地实现了相同的目标,因为全局上下文向量已经是所有过去框架中具有相似语义的区域的全局摘要。querying location仅需要确定全局上下文向量的适当权重即可产生一个向量,该向量汇总了所有自身感兴趣的区域。
Encoder和Decoder的设计上和STM一致,使用ResNet50作为作为 context encoder 和 current encoder的backbone,其中 context encoder 使用四通道输入(RGB+Mask),current encoder使用三通道输入(RGB)。使用Res4产生的特征图来生成key和value。
在通过context distribution operation后,将上下文特征压缩到256通道后送入Decoder里。
key value query的产生均由3×3卷积实现,并且将Cm设置为512,将Cn设置为128。
论文中使用了更大的channel测试,在提高复杂性的同时,反而带来了性能的衰减。
使用静态数据集MSRA10K,ECSSD和HKU-IS,共计15000张图像。使用图像随机变换产生相邻的三帧:随机旋转[-30,30],随机缩放比例[-0.75,1.25],thin plate spline (TPS) warping和随机裁剪生成视频模拟数据。
在4 GPU,8 batch-size的情况下,训练100 epoch。
在视频数据集上对预训练模型进行fine-tune,学习率为1e-6,训练30 epcoh。每个训练样本包含几个从训练视频中按时间顺序排列的帧(测试了不同的视频clip长度3\6\9,但是>3的长度没有收益),使用随机旋转、缩放和随机帧采样间隔来获得更长的外观变化的鲁棒性。
在训练阶段,第一帧使用真值送入Encoder,网络预测出第二帧的预测mask,然后将损失反向传播;使用网络预测的第二帧mask送入Encoder中,以推断第三帧上的mask。
DAVIS 2016:
STM :6.7 Fps
RANet :8.3 Fps
GC :25.0 Fps
并且STM的时间复杂度随着视频序列长度而线性增加。
DAVIS 2017:
Youtube-VOS:
GC 全局上下文特征的可视化:
展示了global context key的两个通道的可视化。
The essence is to learn an invariant representation that accounts for the variation of object appearance across frames.
半监督VOS的实质就是通过第一帧及其mask,学习一个不变的表示,该表示形式说明对象外观在整个帧中的变化。