序言
本周的论文主要选自ICCV2023,旨在进行一些相关领域内最前沿知识的调研。
跨模态视频文本检索——Unified Coarse-to-Fine Alignment for Video-Text Retrieval
总述
视频文本检索杠杆的典型方法在视觉和文本信息之间进行粗粒度或细粒度的对齐。然而,根据文本查询检索正确的视频通常具有挑战性,因为它需要对高级(场景)和低级(对象)视觉线索以及它们如何延迟到文本查询进行推理的能力。为此,我们提出了一个统一的粗到细对齐模型,称为UCOFIA。特定地,我们的模型捕获了不同粒度水平的跨模态相似性信息。为了减轻不相关的视觉线索的影响,我们还应用了交互相似性聚合模块(ISA),以考虑不同视觉特征的重要性,同时聚合跨模态相似性,以获得每个粒度的相似性评分。最后,在汇总之前,我们应用Sinkhorn-Knopp 算法将每个级别的相似性正常化,缓解不同级别的过度和代表性不足问题。通过共同考虑不同粒度的跨模态相似性,UCOFIA允许多颗粒对齐的有效统一。从本质上讲,UCOFIA在多个视频文本检索基准点上优于之前基于CLIP的先进方法,在MSR-VTT、Activity-Net和DiDeMo上的文本到视频检索R@1分别提高了2.4%、1.4%和1.3%。
基本任务介绍&领域研究
跨模态的视频文本检索,主要的目标是进行从文本内容去进行视频检索(一般是text-to-video而不是video-to-text)。在视频文本检索中最重要的任务是如何进行对齐。最标准的做法是将视频和文本的特征通过编码器提取后直接进行对齐。近年来,有了大规模的跨模态与训练模型CLIP,有一批方法基于CLIP来做这类任务。有方法提出了时间融合模块来聚合不同视频帧的特征,然后对视频和文本特征进行跨模态对齐。此后,还有基于视频帧和文本特征的对齐以及更详细的基于视频帧和词特征的更细粒度的对齐。
Motivation & Contribution
现有的几个基本的检索方法有几个主要的问题,首先是粗粒度的对齐,会导致视频中较为基本的元素来进行对齐。如图中第一行,只能通过大致信息,检索出“人”和“有许多观众的舞台”,从而导致错误。而细粒度的对齐容易优先对齐最显著的部分,如第二行,对齐了人和麦克风等具体的细节object,但忽略了更多其他信息。所以本文提出,要结合粗细粒度进行对齐,才能有更好的效果
基于此,作者团队提出了UCOFIA,基本的思路是先对进行粗粒度的对齐(整个视频和语句的对齐)。然后进行一个从视频帧到查询句子的对齐。最后进行细粒度的对video patch和检索词的对齐(patch-word)
但直接引入多粒度的信息也会给跨模态的对齐带来很多无关信息(这是显然的),比如视频中的一些帧可能和query完全无关,而一个帧中的一些patch也有可能只对应背景信息,这些不相关信息会影响对应。于是基于此提出了一个叫做交互式相似性聚合模块(ISA)的方法,来综合考虑不同视觉信息的重要性,每个粒度获得一个相似度评分。具体的,对于从帧到句子的对齐,ISA方法联合考虑跨模态相似性和不同帧之间特征的交流。对于不考虑时间线索的传统方法,ISA方法能够更好的捕捉重要的信息。此外,ISA模块是一种通用的相似性聚合方法,无论在任何粒度下,此后作者将其拓展成了双向ISA模块用来做patch-word的对齐。
之后获取到了每层对齐的相似分后,可以加和成为一个最终的检索相似度。然而,这样计算的相似评分在不同的视频上是非常不平衡的,纠正这种不平衡可以提高性能。具体的,有时一个特定的视频和检索相似性加和就是特别高,比其他视频高得多,这很明显会影响相似性(如果不是仅仅的对多个粒度去进行sum up而是在计算前就基于分布进行纠正,是否比加完后用算法进行纠正会更好呢?)。为了解决这个问题,采用了Sinkhorn-Knopp算法,来对相似性评分进行一个正规化,经过正则化后所有的视频被选择的概率均等。
基本方法:
基本方法分为四个主要成份:
- 视频文本编码器;
- 粗粒度到细粒度到对齐模块;
- 交互的相似性聚合模块;
- 基于Sinkhorn算法的多粒度统一模块;
算法过程如下:首先,编码器提取多粒度特征;接着把多力度特征加入到从粗粒度到细粒度的对齐模块中(计算出不同层级的跨模态相似性)然后,ISA模块进行相似向量(矩阵)的融合,将其转化为相似评分。
1. 特征提取
首先先给出如下的定义。查询的文本数据为
T
T
T,为查询的文本预添加一个token:[EOS]。对于文本数据集,采用CLIP来获得输出特征:
w
=
F
t
(
T
)
∈
R
L
t
×
C
w=\mathcal F_t(T)\in\mathbb R^{L_t\times C}
w=Ft(T)∈RLt×C 。其中
L
t
L_t
Lt是词序列的长度,
C
C
C是词特征的维度,同样的,EOS token也有
C
C
C的维度。
同样的,也用CLIP对视觉信息进行编码。输入的视频用视频帧来表示:
V
=
[
F
1
,
F
2
,
…
,
F
N
]
V=[F_1,F_2,\dots,F_N]
V=[F1,F2,…,FN]。由第n个帧,又可以分成若干的patch,同样加一个[CLS] token,然后用CLIP对每个patch进行编码(注意,相当于一个视频会被编码为一个三维数据,而图像编码为二维数据,但是其中最后一维都是
C
C
C):
p
n
=
F
v
(
F
n
)
∈
R
M
×
C
p_n=\mathcal F_v(F_n)\in\mathbb R^{M\times C}
pn=Fv(Fn)∈RM×C M是图像中patch的数量,编码到同样的维度。然后将[CLS]表征从每个frame中抽取出来来获得一个专门基于视频帧的特征
f
=
[
f
1
,
f
2
,
…
,
f
N
]
,
f
∈
R
N
×
C
f=[f_1,f_2,\dots,f_N],f\in\mathbb R^{N\times C}
f=[f1,f2,…,fN],f∈RN×C。因为这些frame是被单独的喂给ViT的(降低训练成本),所以没办法学习时序特征,为了能学到时间信息,采用了token shift的方法,spatial token features根据相邻帧的内容进行前后的滑动,在最后两个transformer block里面对时序内容进行学习。
这部分的代码会参考TS2_NET
2. 跨粒度对齐
这部分分为几个步骤,通过从多粒度的视觉和语言的输入来解决单一粒度学习导致的学习不充分问题。
- 首先采用视频和整句话的对齐来获得一个整体的相似评分
- 然后采用一个从视频帧到句子的对齐来捕获每一个帧和句子的相似性,来获得一个frame-sentence的相似向量表示
- 最后进行patch到word的对齐,获得一个patch-word的相似矩阵表示。
以下是具体的实现方法:
Video-sentence:采用一个时序编码齐来聚合一整组的
f
f
f来获取到视频的特征
v
v
v,然后将其和句子特征
s
s
s进行余弦相似度的计算,得到一个相似得分
s
V
S
s_{VS}
sVS
Frame-sentence:采用单个的
f
f
f和
s
s
s算余弦相似度,然后得到相似向量
c
F
S
∈
R
N
\textbf c_{FS}\in\mathbb R^N
cFS∈RN
Patch-word:高层次的特征没办法传达详细的跨模态信息,所以要用底层的特征来进行更好的学习。然而patch是冗杂的,所以不能直接对patch和文字去进行对齐。于是本文提出了一个基于MLP的一个patch选择模块,来选择topK的patches。有
p
^
=
H
(
p
,
f
,
v
)
∈
R
L
v
×
C
\hat p=\mathcal H(p,f,v)\in\mathbb R^{L_v\times C}
p^=H(p,f,v)∈RLv×C,其中
L
v
=
N
∗
K
L_v=N*K
Lv=N∗K。最后,通过计算
p
^
\hat p
p^的所有列向量和词特征
w
∈
R
L
t
×
C
w\in \mathbb R^{L_t\times C}
w∈RLt×C可计算出来一个从patch到词的相似性矩阵
C
P
W
∈
R
L
v
×
L
t
\textbf C_{PW}\in\mathbb R^{L_v\times L_t}
CPW∈RLv×Lt
交互式相似性聚合ISA
ISA方法将跨模态的相似向量和矩阵聚合到一起。由于视觉特征的高冗杂性,相似向量中的无关信息会影响跨模态相关性的学习。现有基于多粒度聚合方法(ts2net)用了基于softmax的方法,然而softmax权重会无法捕获输入特征间的信息。比如frame到sentence的粗粒度对齐中,softmax权重就会忽视frames间的时序信息。基于此问题提出了ISA解决方案。
ISA的基本思路是,首先在计算不同相关性的权重时,联合考虑跨模态相关性与不同特征之间的互动:先计算一个cross modal relevance(用一个softmax层),然后用一个线性层
T
i
\mathcal T_i
Ti来激励特征间的互动。最后,再用一次softmax来对整体进行一个归一化,得到一个frame-sentence的相似向量。综合下来有:
ISA可以在不同的特征粒度,不同的维度上处理相似向量,于是为了处理二维的相似矩阵,对ISA进行了扩展:
这是双向ISA的基本框架。patch-level就是在横向进行ISA,而word-level是在纵向进行ISA。
这里我有几个问题
首先,这两种ISA,是否是共享参数的?
其次,为什么需要做成two-stream的结构?
最后,patch-word的对齐会不会太复杂了?所需的参数和训练代价似乎很大(受特征维度影响很大)
最直接的思路是直接对matrix做拉直,但是这样对于不同模态进行交互是很难的,所以有一个替代的思路是将行列分开处理,就如上图所示。至于为什么做two-stream的,作者在后面专门做了相关实验。最后可以用公式化表示如下:
不同粒度相似性统一
在motivation提到过这个框架下直接计算的相似性评分是不平衡的,所以需要重新来构建相似矩阵。一个基本想法是利用双softmax操作,但是在整个数据集上做是不现实的。更现实的一种做法,是每次假设只有一个query,然后搜索最好的候选目标。在这种情况下,因为知识一个一对一的检索,没办法用双softmax来处理。于是采用了Sinkhorn-Knopp算法来对不平衡进行。
这里略为讲一下Sinkhorn-Knopp算法如何用在vtt的任务中。首先假设有G个测试数据和J个查询,算法在每个层级的相似评分上计算一个测试视频的偏置
α
∈
R
G
\alpha\in\mathbb R^G
α∈RG,以及查询文本的偏置
β
∈
R
J
\beta\in\mathbb R^J
β∈RJ,然后基于偏置和原本的相似矩阵可以给出一个新的修正相似性的计算法(文章这里的命名有点奇怪,直接贴原文了):
图像字幕/图像描述:With a Little Help from your own Past: Prototypical Memory Networks for Image Captioning
这个是第二篇文章(狗edge没保存给我删了吐了重写一遍)
abstract
像许多涉及视觉和语言的任务一样,图像字幕目前依赖于基于 Transformer 的体系结构来提取图像中的语义并将其转换为语言上的连贯描述。尽管基于注意力的方法有所成功,但注意力算子只考虑当前输入样本预测的加权总和,因此忽略了其他样本联合观察可能产生的相关语义信息。本文通过一个原型记忆模型,设计了一个能够在处理其他训练样本时对所获得的激活进行注意的网络。我们的记忆通过定义原型向量来模拟过去键和值的分布,原型向量既有区分性又紧凑。
Motivation & Contribution
当前大部分的图像描述方法,都是基于Transformer和Attention机制的,因为Transformer对于图像描述任务有着天然的优势(包括其encoder-decoder结构和cross-Attention机制)。
注意层的一个关键特性是输出是作为输入的线性投影的加权组合来计算的(输入经过权重变成QKV进行组合运算)。虽然这为视觉理解和序列生成提供了一个理想的上下文,但它也为注入无法从当前输入样本直接推断出的相关信息敞开了大门。
对基本的基于Transformer的模型结构的改进工作也有不少,Meshed-Memory这篇工作就通过添加一个可学习的向量来整合先验知识。这种方法虽然取得了效果,但是仅仅是提取出了训练集整体的关键信息,而不是真正的扮演了记忆力的角色。
有点抽象?可以看看作者的例子:
a是传统的标准注意力机制的Captioner
b是加了可学习向量的Captioner
c是本文提出的基于原型的记忆力网络
相关的工作
首先是有关Image Captioning,早期方法都是RNN/LSTM+CNN的encoder-decoder结构(week1也有讲)。之后随着注意力机制的提出,更多的架构采用Transformer来进行特征提取,在一些情况下,为了提高性能,还会对特征提取骨干网络进行微调。近年还有一大批方法利用CLIP等预训练模型来加入到训练中。
而有关外部记忆的方法,更广泛的应用在Transformer为主干的NLP任务中。在视觉语言模型中,也有一些工作成功将记忆力机制引入到图像描述,视觉关系分辨和故事生成等。
但是本文的目标和其他现有的方法是不一样的,本文利用其他训练样本作为额外知识来源,而不是直接对原始数据进行训练;此外本文提出了一个压缩方法,将额外信息直接存储到网络中。
方法
序言:Memory-augmented Attention
本身的attention方法(无论是self-attention还是cross-attention)都是在输入数据本身上去做的。于是有了基于记忆力机制的attention,不仅仅基于input数据,还有memory-specific的特征值:
其中
M
K
,
M
V
\mathcal M_K, \mathcal M_V
MK,MV是memory keys和memory values。此前相关的工作将这两个memory值当作可学习的参数来进行直接优化。但是这些方法都是将Memory当作全局信息来进行训练,但是忽略了具体的训练项目。
Memories as banks of past activations
本方法的设计更符合原教旨主义的“记忆力”,在处理相似样本时,会“想起来”原来处理过的样本。
和以往的方法(将memory机制的内容放在Transformer encoder中)不同的,memory在这个工作中放在了encoder-decoder结构种的核心位置,在每个self-attention层中都有memory结构。本文提出了两个memory bank
B
K
,
B
V
\mathcal B_K,\mathcal B_V
BK,BV,能够存储总共最多T次迭代内的历史训练样本所产生的keys和values,有:
然而直接这么将最近的时间窗口内的kv进行存储会导致内存消耗很大。所以本文提出了一个压缩的方法来存储,即prototypical memory vectors,基于聚类中心的记忆力向量。
用kmeans聚类方法可以聚类有
基于此可以计算出Value的memory
其中
t
o
p
−
k
(
M
K
i
)
top-k(\mathcal M_K^i)
top−k(MKi)是和
M
K
i
\mathcal M_K^i
MKi最接近的k个(k,v)对。
这里作者对这个公式的提出进行了一些推理:
然后按照如下的步骤进行训练和更新