当前位置: 代码迷 >> 综合 >> See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读
  详细解决方案

See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读

热度:63   发布时间:2023-10-20 18:54:40.0

这是我看的第一篇无监督视频目标分割的方法(UVOS),是一篇CVPR2019,之前一直看的是半监督VOS,因为思路卡壳,在无监督VOS方法中寻求一下灵感。相较于半监督已经开始在保持精度的情况重视推理速度,无监督还是看重精度,不过毕竟UVOS没有给要分割哪一个目标。

官方代码

idea

作者提出一种co-attention,基于一个视频序列全局角度,来提升UVOS的精度。(确实领先目前的很多模型,davis官网的数据)。以往的一些方法,有通过显著性检测得到所要分割的目标,或者通过有限帧之间计算出的光流信息。COSNet则从整个视频序列中考虑哪个目标是需要分割的。在测试阶段,COSNet会综合所有前面的帧得到的信息,推理出当前帧中哪个目标是显著的同时还是经常出现的。Co-attention模块挖掘了视频帧之间丰富的上下文信息。基于co-attention,作者提出了COSNet(co attention Siamese)来从一个全局视角建模UVOS 。现在可能读者还是不能理解这个全局视角是什么,在method部分会解释。

main contribution

  • COSNet采用的训练方式是考虑一个pair,包含相同视频中的任意两帧,所以说极大的增加了数据量,不需要考虑时序关系,依次送入数据,而是可以打乱数据,随机组合。
  • 显示建模帧和帧的联系,不依赖光流
  • 统一的,端到端、可训练的高效网络

Method

这个section,将分为两个部分,一个是training stage的网络是如何工作的。另一部分是模型在test stage的行为。

training stage

See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读

overview of training model

两个帧Fa,FbF_a, F_bFa?,Fb?经过backbone得到两个特征Va,VbV_a, V_bVa?,Vb?,这两个特征经过Co-attention模块,得到两个新的特征Xa,XbX_a, X_bXa?,Xb?,新的特征带有两帧的联系性,这两个特征用于计算loss。从结构框图中,我们可以看出,关键的地方就是在于Co-attention模块。

co-attention

作者提出三种co-attention 变体(variants) 前文提到的 Va,VbV_a, V_bVa?,Vb?默认被reshap为RC×HWR^{C \times HW}RC×HW

Vanilla co-attention

记仿射矩阵S,
S=VbTWVa∈RWH×WHS = V_b^T W V_a \in R^{WH \times WH}S=VbT?WVa?RWH×WH
W∈RC×CW \in R^{C \times C}WRC×C是需要学习的权重矩阵,S的每一个元素代表了两个特征中的两列的相似程度(向量乘积是一个标量)。把W对角化:
W=P?1DPW = P^{-1}D PW=P?1DP
P是可逆矩阵,S可以写成
S=VbTP?1DPVaS = V_b^TP^{-1}DPV_aS=VbT?P?1DPVa?

Symmetric co-attention (对称)

如果W是一个对称矩阵,那么W一定可以正交对角化,
S=VbTPTDPVaS = V_b^TP^TDPV_aS=VbT?PTDPVa?
S=(PVb)TDPVaS = (PV_b)^TDPV_aS=(PVb?)TDPVa?$
P是正交矩阵,先将两个特征投影到正交空间中,然后在计算相似距离,这样子可以消除通道之间的联系,使得特征不是冗余的。

Channel-wise co-attention

如果P是一个单位矩阵I,那么D可以被分解为两个对角矩阵。
S=VbTI?1DIVa=(DaVb)TDbVaS = V_b^T I^{-1}DIV_a = (D_a V_b)^T D_b V_aS=VbT?I?1DIVa?=(Da?Vb?)TDb?Va?
其中D=DaTDbD = D_a^T D_bD=DaT?Db?,D_a,D_b$都是对角矩阵。那么一个对角矩阵和一个矩阵相乘,得到的结果其实是对角矩阵对角线的值乘以对应的列。可以视作增强了某一个通道。和SENet有异曲同工之效果。也是减小了冗余度。

介绍完获得S的三种方式,接下来就介绍作者的co-attention.
See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读
得到S,对应第二行中间的部分,之后就分成两条路。左边得到ScS^cSc,往右边走得到SrS^rSr。这两个S分别反映了两个特征图Va,Vb之间的联系。想想它们的计算方式。接下来计算Za,ZbZ_a,Z_bZa?,Zb?
Za=VbScZ_a = V_b S^cZa?=Vb?Sc
Zb=VaSrZ_b = V_aS^rZb?=Va?Sr

Gated co-attention

作者引入Gated(门限),给学到的Z用同样大小的map reweights,算是空间注意力吧。
See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读
See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读
之后concat 从backbone得到的特征X
See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读
得到的两个重构的X,这个X是带有帧与帧之间的联系这个信息的, 送到各自的seg Head中。
See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读
整个训练方式如上图:

  • 随机从一个视频中选出两帧,经过backbone,经过co-attention,最后concat上backbone的特征,送到一个分割模块中,得到的预测结果用于计算损失函数。
  • 作者提到使用在显著性数据集上预训练一个DeeplabV3,在deeplabV3后面加一个2通道的1x1的卷积作为输出。

test stage

See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读

首先选出N张参考帧集合Fb={Fb1...,Fbn}F_b = \left\{F_{b1}...,F_{bn}\right\}Fb?={ Fb1?...,Fbn?}
和当前帧FaF_aFa?FaF_aFa?FbF_bFb?中的所有参考帧都做成pair,得到一系列的ZaZ_aZa?,然后按照

See More, Know More: Unsupervised Video Object Segmentation with Co-Attention Siamese Networks论文解读
得到携带所有参考帧和当前帧联系的特征Za携带所有参考帧和当前帧联系的特征Z_aZa?,然后concat Va,送到分割网络中。

后处理使用了CRF

  相关解决方案