来源:CVPR 2022
Abstract
视频文本检索中,视频通常包含一个更宽范围的信息,而文本仅仅与视频中一个子区域(及文本描述至于视频中的几帧相关)。因此,对于一个文本,模型应该能够关注到与其最相关的几帧,做一个相关比较。现存大多数方法在聚合视频特征时不考虑文本(平均池化或者自注意力),这可能导致最终的视频特征含有文本描述中不存在的信息,导致不对齐。作者提出了一个跨膜态注意力机制(X-pool),核心机制是让一个文本和与其最相似的视频帧做一个点积运算。然后使用文本对各帧的注意力权重生成一个视频表示。
Introduction
视频所表达的信息要多于文本信息,之前的方法在聚合视频信息是,采用平均池化或者自注意力机制,这会导致将与文本描述无关的视频信息也编码出来,减低检索效率。本文提出了X-poll(一种跨膜态注意力机制)方法来聚合视频信息,与之前方法不同的是,X-pool允许模型关注那些与文本语义最相关的视频帧,并用这些帧生成视频表示特征。
文章贡献如下:
1.作者证明了使用以文本为条件的视频帧聚合方法优于文本无关的聚合方法。
2.提出了一个跨膜态注意力模型来关注与文本相关的视频帧,在多个数据集上取得了最优结果。
3.在一些场景差异大的数据集上证明X-pool方法的鲁棒性,相比之下,原来方法对场景变化更加敏感。
Problem Statement
视频文本检索的目标是建立一个视频与文本之间的相似度计算函数 s ( t , v ) s(t,v) s(t,v),它赋予相关的文本与视频高相似度,不相关的赋予低相似度。这里定义两个任务 t 2 v t2v t2v, v 2 t v2t v2t,前者使用文本检索视频,后者使用视频检索文本。
模型输入是视频 v v v和文本 t t t, v ∈ R F × 3 × H × W v\in R^{F\times 3\times H\times W} v∈RF×3×H×W ,代表采样的 F F F帧图像, t t t是文本token序列。
Method
Expanding Joint Text-Image Models
作者使用CLIP(一个强大的图像文本处理模型)作为骨架,为了将CLIP从图像文本检索中扩展到视频文本检索,作者首先将文本和单个视频帧嵌入到其联合潜在空间,然后将帧池化,获得视频嵌入特征。
具体而言,输入一个文本
t
t
t和一个视频帧
v
f
v^f
vf ,CLIP输出一个文本特征 和一个帧特征 。公式如下
c
t
=
ψ
(
t
)
c_t=\psi(t)
ct=ψ(t)
c
v
f
=
ϕ
(
v
f
)
c_v^f=\phi(v^f)
cvf=ϕ(vf)
ψ \psi ψ是CLIP的文本编码器, ϕ \phi ϕ是CLIP的图像编码器。对于视频 v v v,可以获得每帧的特征 C v = [ c v 1 , c v 2 , … , c v f ] ∈ R F × D C_v=[c_v^1,c_v^2,\dots,c_v^f]\in R^{F\times D} Cv=[cv1,cv2,…,cvf]∈RF×D
由于需要计算文本和视频间的相似度,需要得到视频嵌入特征
z
v
∈
R
D
z_v\in R^D
zv∈RD 和文本嵌入特征
z
t
∈
R
D
z_t\in R^D
zt∈RD 。文本嵌入可以直接使用CLIP的文本编码器获取,视频嵌入通过使用聚合函数
ρ
\rho
ρ来聚合
C
v
C_v
Cv中每一个帧特征得到。公式如下:
z
t
=
c
t
z_t=c_t
zt=ct
z
v
=
ρ
(
C
v
)
z_v=\rho (C_v)
zv=ρ(Cv)
视频帧特征聚合
现在大部分的工作中,聚合函数 ρ \rho ρ并不考虑输入的文本,而是通过平均池化、自注意力、LSTM等方法直接聚合整个视频特征。这种方法最大的缺点就是会编码文本中未显示的视频信息,导致检索能力的退化。
为了解决这一问题,作者提出了以文本为条件的池化方法。文中提出一个聚合函数来聚合与文本相似度较高的那些视频帧。根据文本描述
t
t
t,模型能够提取与
t
t
t最相关的视频特征,忽略掉噪声与误导信息。将聚合的视频特征记为
z
v
∣
t
z_{v|t}
zv∣t ,相似度函数为
s
(
t
,
v
)
s(t,v)
s(t,v),则:
z
v
∣
t
=
π
(
C
v
∣
t
)
z_{v|t}=\pi (C_v|t)
zv∣t=π(Cv∣t)
s
(
t
,
v
)
=
z
t
⋅
z
v
∣
t
∥
z
t
∥
∥
z
v
∣
t
∥
s(t,v)=\frac {z_t\cdot z_{v|t}}{\Vert z_t\Vert \Vert z_{v|t}\Vert }
s(t,v)=∥zt∥∥zv∣t∥zt⋅zv∣t
这里
π
\pi
π是基于文本的视频帧特征聚合方法。
为了证明该方法的效率,作者首先使用
t
o
p
−
k
top-k
top−k聚合函数
π
t
o
p
−
k
\pi_{top-k}
πtop−k聚合相似度最高的
k
k
k帧,忽略掉其它帧。
π
t
o
p
−
k
(
C
v
∣
t
)
=
1
k
∑
f
∈
K
c
v
f
\pi_{top-k}(C_{v}\vert t)=\frac{1}{k}\sum_{f\in K}c_v^f
πtop−k(Cv∣t)=k1f∈K∑cvf
K
=
arg
max
k
∈
{
1
,
…
,
F
}
,
∥
K
∥
=
k
∑
f
∈
K
c
t
⋅
c
v
∣
t
∥
c
t
∥
∥
c
v
∣
t
∥
K=\arg \max \limits_{k\in\{1,\dots,F\},\Vert K\Vert=k}\sum_{f\in K}\frac {c_t\cdot c_{v|t}}{\Vert c_t\Vert \Vert c_{v|t}\Vert }
K=argk∈{1,…,F},∥K∥=kmaxf∈K∑∥ct∥∥cv∣t∥ct⋅cv∣t
实验发现仅仅使用 t o p − k top-k top−k方法就能获得一个很大的改善。
模型介绍
如下图所示,X-pool模型使用CLIP中的文本编码器和图像编码器分别得到文本特征
c
t
∈
R
D
c_t\in R^D
ct∈RD ,图像特征
C
v
∈
R
F
×
D
C_v\in R^{F\times D}
Cv∈RF×D
通过矩阵点乘将文本作为
q
q
q得到
Q
t
∈
R
1
×
D
p
Q_t\in R^{1\times D_p}
Qt∈R1×Dp ,将视频作为k,v得到
K
v
∈
R
F
×
D
p
K_v\in R^{F\times D_p}
Kv∈RF×Dp,
V
v
∈
R
F
×
D
p
V_v\in R^{F\times D_p}
Vv∈RF×Dp,
D
p
D_p
Dp是嵌入维度,公式如下:
Q
t
=
L
N
(
c
t
T
)
W
Q
Q_t=LN(c_t^T)W_Q
Qt=LN(ctT)WQ
K
v
=
L
N
(
C
v
)
W
K
K_v=LN(C_v)W_K
Kv=LN(Cv)WK
V
v
=
L
N
(
C
v
)
W
V
V_v=LN(C_v)W_V
Vv=LN(Cv)WV
L
N
LN
LN为层归一化,
W
Q
,
W
K
,
W
V
∈
R
D
×
D
p
W_Q,W_K,W_V\in R^{D\times D_p}
WQ,WK,WV∈RD×Dp是三个映射矩阵。通过点积得到文本对每个视频帧的注意力为:
A
t
t
e
n
t
i
o
n
(
Q
t
,
K
v
,
V
v
)
=
s
o
f
t
m
a
x
(
Q
t
K
v
T
D
p
)
V
v
Attention(Q_t,K_v,V_v)=softmax(\frac{Q_t K_v^T}{\sqrt{D_p}})V_v
Attention(Qt,Kv,Vv)=softmax(DpQtKvT)Vv
最终的基于文本的视频编码为:
r
v
∣
t
=
L
N
(
A
t
t
e
n
t
i
o
n
(
Q
t
,
K
v
,
V
v
)
W
O
)
r_{v\vert t}=LN(Attention(Q_t,K_v,V_v)W_O)
rv∣t=LN(Attention(Qt,Kv,Vv)WO)
其中
W
O
∈
R
D
p
×
D
W_O\in R^{D_p\times D}
WO∈RDp×D是一个映射矩阵,最后在加入残差连接得到
π
X
−
P
o
l
l
l
(
C
v
∣
t
)
=
L
N
(
F
C
(
r
v
∣
t
)
+
r
v
∣
t
)
\pi_{X-Polll}(C_v\vert t)=LN(FC(r_{v\vert t})+r_{v\vert t})
πX−Polll(Cv∣t)=LN(FC(rv∣t)+rv∣t)
损失函数
用于训练的数据集
D
D
D包含
N
N
N个文本和视频对
{
(
t
i
,
v
i
)
}
i
=
1
N
\{(t_i,v_i)\}_{i=1}^N
{(ti,vi)}i=1N,每一对都是相匹配的。使用交叉熵损失,将匹配的文本视频对作为正样本,不匹配的作为负样本。具体来说,损失函数如下:
L
t
2
v
=
−
1
B
∑
i
=
1
B
log
e
s
(
t
i
,
v
i
)
⋅
λ
∑
j
=
1
B
e
s
(
t
i
,
v
j
)
⋅
λ
L_{t2v}=-\frac{1}{B}\sum_{i=1}^{B}\log \frac{e^{s(t_i,v_i)\cdot \lambda}}{\sum_{j=1}^{B}e^{s(t_i,v_j)\cdot \lambda}}
Lt2v=−B1i=1∑Blog∑j=1Bes(ti,vj)⋅λes(ti,vi)⋅λ
L
t
2
v
=
−
1
B
∑
i
=
1
B
log
e
s
(
t
i
,
v
i
)
⋅
λ
∑
j
=
1
B
e
s
(
t
j
,
v
i
)
⋅
λ
L_{t2v}=-\frac{1}{B}\sum_{i=1}^{B}\log \frac{e^{s(t_i,v_i)\cdot \lambda}}{\sum_{j=1}^{B}e^{s(t_j,v_i)\cdot \lambda}}
Lt2v=−B1i=1∑Blog∑j=1Bes(tj,vi)⋅λes(ti,vi)⋅λ
L
=
L
t
2
v
+
L
t
2
v
L=L_{t2v}+L_{t2v}
L=Lt2v+Lt2v
Experiments
数据集
MSR-VTT:包括10000个视频,每个视频有20句文本描述(每句话可能描述视频的不同区域)。视频长度在20到32秒之间,这里使用两种划分方式的训练集(7k-train,9k-train),测试机包含1k个视频。
MSVD:包含120k个描述语句,1970个视频,时长在1秒到62秒之间。一个视频可能有多个语句描述(每句话描述不同区域)。训练、验证、测试集分别有1200,100,670个视频。
LSMDC包含118081个视频,每个视频有一句话描述,视频长度在2到30秒。101079个视频用于训练,7408个用于验证,1000个用于测试。
从上面的数据集中可以发现MSR-VTT和MSVD中一个视频都对应多个语句,每个语句可能描述视频的不同区域,这与作者提出的X-pool(让语句重点关注视频中的某个区域)方法相符合。
实现细节
作者使用CLIP的ViT-B/32中的图像编码器作为 ϕ \phi ϕ,文本编码器为 ψ \psi ψ ,利用CLIP的预训练权重来初始化所有参数。设置query,key,value的映射维度为 D p = 512 D_p=512 Dp=512来匹配CLIP的输出维度,参数 λ \lambda λ由预训练的CLIP模型得到,使用一个线性层来得到输出维度为 D = 512 D=512 D=512 。Batchsize设为32,预训练权重的学习率为1e-6,其它参数为1e-5。使用AdamW优化器训练5个epoch,权重衰减为0.2。学习率的衰减使用余弦衰减方法。每个视频统一抽取12帧,每帧图像放缩为224x224。
实验结果
作者在三个数据集上进行了评估,并取得了最好的结果
top-k结果
作者也验证了只取相似度最高的前k帧做平均池化的结果,如下表所示
可以发现仅仅使用top-k方法就能获得很好的结果,针对k的取值,作者也做了实验,发现当k=3时结果最佳。
鲁棒性测试
由于现在数据集中视频很短,场景变化不明显,作者构建了一个新的MSR-VTT测试集(将多个不同场景的视频加入到原始视频中),在该测试集上的结果如下
可以看到,随着场景数量的增加,X-pool方法的MdR上升的较少,鲁棒性更强。
注意力可视化结果
对一个视频的不同帧,其注意力权重分配如下,可以发现,与描述语句相符的帧得到的注意力明显更多,证明了提出方法的有效性。
总结
这篇文章作者主要使用一个跨膜态注意力来根据文本信息聚合视频特定帧的特征,对不同帧赋予不同的注意力,已取得更好的结果。整体看来,作者提出的网络模型较为简单(直接使用了CLIP的文本编码器和图像编码器),跨膜态注意力的使用很有借鉴意义。不过 X − P o o l X-Pool X−Pool模型并未考虑视频中各帧的时间关系,这可能会导致性能的下降。