Abstract
本文以CLIP模型为基础,通过迁移CLIP模型学到的知识,提出了CLIP4Clip(CLIP For video Clip retrieval)模型用于视频文本检索任务。主要研究以下问题:
- 图像特征是否足以用于视频检索中
- 对预训练好的CLIP进行训练会怎样影响检索结果
- 建模视频帧之间时间关系的实质是什么
- 视频检索任务中超参数的敏感性问题
Introduction
根据输入的不同,可以将视频检索任务分为两类(以原始视频作为输入或者以视频特征作为输入)。前者需要训练一个特征提取器,后者使用训练好的特征提取模型。
本文基于CLIP模型提出了一个CLIP4Clip模型用于视频检索。设计了一个相似度计算模块来验证三种相似度计算方式的效果(无参类型,序列类型,密集类型)。
文章贡献如下:
1.基于CLIP调查了三种相似度计算方法
2.在另一个大数据集上对CLIP做了训练来学习一个更好的检索空间
实验得出的结论如下:
(1) 一张图像对于视频检索是远远不够的
(2) 对CLIP在另一个数据集上进行训练对性能的改善是很重要的
(3)对于小数据集,无参类型(平均池化)的相似度计算方式更好,对于大数据集,使用更多的参数(自注意力等)来计算相似度更好。
(4)研究了超参数的设置
Framework
文章框架如下图,包含文本编码器、视频编码器和相似度计算模块。
视频编码器
这里使用预训练的CLIP(ViT-B/32)作为视频编码器,对于视频帧序列 v i = { v i 1 , v i 2 , … , v i ∣ v i ∣ } v_i=\{v_i^1,v_i^2,\dots,v_i^{\vert v_i\vert}\} vi={vi1,vi2,…,vi∣vi∣},每帧产生一个特征表示 Z i = { z i 1 , z i 2 , … , z i ∣ v i ∣ } Z_i=\{z_i^1,z_i^2,\dots,z_i^{\vert v_i\vert}\} Zi={zi1,zi2,…,zi∣vi∣}。
这里还提出了另外一种Patch提取方式,如下图所示,使用3D卷积对视频提取出一个个patch,这样做的好处是利用到了时间信息。
文本编码器
使用CLIP的文本编码器(transformer结构,12层,8个头,512维),对一个文本 t j ∈ T t_j\in \Tau tj∈T,最终生成特征表示 w j w_j wj。
相似度计算
在得到
Z
i
=
{
z
i
1
,
z
i
2
,
…
,
z
i
∣
v
i
∣
}
Z_i=\{z_i^1,z_i^2,\dots,z_i^{\vert v_i\vert}\}
Zi={zi1,zi2,…,zi∣vi∣},和
w
j
w_j
wj后,最关键的就是计算相似度了,这里将相似度计算机制分为三类,无参方法(如平均池化,融合视频特征不需要参数),序列类型和密集类型。
无参类型:使用平均池化聚合出一个视频特征
z
i
^
=
m
e
a
n
−
p
o
o
l
i
n
g
(
z
i
1
,
z
i
2
,
…
,
z
i
∣
v
i
∣
)
\hat{z_i}=\rm{mean-pooling}(z_i^1,z_i^2,\dots,z_i^{\vert v_i\vert})
zi^=mean−pooling(zi1,zi2,…,zi∣vi∣)。然后计算相似度如下:
s
(
v
i
,
t
j
)
=
w
j
T
z
i
^
∥
w
j
∥
∥
z
i
^
∥
s(v_i,t_j)=\frac{w_j^T \hat{z_i}}{\Vert w_j\Vert \Vert \hat{z_i}\Vert}
s(vi,tj)=∥wj∥∥zi^∥wjTzi^
序列类型:无参方法忽略了各帧之间的时间关系,这里使用LSTM或者transformer来将得到的各帧聚合起来 Z i ~ = L S T M ( Z i ) \tilde{Z_i}=\rm{LSTM}(Z_i) Zi~=LSTM(Zi)或者 Z i ~ = T r a n s f o r m e r − E n c ( Z i + P ) \tilde{Z_i}=\rm{Transformer-Enc}(Z_i+P) Zi~=Transformer−Enc(Zi+P)(P是位置编码)。之后使用聚合的信息计算相似度即可。
密集类型:这里将
Z
i
=
{
z
i
1
,
z
i
2
,
…
,
z
i
∣
v
i
∣
}
Z_i=\{z_i^1,z_i^2,\dots,z_i^{\vert v_i\vert}\}
Zi={zi1,zi2,…,zi∣vi∣}和
w
j
w_j
wj作为输入,使用一个Transformer来得到融合特征
U
i
~
\tilde{U_i}
Ui~。
U
i
=
{
z
i
1
,
z
i
2
,
…
,
z
i
∣
v
i
∣
,
w
j
}
U_i=\{z_i^1,z_i^2,\dots,z_i^{\vert v_i\vert},w_j\}
Ui={zi1,zi2,…,zi∣vi∣,wj}
U
i
~
=
T
r
a
n
s
f
o
r
m
e
r
−
E
n
c
(
U
i
+
P
+
T
)
\tilde{U_i}=\rm{Transformer-Enc}(U_i+P+T)
Ui~=Transformer−Enc(Ui+P+T)
P是位置偏移,T是嵌入类型(文本或者视频)。使用
U
i
~
[
0
:
]
\rm\tilde{U_i}[0:]
Ui~[0:]作为输出,并放入两个FC得到相似度。
s
(
v
i
,
t
j
)
=
F
C
(
R
E
L
U
(
F
C
(
U
i
~
[
0
:
]
)
)
)
\rm{s(v_i,t_j)=FC(RELU(FC(\tilde{U_i}[0:])))}
s(vi,tj)=FC(RELU(FC(Ui~[0:])))
训练策略
损失函数:和CLIP相似,这里也是用交叉熵损失。
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
帧采样:使用统一采样而不是随机采样,每秒采样1帧。
预训练:为了进一步将CLIP的知识迁移到视频上,又在HowTo100M上进行了预训练。
Experiments
在五个数据集上进行了测试,MSR-VTT,MSVD,LSMDC,ActivityNet,,DiDeMo,发现小数据集上无参数计算方式最好。作者认为这是由于小数据集无法将参数训练好,反而破坏了预训练模型。
MSR-VTT
MSVD
LSMDC
ActivityNet
DiDeMo
2D和3D patch的对比:实验发现2D patch取得了更好的结果,作者认为这是由于CLIP是在图像-文本对上进行的预训练,当使用3DPatch时,难以初始化一个表现优秀的3D Linear,文中使用2D linear来初始化3D Linear,这很难学到时间信息。