1. 两个创新点
a. 使用时序上重叠的视频文本正样本对
b. 检索出来更难的视频负样本对
现有的工作通过从同一视频中采样多个视频片段来对比视频内的文本片段,但作者发现从其他视频中挖掘片段可以提供更具挑战性的负样本对。使用基于检索的采样,获取与正样本对语义上类似的负样本对,来构建训练批次。负样本并不只来自于同一视频中,还从其他不同的视频中挖掘。先检索得到cluster,然后这个cluster作为训练的一个batch。
2. 流程
a. 为了达到token级别的关联,视频clip跟文字分别进入一个frozen的encoder得到token。视频我们用的是S3D后为了轻量化改为X3D(附1),文字用的是BERT,后为了轻量化改为MobileBert(附2)。
b. 将视频、文本送入两个独立的可训练transformer中(附3)。视频先经过一个mlp(对齐维度)再经过一个bert,文本直接进bert,论文中说这两个bert共享权重效果比较好。
c. 平均池化:使用均值池化而不是[CLS]标记来鼓励文本transformer和视频transformer学习标记级别的表征,可能对动作定位和动作分段有益。
3. 其中我们涉及的数据集
3.1 cc3m:具有约300万个图像文本对的数据集,旨在用于视觉和语言预训练
3.2 youcook2:
该数据集由涉及 89 个食谱的 2,000 个 YouTube 视频组成,均为未经剪辑的长视频。视频总时长为 176 小时,单个视频的平均长度为 5.26 分钟。每段视频的拍摄时间都在 10 分钟以内,由个人在自己家里用非固定的摄像机进行拍摄。
每个视频的程序步骤都带有时间界限的标注,并带有英文句子描述。
3.3 webvid:数据集包含了从网络上爬取的 2.5M 个视频-文本对, 视频内容包含了大多数通用领域,数据文本通常是手工撰写的描述,可以与视频图像内容更好地对齐
3.4 HowTo100M :数据集总时长 15 年,平均时长 6.5min, 平均每段视频有 110 对视频文本对。
3.5 QVHighlight: 它包含超过 10,000 个 YouTube 视频,每个视频150s,涵盖了广泛的主题,从生活方式 vlog 视频中的日常活动和旅行到新闻视频中的社会和政治活动。数据集中的每个视频都标注有:(1)人工编写的自由形式的 NL 查询,(2)视频中的相关时刻 w.r.t。查询,以及 (3) 所有查询相关剪辑的五点量表显着性分数。(显著性分数我们没用到)
4. 附录
4.1 S3D(Separable 3D CNN)
1.通过实验证明了 top-heavy model design 更轻量,且性能更优
前者在时空分辨率极高的的前几层使用2D卷积,而在时空分辨率较低的后几层对semantic feature进行3D卷积,故更轻量性能更好。
2. 在保持I3D的Inception Backbone不变情况下,将 3x3x3 卷积核都换成 1x3x3 + 3x1x1 卷积,参数更少且性能更好
3. 在每个 3x1x1 卷积后加入了 Self-attention 模块 (即文中的 spatio-temporal feature gating),进一步提升性能
4.2 Bert
1. 预训练:两个任务Masked Language Model 和 Next Sentence Prediction
采用MLM对双向的Transformers进行预训练,以生成深层的双向语言表征。
1.1 Masked Language Model
首先在每一个训练序列中以15%的概率随机地选中某个token位置用于预测,假如是第i个token被选中,则会被替换成以下三个token之一
1)80%的时候是[MASK]。如,my dog is hairy——>my dog is [MASK]
2)10%的时候是随机的其他token。如,my dog is hairy——>my dog is apple
3)10%的时候是原来的token(保持不变,个人认为是作为2)所对应的负类)。如,my dog is hairy——>my dog is hairy
再用该位置对应的 去预测出原来的token(输入到全连接,然后用softmax输出每个token的概率,最后用交叉熵计算loss)。
1.2 Next Sentence Prediction
简单来说就是预测两个句子是否连在一起。
具体的做法是:对于每一个训练样例,我们在语料库中挑选出句子A和句子B来组成,50%的时候句子B就是句子A的下一句(标注为IsNext),剩下50%的时候句子B是语料库中的随机句子(标注为NotNext)。接下来把训练样例输入到BERT模型中,用[CLS]对应的C信息去进行二分类的预测。
2. 输入:三个向量之和
Token Embedding:WordPiece tokenization subword词向量。
Segment Embedding:表明这个词属于哪个句子(NSP需要两个句子)。
Position Embedding:学习出来的embedding向量。这与Transformer不同,Transformer中是预先设定好的值。
3. 可用于:
问答系统,情感分析,垃圾邮件过滤,命名实体识别,文档聚类等任务中,作为这些任务的基础设施即语言模型,
4. MobileBert:
MobileBERT比BERTBASE小了4.3倍,快了5.5倍。
4.3 Transformer
4.3.1 输入
Input Embedding: 分词后的向量,如word2vec,GloVe,one-hot编码
Positional Encoding: 位置向量,要加上词向量,在Transformer中是由以下公式得到,在bert中由训练得到
Outputs: Input接收source数据,Outputs在进行supervised train的时候接收target数据,进行预测时不会接收
4.3.2 Encoder block
由6个encoder组成
a. Muti-Head Self-Attention
多头:论文中写的是多个权重得到的多个QKV(实际操作里面是直接均分拆成几个)得到的(self-attention)拼在一起。transformer里面用了八个头。
self-attention:
b. Add:增加残差块,防止网络退化。
c. Norm: 加快网络训练速度 + 提高训练的稳定性
采用Layer Normalization而不采用BN:LN是同一样本在不同神经元之间的归一化,BN是不同样本在同一神经元的归一化
BN: 把一个batch中同一通道的所有特征视为一个分布(有几个通道就有几个分布),并将其标准化。假设输入数据的维度为(N,num_features, H, W),BN共有num_features个mean和var
LN:LayerNorm把一个样本的所有词义向量视为一个分布(有几个句子就有几个分布),并将其标准化。假设输入数据的维度为(N1,N2,normalized_shape),LN共有N1*N2个mean和var
d. Feed-Forward Networks: 这两层网络就是为了将输入的Z映射到更加高维的空间中然后通过非线性函数ReLU进行筛选,筛选完后再变回原来的维度.
4.3.3 Decoder
a. 输入: 训练:target数据;预测:(起始符)上一时刻的输出。
b. 第一层self-attention: masked,使得 decoder 不能看见未来的信息。产生一个上三角矩阵,上三角的值全为0。
c. 第二层self-attention: 只是基于Attention,它的输入Query来自于第一层的输出,Keys和Values来自于Encoder中最后一层的输出
4.3.4 Output:
首先经过一次线性变换,然后Softmax得到输出的概率分布,然后通过词典,输出概率最大的对应的单词作为我们的预测输出。