论文笔记 UnLoc A Unified Framework for Video Localization Tasks

本文最后更新于:2023年11月6日 晚上

论文笔记 UnLoc: A Unified Framework for Video Localization Tasks

论文链接:UnLoc: A Unified Framework for Video Localization Tasks (arxiv.org)

代码链接:google-research/scenic 一个JAX库,非PyTorch,包含许多工作,但是目前还没有找到这篇论文的代码

Google的一篇ICCV 2023论文,除开共同一作的二作是VGG组的Arsha Nagrani。这篇论文提出了一个通用的单阶段的方法UnLoc,来做多种视频定位任务,包括片段检索、动作定位、动作分割,并且利用了CLIP的视觉和文本侧。

方法

三个任务

  1. Video Temporal Action Localization(TAL):给定某个动作标签,在视频中定位这个动作发生的时间段。
  2. Video Moment Retrieval(MR):给定任意自然语言,在视频中定位这句话描述的时间段。
  3. Video Action Segmantation(AS):为视频的每一帧分配一个某个动作标签或背景。

MR是TAL的open-vocab版本,AS则是密集预测的版本。

网络架构

上图是UnLoc的整体架构,视频的输入帧使用CLIP得到Frame级别的Token,同时文本(或者被prompt的标签)使用CLIP也得到Token,两者拼接在一起,送入Transformer Encoder进行模态融合。融合后特征通过卷积形成特征金字塔,然后送入Head,得到每一个Token与文本的相关性分数以及位置偏移量。下面具体介绍其中的细节。

其实从视频/文本到融合模块结束都没什么好讲的,都是常规操作。在融合模块出来,这里使用了不同stride的卷积来得到不同尺度的特征,并且卷积操作只针对Frame Tokens。这一步可能就会得到i=1LN/2i1\sum^L_{i=1}N/2^{i-1}个Token,其中NN是帧数量。

之后,每一个Token送入Head,Head则是比较轻量的卷积模块,其中一个Head比较常规,用Sigmoid激活得到Relevancy score,表示当前token与文本的相似度,相似度越高,就说明当前帧属于需要的某个动作。

另一个Head则是参照ECCV 2022的ActionFormer,假如某个token被认为属于文本描述的行为,那么随之而来还会预测两个由ReLU激活的Δt^1,Δt^2\Delta \hat{t}_1,\Delta \hat{t}_2。而该行为的区间定义为[tΔt^1,t+Δt^2][t-\Delta \hat{t}_1,t+\Delta \hat{t}_2]

也就是说,假如一个视频10s,以1fps编码,在5~8秒进行了投篮的动作,那么第6秒/帧的视频token应该有较高的relevancy score,并预测出Δt^1=1,Δt^2=2\Delta \hat{t}_1=1,\Delta \hat{t}_2=2,第8秒的token则是Δt^1=3,Δt^2=0\Delta \hat{t}_1=3,\Delta \hat{t}_2=0,第1秒的token则不预测Δt^\Delta \hat{\boldsymbol{t}}

Loss也包含了分类和回归两部分:

由于视频中positive的部分是远远少于negative的部分,所以分类使用了Focal Loss来应对imbalance。

Δt^\Delta \hat{\boldsymbol{t}}则使用回归损失,尝试了L1、IoU、DIoU、L1+IoU。其在目标检测计算如下。实际上就是让IoU越大,并让一个距离比越小。距离比是两个区间中心点的距离比上并集的两侧距离(但是后面发现L1好……)。

DIoU

不同尺度进行回归时会跟随ActionFormer,置顶不同的Regression Range,这个概念两篇论文都没怎么详细说。对于最细粒度的长度为N的尺度,使用[0,4][0,4]是regression range,对于N/2N/2的使用[4,8][4,8]……,根据我的理解,这应该是限制不同尺度关注不同长度的事件,最细粒度的尺度的range比较小,关注短时的,而粗粒度尺度的range比较大,关注长时的。(这一段存疑)

预测的时候使用SoftNMS应对不同尺度带来的可能重叠的区间。

实验

搭建了UnLoc-B和UnLoc-L,融合模块都是6层Transformer,只是维度从512/2048变到了768/3072。特征金字塔搭建了4层,而不是图示的3层。

先使用K700或者K400进行了预训练,所有视频224分辨率,TAL和MR使用128帧,AS则2fps上限512帧。

没有什么特殊的说明,就是L1效果好、ViTDet那种特征金字塔效果好、Head用3层卷积好。实验只在一个数据集(ActivityNet)上的一个任务(时序动作定位)做了。

使用不对称的Encoder会影响结果,这个也是意料之中的。

文本Token也是全部cat更好,而不是只是用CLS。

对图像进行微调在TAL和COIN上有提升,在MR上下降。对文本编码器进行微调则在MR和COIN上提升,在TAL上有升有降。这个其实的不出什么结论。而另一篇论文LiT([论文笔记 LiT Zero-Shot Transfer with Locked-image text Tuning - Kamino’s Blog](https://blog.kamino.link/2023/06/24/LiT Zero-Shot Transfer with Locked-image text Tuning论文笔记/))认为冻结图像编码器,只调文本更好。

与SOTA的比较没什么好看的,就不放在这里了。

结论

这篇论文让我觉得比较新奇的点其实不在于UnLoc,而是它借鉴较多的ActionFormer,包括多尺度的使用和结果的预测方式。这篇论文的核心创新就是把三个任务统一了,有了一个统一的框架,并且效果刷到了最好,方法也比较简洁。

有了统一框架,接下来当然就是大规模训练了,这也是作者在结尾说的Future work。