UBoCo Unsupervised Boundary Contrastive Learning for Generic Event Boundary Detection

本文最后更新于:2024年9月2日 下午

UBoCo:Unsupervised Boundary Contrastive Learning for Generic Event Boundary Detection

论文链接:CVPR 2022 Open Access Repository (thecvf.com)

代码链接:未开源

LLMEPET/llm_epet/model.py at main · fletcherjiang/LLMEPET (github.com)另一篇工作有对这个loss的实现。

CVPR22的一篇文章,介绍了一种无监督的GEBD方法,GEBD任务指的是类别无关的检测视频中发生的事件边界。作者使用一种新颖的RTP算法检测边界,并结合BoCo Loss来训练。

研究故事

作者从对**Temporal Self-similarity Matrix(TSM)**的研究开始,TSM指的是给视频每一帧提特征,得到[T,C]的Tensor,然后计算两两计算相似度,得到[T,T]的矩阵,这个矩阵就是TSM。

如上图所示,作者发现TSM中,事件的边界具有图(b)的这种性质。即在边界帧时,左上角和右下角矩阵由于属于两个不同片段内部,所以互相之间趋于相似,左下角和右上角由于是两个不同片段之间,所以互相趋于不同。这种local diagonal pattern可以被利用。

方法

上图是UBoSo的整体架构,通过ResNet50提特征,然后过一个额外的Encoder来得到帧级别特赠,然后计算TSM,并通过Recursive TSM Parsing(RTP)算法得到伪标签,再得到BoCo Mask,用来计算BoCo Loss。这里可训练参数就是Encoder,然后在ResNet50基础上加的原因是作者认为目前预训练模型更关注前景、目标,缺少对背景的关注。

RTP

RTP是一种递归的、分治的、非机器学习的算法。如图是流程:

  1. 将TSM进行zero-pad以使其能够处理后续的Contrastive kernel
  2. 用Contrastive kernel在TSM的对角线上进行卷积
  3. 选择top-k%的分数,并softmax得到概率分布
  4. 对概率进行采样,得到分解帧以及前后的两个片段TSM矩阵。
  5. 得到的TSM矩阵再继续回到步骤1,直到概率分布比较平(最大值-均值<阈值T2T_2),或者分出来的片段较短(TSM长度<阈值T1T_1

这里用到的Contrastive kernel如图所示,有点像sobel算子,实际上就是一个模板匹配的卷积核,然后比较特殊的是它只需要对对角线进行卷积(此处感觉用pytorch不容易高效实现)。

此外,第一步的zero-pad保证了边界处的激活值会比较小,是不可或缺的一步。

BoCo Loss

BoCo Loss是一种对比学习的loss,其思想是提升正例相似度,降低负例相似度,此时作者带来两个先验:

  1. 对于一帧,往往只在意其local的相似性,因为这个任务并不是需要理解长期语义的任务,所以有(a)
  2. 在已知的片段中,同一个片段内有semantically coherent,所以有(b)

(a)和(b)结合得到(c),即BoCo mask。灰色的区域不计算loss,黄色区域->1,蓝色区域->-1

为了方便,这里的相似度就是用内积衡量的,所以本身取值范围就是[-1,1]

同样为了方便,BoCo Loss最终就是用黄色区域均值-蓝色区域均值计算的。

在监督学习下,不用RTP,直接用预测来得到(b),从而计算监督学习版本的BoCo Loss。

实验

成本很低,一张2080Ti就能进行所有实验,用了基于K400的Kinetics-GEBD数据集评价,

Fig7表示用UBoCo训练不同步数之后的指标变化,结合Tab1看,即使Epoch=0,即只用RTP时,性能也和无监督的PA方法有得一比,而在自监督训练了3.5epoch后,性能达到了比监督还好的SOTA。

在加上监督标签之后,模型还能进一步提升性能。

上图是对RTP算法的一个可视化,绿色是GT标签,绿色区域内都算对。RTP是递归算法,所以可以可视化每一个level的结果。

这个可视化也十分惊艳,体现了使用BoCo和不使用得到的TSM。