本文约14500字,建议阅读15+分钟
本文将分享蚂蚁多模态认知团队过去一年在视频多模态检索领域的研究成果。
[ 导读 ] 本文将分享蚂蚁多模态认知团队过去一年在视频多模态检索领域的研究成果。文章主要围绕如何提升视频文本语义检索效果,及如何高效地进行视频同源检索这两项研究工作展开。
主要包括以下几大部分:
1. 概述
2. 视频-文本语义检索
3. 视频-视频同源搜索
4. 总结
5. Q&A
01、概述
视频多模态检索在蚂蚁内部有着广泛的应用。视频多模态检索具体包括两个方向,一个是视频-文本的语义检索,另外一个是视频-视频的同源检索。
视频-文本的语义检索方向旨在通过文本检索与其语义相近的视频,其检索文本未必在检索到的视频描述中直接出现,但检索视频的内容与检索文本需要保证语义相关。例如,在支付宝的搜索栏中,用户期望通过文本检索出与之相关的视频内容;在安全防控场景中,可通过文本检索来查找安全防控场景中的敏感视频。检索文本通常是短文本。
另一方向是视频-视频的同源检索。同源检索可以实现在视频底库查找与查询视频相关的片段,在实际场景中有着广泛应用。例如在进行视频采购时,可以避免采购到已有视频,从而降低采购成本;在视频版权保护中,当用户提供一段短视频时,需要通过对海量视频底库检索来判断该视频是否存在侵权。
快速提升视频-文本语义检索的方法包括:视频-文本预训练、关注难样本和引入细粒度。关于视频-文本预训练方面,我们在 MSRVTT 文本视频检索数据集上使用 r@sum 指标来衡量语义检索算法效果,其中 r@sum 指标将 top1-recall(r@1),top-5 recall (r@5) 和 top-10 recall(r@10)的指标相加得到。通过采用视频-文本预训练的手段,我们在 r@sum 指标上实现了 24.5% 的提升;随后引入关注难样本,成功提高了 r@sum 8.1%;引入细粒度识别技术,可以提升 r@sum 2.8%。除此之外,在视频的同源检索领域,我们自主研发了视频侵权检测方法。基于此方法,成功节省了 85% 的存储量,并且在侵权检索中能够实现 18 倍的速度提升,同时,检索效果相较于传统的视频检索方法,在 top1 F1-score 上有 2.78% 的提升。接下来将围绕着视频-文本语义检索和视频-视频同源检索两大方向,详细阐述我们的提升方法。
02、视频-文本语义检索
在过去的一年里,我们在视频文本语义检索方向进行了三个方面的研究,以提高视频-文本的语义检索效果,分别为:视频-文本预训练、关注难样本以及引入细粒度。
1. 视频-文本预训练
第一个关键性进展是视频-文本预训练技术。在展开相关介绍前,先介绍下“视频-文本预训练”的含义。
预训练是正式 finetune 前的阶段,它主要是利用大规模且无监督的视频-文本对数据进行语义对齐训练,以提升下游任务的表征能力。通过预训练,我们期望模型能在各类下游任务上取得良好的表现。在具体的应用中,常见的下游任务包括视频-文本检索(video-text retrieval)、VQA(video question answering)、视频描述生成(video captioning)等。
在理解预训练任务之前,需要了解两个概念,一个是视频-文本 pair 数据从何而来,另一个则是如何理解视频所对应的文本。通常一个视频会对应两个文本来源,其一是视频所对应的标题描述,这个描述通常是对整个视频内容的概述,比如短视频 app 中每个视频对应的标题文本;另外一个来源是每段视频配备的音频,并通过语音识别(ASR)技术,将音频所对应的文本识别出来。根据 ASR 的起止时间区间,可将其对应的视频片段视为当前时间片段的 ASR 文本,进而建立起视频和文本的关联关系。我们基于以上两种关联数据构建大规模无监督的视频-文本对,并在此数据集上进行预训练。然后将预训练后的模型作为各项下游任务的初始化模型,可以显著提高下游任务的效果。
国内大多数短视频场景主要面向中文用户,当前在中文视频-文本预训练方面,我们主要面临两大挑战。首先,缺少公开可用的中文视频-文本预训练数据集,学术界通常使用的数据集大多为英文文本,例如 HowTo100M 和 WebVid 等,难以获取公开的中文视频-文本预训练数据集,鉴于此,我们构建出了业界首个开放访问的中文视频-文本预训练数据集,该项成果已于 2023 年的 CVPR 上发表。其次模型设计时需关注跨模态交互,以实现视频和文本之间更深度的交互与融合,从而提升视频-文本检索的效果。我们提出了一种加强视频-文本跨模态交互的新型模型,即 SNP-S3,该工作已发表于 2023 年的 IEEE T-CSVT 期刊上。
首先来介绍第一部分的主要研究成果。我们提出了业界首个公开发布的中文视频-文本预训练数据集,通过在该数据集上进行预训练,能够显著提升中文视频文本检索模型的效果。
主要工作包括三部分:首先构建了大规模的公开中文视频-文本数据集 CNVid-3.5M;其次采用有效的数据处理方法,过滤掉那些匹配度不高的视频和文本对数据,显著提高了数据质量;最后我们在 CNVid-3.5M 上进行中文预训练,验证了我们提出的 CNVid-3.5M 可以显著提升中文视频-文本预训练的效果,并建立了该数据集上的 benchmark。整个过程如上图所示。
接下来介绍数据集的构造过程。我们从多个中文视频网站上收集原始视频。在收集视频时,我们会特别关注当前视频的类别、主题,并尽力保持各个类别与主题间的均衡性。我们成功构建了 450 万个原始的中文视频-文本对。上图展示了视频对应的文本关键词所生成的词云。
在收集完数据后,紧接着是数据清洗的工作,将数据集中相对低质量的视频-文本对进行过滤。原始的视频-文本对并不是严格在语义上对齐的。例如,存在于当前视频中的视觉信号与该视频背景音乐音频转换而来的文本,可能并无明确的语义关联性,而且引入背景音乐音频的文本可能会作为污染训练数据。因此,我们尽可能地把不相关的这些视频-文本对过滤掉。为了实现这一目标,我们提出了使用图文预训练模型进行视频数据清洗的方法。具体实施步骤如下:首先我们利用训练好的图文相关性模型 CLIP,评估当前文本与视频中每一帧关键帧之间的相关性,并将关键帧之间的相关性进行聚合得到整体相关性,通过对整体相关性设定阈值,来滤除相关性较低的视频。至此,我们过滤掉接近 100w 低质的视频-文本对,保留了约 350 万条中文视频-文本对。
上图中展示了我们构建的 CNVid-3.5M 数据集的基本指标统计。截至当前分享时间,我们所构建的中文 350 万的 CNVid-3.5M 是当前业界最大的公开的中文视频-文本预训练数据集。
接下来我们基于 CNVid-3.5M 数据集构建了 Benchmark,以观察各种不同架构的模型在我们构建的数据集上进行预训练的效果是否有提升。
上图展示了三个阶段的详细实验结果。在构建数据集的过程中,使用我们搜集构建的原始数据集进行视频-文本预训练,结果显示在翻译后的中文 MSRVT 数据集的表现上,经过预训练后与预训练前相比,总的 R@SUM 指标有了 17.7% 的显著提升。
同时,表格中也揭示了在我们的过滤阶段,将 450 万数据过滤为 350 万时,虽然预训练数据量有所减少,但整体上模型的效果反而有所增强。
中文视频-文本预训练的第二个难点是在模型设计上,需要关注跨模态的交互,针对这个问题我们提出了增强视频-文本跨模态交互的模型 SNP-S3。S3 指的是重要的语义信息的增强,其针对传统预训练的以下两个缺点设计。
传统预训练任务,一般是在跨模态 encoder 上面,直接去用 mask language modeling 任务做预训练,另外一个常见的预训练任务是做全局的 Vision-Text Matching 的任务。如上图所示,传统的 Mask Language Model (MLM)任务存在的一个问题是,当 mask 的 token 是文本当中不太重要的词时,比如量词 a,模型甚至可以不去看视频相关的内容,通过语法的知识就能够把当前 mask 的词直接复原出来。但是当 mask 的词是关键词时,模型就必须看到当前视频,才能够知道 mask 的词是什么。比如男孩穿着一件红色的衣服,如果把红色 mask 掉,模型没有看到视觉输入的话是没有办法去重建的。通过强迫模型必须要基于给定的视觉输入去推理 mask 的文本内容这种方式,增强了各个不同模态之间的交互。
传统的 Vision-Text Matching 的任务存在的问题是,它更多的是做全局的对齐,视觉跟文本更多是在整个句子层面的语义去做对齐。句子层面的对齐是全局的粒度,缺乏局部信息。比如在句子中,把关键的词如red 直接去掉,去跟视频 matching 它仍然是可以做得非常好的。这也就意味着检索模型其实并没有细粒度的区分能力。像red 这种属性词,还有一些动词,都需要更细粒度的能力。我们希望能够在传统的基于全局的匹配基础上,让模型能够对这些细粒度的信息更加敏感。由此引入了关键词匹配的方式,把句子中更重要的词汇,比如名词、动词、形容词与视频来做属性的匹配,以此来增强模型在细粒度上的识别能力。
这两点改进,即针对 Mask Language Modeling 重要词来做 mask(Mask Significant Semantic Model,MSSM),和在全局信息上面加入细粒度的改进(LVWM),都是为 S3 显著性语义增强的目标来服务。
这里介绍 S3 具体的实现。MSSM 任务,重点在于将关键词语直接 mask 掉,强依赖于给定的视觉输入来重建被 mask 掉的词语。LVWM 任务则是增加了视觉输入与单词匹配的任务。具体而言,之前的 Mask Language Modeling 是按照一定的概率从文本中随机挑词,需要挑出重要的词。重要词有两种定义,一种是用词性打标工具去定义,另外一种是通过在整个大的数据集上去统计一个词出现的频次,用类似于TF-IDF 的方式衡量当前词的重要性。在这里我们结合了这两种方式,要成为重要词首先必须是名词、动词和形容词;此外,词频不能特别高,词频越低其 IDF 就会越大,词频低就意味着其信息量较高,通过这种方式挑选出重要的词进行 mask。另外一个改进是视觉和单词的匹配。将第一步挑选出的关键词,与视觉信号分别来做匹配,每个词都会有一个与视觉输入的相似度,最终把相似度聚合,得到当前句子从单词的维度跟视觉的匹配程度,进而构建相似矩阵。构建的矩阵会跟之前全局视觉文本的匹配的相似度矩阵一起加到 loss 里面去做优化。
这里对 S3 方法进行了定量分析,可以得到以下结论:
MSM 在各个不同的模型结构上都有着比传统 MLM 更好的效果。所以可以直接去替代之前传统的 MLM 任务。
另外,LVWM 任务只能作为传统的全局的视频-文本匹配任务的补充,并不能替代全局的视觉-文本匹配任务。如果把 LVWM 任务加到传统的 GVTM 任务上,可以看到 B3 相比于 B1、B7 相比于 B5 都有着更好的效果,证明它是非常好的局部信息的补充。
另外提出的 S3 里面两个核心的组件都是模型无关的,可以看到 B1 v.s. B4,B5 v.s. B8,分别是在 ResNet50、PVT 不同的模型结构上面;所以这两个策略可以用在任何模型结构上面,我们通过 S3 策略可以使 r@sum 指标提升 6.8%。
我们也对 S3 方法进行了定性分析。加上 S3 之后,给定输入文本,模型会关注到视觉上跟文本更相关的区域。上图展示了一些具体的例子,比如人在海上冲浪的图片,可以看到 baseline 关注区域是分散的,并没有太多的语义,但是加上了 S3 方法之后,它会关注人,还会关注后面海浪的背景。
以上就是对视频-文本预训练的介绍,主要包括两方面的内容,首先是如何构建中文视频-文本预训练数据集;第二是在模型设计环节,如何强化视频文本的交互水平。通过这两项优化可以显著提高视频-文本语义检索的效果。
2. 关注难样本
接下来继续分享如何通过关注难题样本进一步提升视频-文本语义检索效果。关注难样本可使视频-文本语义检索提升 R@Sum 近 8.1%。
关注难样本的要点是模型在学习的过程中能够逐渐去关注难样本,这主要的原因是难样本并不是一开始对模型的训练就有帮助的。在训练刚开始的时候,难样本可能会让模型难以收敛,但是当模型收敛得比较好的时候去关注难样本,可以对模型的性能有更进一步地提升。
关注难样本主要有两个思路,一个是人工指定对难样本的关注度,比如根据模型训练的不同阶段设定对难样本不同的关注度;另一个是让模型自适应地去学习对难样本的关注度,我们团队在这两个方面都进行了探索。
首先介绍下人工指定对难样本的关注度这一策略,主要使用的方法是基于课程学习的难样本挖掘工作,该工作发表在 CVPR2023 上。
训练过程中的样本大致可以分为好的样本、难样本,还有噪声样本。所谓好的样本,是指视频-文本 pair 语义对齐的质量相对较高,文本能够在语义上描述清楚当前视频片段所对应的内容。难样本指的是,视频跟文本也是语义对齐关系,但是文本所体现的语义,跟视频是弱相关的,但是也有相关性。而噪声样本则是指视频和对应文本语义上几乎没有相关性,比如视频所对应的音频中歌词与视频的语义关联并不大,歌词并不能够描述当前视频的语义,这种文本跟视频相关性比较低的视频-文本 pair 我们定义为噪声样本。
这三种样本在训练过程中起到的作用也是不一样的。首先噪声样本,不管是在训练刚开始,还是在训练最后都对训练有负面影响,所以噪声样本是需要直接丢弃的;对于高质量的样本,在训练开始的阶段模型会更多去关注,可以加速模型的收敛;对于难样本,则是在模型已经收敛到一定程度,已经有比较好的表现时要更多关注难样本,可以让模型更好地学习难例,进一步提升模型性能。但如果在一开始就关注难样本,可能会使模型学偏导致无法很好地收敛。
基于这个观察,我们设计了难例课程学习的算法,算法的核心思路是通过课程学习的方式,刚开始的时候让模型更多去关注好的样本,在模型有一定相关性判别能力之后尝试做难例挖掘,让模型能够在训练的后期更多地关注比较困难的样本。
具体的做法如上图所示,首先第一步是采用 contrast learning 的方式构建了视频和文本的相似度矩阵,相似度矩阵的对角线均为正样本,对角线以外都是负样本,接下来根据对角线上面的相似度的值来判断当前的正样本是难样本还是简单样本。一般来说如果对正样本的相似度比较高,可能就是简单样本。通过这种方式在列维度对难样本做度量。同时,也在行层面对难样本进行度量,每一行都代表当前文本跟当前batch 内所有视频的相似度,我们取出所有负样本,如果当前文本跟负样本的相似度比较高,那么就认为当前视频-文本样本是难例。接下来,我们把基于行还有基于列的度量结合在一起,构建 VTM(video-text matching)loss 的权重。这一权重由行加权和列加权共同作用得出,权重系数的大小是通过课程学习的方式来调整的,刚开始的时候权重为 0,就相当于没有加难例挖掘的 loss;随着训练的进行,会让权重 loss 的部分越来越大,这样让模型逐渐关注到难样本上。
我们通过实验分析了当前模型加入 HSCL 难样本课程学习的 loss 之后的效果表现。采用了两个数据集,一个是中文的预训练和 fine tuning 的数据集 CNVid-3.5M,另外一个是在英文上面来做个预训练和 fine tuning 的数据集 COCO+VG+CC。实验发现,在引入难样本课程学习方法之后,可以为文本视频检索的 r@sum 指标带来 5% 左右的提升。
以上介绍的是人工方式来指定对难样本的关注度,这一方式不够自动化,需要做超参数的调整。我们希望让模型能够自适应地学习对难样本的关注度,因此设计了一种自适应方法,接下来介绍的 DMAE 和 NegNCE 的方法发表在 2023 年的 ACM Multi Media 上。通过这种方法,可以带来 R@SUM 3.1% 的提升。
接下来介绍一下 DMAE 和 NegNCE 的 motivation。
DMAE 是双模态的 attention 增强的模块,它的核心是希望能够找到尽可能多的难例,主要是采用两个思路,第一个是扩大简单样本和难样本之间的边界。如上图右侧,从 b 到 c 是在 NegNCE 的基础上增加 DMAE,可以看到通过 DMAE 的难例挖掘,可以引入更多的难负例扩大决策边界,进而提升模型对样本的区分度。NegNCE 的核心思想是把这些难样本全部都找出来后,看哪些难样本是真正需要去关注的,因为这些难样本,有可能之前的 infoNCE 的 contrastive loss 都已经解决了,但是还有那些解决不了的希望能够通过加一个辅助的 NegNCE loss 到训练目标里面,让模型动态地关注这些难样本。
传统的 infoNCE 更多的是关注正样本,把正样本拉近,把负样本推远,并没有关注难的负样本,引入 NegNCE 可以让模型显式地去关注难样本,在上图的 case 中难的负样本,在决策边界上是很近的,它虽然是负样本,但是它跟当前 Anchor 的相似度可能会比正样本更近。NegNCE 能够把这样的负样本逐渐推远。DMAE 会挖掘出更多的这种负样本,把更多的负样本囊括在当前模型 loss 所考虑的范围之内,即DMAE 挖掘更多负样本,NegNCE 去努力区分负样本,通过这两个 loss 的配合,让模型能够在训练过程中自适应地去关注难样本。
DMAE 主要有两方面的工作,一个是在文本侧,因为文本句子表达包含很多冗余性,所以希望能够让模型更多地关注到句子中关键的词。这些关键词首先得是名词、动词和形容词这些比较重要的词,其次是出现的词频,即相对于词频更低,这样的代表词有更多的信息量。把这两个结合在一起,来挑选出文本的关键词,对这些关键词,会在做文本 attention 的时候给予更高的权重。
另一方面的工作在视觉侧,视频和图片最大的区别在于视频中会包含很多关键帧,关键帧之间是包含一定冗余性的,也就意味着在时序上邻近的这些帧可能在语义上甚至视觉上都是非常类似的。这意味着如果当前帧存在难样本,那么跟它比较相似的另外一帧也存在很多难样本。我们把这两类难样本求并集,合并之后的难样本集合就是当前帧和另外一帧跟它比较相似的帧构成的难样本集合。
具体的实现方式为,在计算视频跟文本相似度矩阵之后,会做文本侧的加权,文本侧的权重主要是依据单词的词性、词频来确定。另外,视频侧的权重主要是把当前视频关键帧跟它自身来做相似度矩阵。接下来保留 top 的 score,比如对于每一帧找跟它最相近的帧的难样本,也作为当前帧的难样本,通过这种方式构建相似度矩阵,在相似度矩阵上面可以挖掘出更多的难例。越难的样本在相似度矩阵上最终得到的score 就会越高。
当挖掘更多的难例之后,我们希望模型在训练过程中能够去动态区分这些难例,由此显式地引入了 NegNCE loss。传统的计算视频跟文本的相似度采用 InfoNCE loss。InfoNCE 的分子是正样本,分母是所有的负样本,InfoNCE 在拉近正样本和推远负样本过程中把正样本和负样本等同看待。
在训练过程中,NegNCE 首先会判断哪些是负样本。对于相同的文本而言,如果负样本的视频跟文本的相似度比正样本视频更大则认为是难例。通过这种方式,在训练过程中,我们可以把所有负样本比正样本相似度更高的视频-文本 pair 全部挖掘出来,并加上辅助 loss(如上图公式(6)),专门来做难的负样本的挖掘。辅助 loss 和之前的 InfoNCE loss 通过加权相加。我们可以通过调整r2 的权重来调整模型在训练过程中对难样本的关注度。
我们通过实验验证了上面提到的难样本策略。DMAE 主要是用来扩大难样本的范围,NegNCE 让模型在扩大难样本范围之后更多的去关注对模型而言比较难区分的负样本,可以看到用 DMAE 加入 NegNCE 之后,整体的效果是有提升的。把这两个组件合在一起,整体对 r@sum 指标有 3% 的提升。
3. 引入细粒度
接下来介绍第三方面,引入细粒度,也可以快速提升视频文本语义检索的效果。在实验中,引入细粒度可以对 R@Sum 指标提升 2.8%。
视频-文本语义检索的已有工作缺乏对较细语义粒度的区分。比如现在常用的 Pairwise loss 更多是通过做二值量化来判断视频和文本之间是否相似,属于粗粒度的识别,本质上是一个二分类。另外一类基于 Triplet loss 这种方法,并不做相关或不相关二分类,而是建模偏序关系,可以让模型在更细粒度上建模语义相关性。但是怎么去构建不同语义粒度的视频-文本 pair 呢?这个是我们的核心挑战。
为了构建不同语义粒度的视频-文本 pair,我们采用生成的方法生成这样偏序 pair。具体的思路是借鉴在单模态文本上的 CSE 工作。扩展到多模态上时,如果当前完整的文本和完整的视频是完全相关的,那么在视频上面如果要去掉一些关键帧,那么视频的相关性会逐渐变弱。所以构建的偏序关系是:文本跟完整的视频之间的相关性 > 文本跟去掉关键帧之后的视频的相关性。同样,对于文本侧而言也是一样的:当前视频跟文本之间的相关性 > 当前视频跟文本去掉关键词之后的相关性。基于这个思路,我们生成不同语义粒度的这种相关性的 pair。在生成偏序 pair 上另一个和单模态的不同点是,对于单模态,可能更多的只考虑文本或者图片本身的语义。而对于多模态,在构建偏序对时,实际上是要看到文本才能够确定当前视频中的哪些帧重要,哪些帧不重要;对于文本侧也是一样,看到视频之后才能确定这些文本描述中哪些词是重要的,哪些词是不重要的。
基于这样的观察我们提出了两个模块,第一个是跨模态的 token 重要性的预测,算法核心是通过给定一个模态输入,预测另一个模态的 token 重要性。比如给定视觉侧全局信息输入,让模型预测当前文本 token 的重要性,即文本中的哪些词是重要的;对于视觉侧也是一样,给定当前文本的总体的表征来预测当前视觉的哪些 token 是重要的。通过这种方式,来选出重要的文本 token 和视觉的 token,并进一步把这些重要的 token 做 mask,通过 mask 生成的样本就比 mask 之前的完整文本或视频跟另一个模态的相关性更弱。通过这种方式,我们就可以生成有偏序关系的 triplet 三元组。
具体的实现分为两个阶段,第一个是生成偏序的样本,首先要预测对另外一个模态而言,哪些 token 是更关键的;预测到更关键的这些 token 的权重之后要确定 mask 掉哪些 token 对当前文本的 token 语义影响是最大的。第二步把语义影响最大的这些 token 直接 mask 掉就生成了偏序的 pair。类似于 Triplet loss 的思想,mask 之后的样本与另外一个模态之间的相关性会变弱。Triple data 三元组里面两两建立相关性,也就是三个 loss 来做约束。如上图公式(17)所示,带 p 的都是已经做过mask 的。所表达的含义就是,没有做过 mask 的跟文本的相关性要高于做过 mask 的相关性,没有做过 mask 的文本跟视频的相关性要比做过 mask 的文本跟视频的相关性更高。
我们通过实验验证了引入细粒度的具体效果。引入了细粒度 TPM-CL 的方法后,相比之前,在 MSRVTT R@sum 指标有约 2.8% 的提升。也可以跟 DMAE 合用,通过 DMAE 扩大引入更多的负样本,TPM-CL 是让模型在训练过程中更多地关注难以区分的负样本,这两个方法结合带来了 4.4% 的提升。
小结一下,快速提升视频-文本语义检索的第三个方法是引入细粒度,具体在这方面做的工作是偏序样本生成,以及引入偏序损失。
以上就是对视频-文本语义检索三个主要优化方法的介绍。接下来将介绍视频多模态在视频-视频同源检索方面的应用。
03、视频-视频同源搜索
视频-视频同源检索的核心是如何高效低成本地实现视频侵权检测。我们在该领域提出了一种自研的端到端的片段匹配定位技术,能够迅速实现视频到视频的版权检索,相较于传统方法,可节省 85% 的存储空间,并在视频侵权检索场景中加速 18 倍。在检索效果方面,F1 相比已有的方法,可提高 2.78%。
1. 视频到视频同源检索的挑战
视频到视频同源检索所面临的挑战主要包括:
首先,视频侵权类型复杂,内容变化多样且剧烈。这会对版权检索的准确性造成影响。涉及的复杂的侵权类型包括:几何变换(如剪切、缩放、旋转等)、光学变换(如色调、噪声、对比度、亮度等)、时域变换(如丢帧、快放、剪辑、帧率变化、加减速等),以及将以上各类变换综合运用产生的复合变换。这些特殊的变换使得对视频做同源检测工作变得困难重重。例如在视频的空域上增加多种滤镜,并对原始视频进行裁剪和模糊处理,得到的所有视频都是对原始视频的侵权。又如,对原始视频进行加减速,或拼接,这种视频也属于侵权。
另一方面,数据量庞大,视频的每一帧都需进行计算处理,因此计算量也较大,存储量大和计算量大带来了成本高的难题。
因此,要实现视频到视频的同源检索,核心在于:如何提升检索的准确度,以及如何降低成本。
传统的视频对视频同源检索方法无法满足需求。以 MultiMedia09 的研究为例,他们采用时序网络,基于动态规划的方法寻找侵权片段的最长路径。其优点在于无需监督且定位较为精确,但其缺点是鲁棒性较差,尤其是面对加速或减速,或者时域和空域复合变换的情况,其效果难以达到预期。还有一些工作是基于深度学习模型,通过基于特征相似度矩阵的方式处理,这种方法将视频是否侵权的问题转化为待检测视频与侵犯版权视频的二分类,即将视频特征整合后,若侵权则标记为标签"1",反之则标记为标签"0"。这种方法无法实现视频的侵权检测的片段定位。
2. 框架及核心技术
基于现有算法无法满足需求,而视频侵权检测对于业务意义重大,我们自主研发一套侵权检测框架,以解决上述效果和成本问题。
框架的整体设计如上图所示。
首先,对视频底库进行处理,对视频抽取关键帧,然后对关键帧进行帧级特征提取,并存储在特征库中。在处理查询视频时,同样会对查询视频进行关键帧抽取和特征提取,然后,使用查询视频与底库进行特征匹配,完成匹配后,进行精细排序,最终判断当前的查询视频是否存在侵权。
核心技术包括以下两个层面:首先是如何准确抽取视频的关键帧,这实际上是降低成本要求。如果我们将视频中的每一帧全部保存下来,存储成本会相对较高。因此期待能通过关键帧来替代整段视频,从而降低视频在版权检索过程中的成本。其次是如何迅速定位视频侵权部分的问题,此环节涉及到准确率与成本的平衡。例如,刚刚所提到的 ICCV 的研究,主要涉及的 Pairwise 式的视频侵权检测,虽然理论上可行,但在实际业务中无法实现,因为其侵权比对成本过高。
我们提出的自研解决方案分别是自监督的 SKE 方法和检测定位的 SPD 模块。接下来将详细阐述这两种方法。
首先来介绍 SPD 模块。该模块的核心理念是,在提供候选视频以及查询视频后,将候选视频和查询视频的关键帧的特征进行两两对比,构建出相似性矩阵。在特征相似性图上可以看到部分相似度值会更高,且具有一定的连续性。基于这一观察,我们将视频之间可能存在片段匹配的问题转化为在特征相似图上进行侵权模式 Pattern 目标检测的操作。这也就意味着我们可以构建侵权相似度图训练集,同时在特征相似度图上标注出侵权的起止时间,便可在特征相似度图上直接训练 YOLO 的目标检测模型,从而实现快速识别。判断候选视频是否与底库中的任何一个视频,以及视频的某个片段存在雷同之处,进而判定该视频是否存在侵权行为。
SPD 核心模块与业界主流的动态规划相比,具有更出色的性能表现,能够提速 18 倍。这主要得益于 YOLO 的快速目标检测。此外,针对较为复杂的场景,例如那些经过加减速处理的侵权,以及使用滤镜处理的侵权,相比于业界主流方案均有显著的提升。
侵权检测的第二个核心任务就是降低成本。其核心思想是用关键帧取代传统的均匀帧。相较于均匀帧,关键帧的数量通常会压缩约 70% 至 80%,因此,相应的存储空间也会大幅度地减少。关键帧检测作为关键帧抽取模块的核心内容,首先需要对视频进行预处理,将其所有帧在同一时间内铺平,拼接成一张大的图像。接下来是对大图做类似于图像分割的任务,目标是输出每一像素对应的确切类别。在我们的场景中,每一像素实际上代表着一个关键帧,所以目标是输出每一帧成为关键帧的可能性。这样就可以挑选出当前视频中最能彰显视频特征的那部分帧。
如果要将上述关键帧抽取模块与侵权定位模块结合使用,那么核心就在于挑选出关键帧,然而,直接利用关键帧抽取模块并不是可导的,因此我们先输出关键帧的概率 mask,同时构建一个均匀帧的 mask,然后将这两个 mask 进行加法运算。最后,使用 mask 对密集采样的均匀帧的特征相似图进行点乘,点乘后得到的特征相似图就可以与 SPD 模块联合在一起训练。通过这种方式,我们可以确保 SPD 模块的梯度能动态回传给关键帧抽取模块,同时关键帧抽取与 SPD 模块可以共同进行端到端的联合训练,构成一个完整的端到端的模型,而不必像传统的方法那样先训练关键帧再训练其它模块。
将关键帧抽取和 SPD 进行联合训练比单独使用 SPD 有着明显的提升。此外,在大规模的数据集上测试后发现,无论在成本上还是存储需求上,都有明显的减少。可以看到,与单独使用 SPD 相比,存储关键帧能够节省 85% 的存储量。同时,在侵权检测效果方面,可以使用更少的关键帧达到更好的效果,整体性能提升 2.78%。
04、总结
总体来回顾一下本次分享的内容。主要介绍了视频多模态检索的两个方向,一个是视频-文本语义检索,另外一个是视频-视频同源检索。
针对视频-文本语义检索提出了三个可以快速提升视频-文本检索效果的方法:首先是通过视频预训练,可以带来 24.5% 的提升;第二是通过关注难样本,带来了 8.1% 的提升,其中难样本分为两种,一种是基于人工指定模型在不同训练阶段,关注不同的难样本,另外一种是让模型在训练过程中自适应地去学习对难样本的关注度;第三是引入细粒度,可以带来 2.8% 的提升,主要涉及如何生成偏序样本,以及引入三元组偏序损失,对细粒度语义进行建模。
视频-视频同源检索部分介绍了自研的端到端的片段匹配定位方法,可以节省 85% 的存储,侵权检索加速 18 倍,检索 F1 相比于使用均匀帧的效果有大幅提升。
上述所提到的工作是蚂蚁智能引擎多模态认知团队在过去一年公开的研究成果,主要涉及到视频语义检索以及视频到视频的版权检索方面的研究进展。若对此感兴趣,欢迎进一步了解我们的工作。同时,我们也热忱邀请更多的同学加入我们,共同携手推动相关工作的开展。
05、Q&A
Q1:关键帧需要先标注数据,再训练分割模型吗?
A1:关键帧模块有两种使用方式,如果把模块单独抽取出来的话,它实际上类似于分割模型,这是需要去标注的。比如可以人工标注哪些帧是关键帧,然后单独训练模型,用模型从视频中抽取关键帧。
但如果要采用这里所用的端到端的方式的话,把关键帧的模块跟下游任务相似帧比对,这里的下游任务,更多的是侵权定位模块,比如两个相似视频比对下任务是两个相似帧比对,用这种方式实现自适应端到端的方式,根据任务的特性去筛选关键帧,这时候就不需要去标注了。
Q2:现在有没有 hugging face 上面现成的关键帧提取的模型?
A2:目前模型还没有开源,但是有开源计划,目前在走内部的开源流程。
Q3:多模态的 embedding,到下游推荐场景的时候往往没有效果,有什么好的解决办法吗?
A3:或许我们更加倾向于参考前面视频文本语义检索部分的内容。在语义检索层面,将文本语义检索具体用在搜索或者是推荐场景中,会有几个协作紧密的环节。首先在搜推的召回阶段,可以用增加视频文本链路,去增加召回阶段的召回。其次,在排序阶段,可以引入经过视频-文本预训练之后的视频和文本的特征,加入到排序的特征里面。第三,在精排阶段,更多的是需要做视频的打散。这时候,可以用训练的embedding 来做打散,如果效果不太好,可能与具体的业务场景有关系,或者与怎么用这种多模态预训练表征有关系,可能要明确具体的场景、具体的问题才能做出解答。
Q4:刚才演讲的过程中提到节省了存储,主要数据都存在什么样的存储介质里?
A4:如果是小规模的视频版权检索的话,可以直接存储在比如 NAS 盘,就是普通的硬盘上面。如果是大规模的存储,会把这些特征直接存储在向量检索的数据库。通过数据库来存储,存储量会相比 NAS 更节省,但是用关键帧的话,会带来非常大的存储空间的节省。
Q5:关键帧的解决方案是不是也可以用在视频到视频的翻译里面?不同语种的翻译。
A5:视频至视频的翻译具体是指将英文视频转换为相应的 ASR 语音译文。
视频中语音内容的翻译,其关键之处在于不仅音轨能够匹配,而且音轨与口型也能够一致对应。由于不同语言之间的语速实际上存在差异,若采用传统翻译方法,譬如中文转为英文,或者英文转回中文,其所需时间也会因此有所不同,这就需要进行一定程度的剪辑工作。换一下角度来看,我认为这项技术实则是解决了两个视频间的对齐问题。对于我所述的翻译场景,我虽了解并不深入,但假设确实存在视频片段间的对齐问题,那么我认为这种方法应可广泛适用。
Q6:关于团队招聘情况可否详细介绍?
A6:衷心感谢您对我们团队的密切关注。我们是蚂蚁智能引擎多模态认知团队,我们始终致力于招聘人才,目前正在进行中的招聘涵盖了多个领域,不仅限于今天详细介绍过的发展方向。我们主要的研究方向包括多模态大模型、视频大模型以及版权检索等。总的来说,我们的工作主要可以分为两大板块:视频处理和图文处理。在图文处理方面,我们重点关注多模态和大模型;而在视频处理方面,我们专注于实时性和视频文本的语义检索以及视频到视频的版型检索等。对于这些领域有浓厚兴趣或者相关经验的同学们,欢迎随时向我们发送您的简历,我们的 recruitment base 位于杭州和北京,我们在这两地的团队都在热烈欢迎您的加入!
Q7:提取视频特征指用视觉输入吗?
A7:在此论述的视频特性的提取,若指的是例如同源检索内的视频特征,其实际操作流程是:首先,我们会在视频中抽取出帧级别的关键帧,并对这些关键帧进行特征抽取。对于此前提及的视频-文本预训练视频的特征抽取,其过程可能是直接针对视频级别进行的,类似于 video swing 模型,直接产出整个视频的表征。因此,这两项工作所采用的视频特性抽取可能存在差异,一个更关注于帧级别的特征抽取,另一个则侧重于整个视频级别的抽取。然而,无论哪种方式,都需要借助视觉输入。
Q8:视频特征是如何通过融合关键帧的特征提取到的?
A8:这是因为在今天的分享里实际上都是视频帧级别信息,视频片段作为其中重要组成部分,与其底层库及视频关键帧之间的匹配,共同构建了类似于相似度的矩阵特征向量矩阵。然而,此种方式实际上并未实现对整体视频及其关键帧特征至整个视频特征的聚合过程。
实际上常用的聚合方法中,既包括无参数方法,如基于关键帧特征进行 LV 级 pooling 操作,亦有参数化方法,如在上层加入临时编码器,把视频帧的特征作为类似于Transformer 的标记作为输入,利用 Transformer 进行连续建模,可能涉及的参数化方法。此外,亦可能包括类似于时序视频建模方法的策略,例如 Token Shift 方法,这些方式都可将帧级别特征转化为视频级别特征。这些方法均已得到实践与尝试,且产生了一定的成效。
Q9:应该理解为视频的特征,是整个视频的特征,可能是人为赋予的,但是真的特征,即实质上的特征仍然得以体现。是这样理解吗?
A9:是的。实际操作则更多地受问题处理粒度的影响,如何设计视频特征呢?例如在视频文本语义检索领域,其所关注的核心问题便是如何从文本角度进行视频检索?由于将整段视频视为一个整体,因此该领域的研究会更倾向于视频总体呈现的表达方式,即如何展现视频内容?再以视频到图像检索为例,由于该方式更注重图源检索,例如在版权检索等场景中,检索结果可能包含了 query 的视频片段,而这些片段与底库中的某一片段可能存在侵权风险。因此,该领域的研究更侧重于视频片段或更微观的视频帧的表达。因此,在这种情况下,视频特征的关注点并不在于整个视频的embedding 表达,而是视频帧的表达。我们还是应根据具体问题进行详细的分析。
Q10:视频的 ASR 和关键帧的 OCR 信息有使用吗?
A10:有使用的。例如,在同源检索领域内,实际上并不涉及到大量的文本信息;而在语义检索方面,比如说处理视频数据时,首先我们需要介绍 OCR(光学字符识别)技术。一般情况下,我们在进行语义检索操作时,会构建视频与文本的配对关系。当视频缺乏整体性的视频描述时,视频与文本的配对通常是从 ASR 中获取的。将 ASR 的起始时间和结构时间与其对应的视频片段作为 ASR 文本所对应的视觉输入。同时,我们还会利用当前 ASR 所对应的视觉片段中的关键帧进行 OCR,提取出 OCR 的文本,并加入到 ASR 当中。因此,可以说,ASR 和 OCR 共同构成了文本的内容。然而,值得注意的是,如果将 OCR 文本添加到这部分文本中,可能会出现一些问题。因为关键帧中的 OCR 文本往往相似度较高,可能需要采取类似于视频级别的 OCR 方法,进行 OCR 文本的去重。
Q11:刚才回答的这一部分问题,都是在视频-文本预训练这一部分做的吗?
A11:是的。实际上,这方面的研究不只是局限于视频-文本预训练,还涉及到视频文本语义检索。使用何种文本,我们刚才探讨的,都是如何在模型或者数据的层面,去提高视频文本与检索效果。实际上,还有一个重要的角度是如何构建文本,以便文本更能与视频相关联,例如,文本可以来源于视频的标题,比如整个视频的标题,也有可能是视频的封面描述,还有可能是视频中对应的片段所对应的自动语音识别(ASR),或者是视频中关键帧的光学字符识别(OCR),这些都有可能与视频密切相关。具体实现还需要考虑具体的业务场景,例如,如果您打算尝试利用视频中的文本进行视频检索,那么 OCR 无疑是必须包含在文本内的。
Q12:问 ASR 一般会包含 BGM 一类的噪音是怎么过滤的?是用 Facebook 的库吗?
A12:我们所设计的噪声过滤模型,一方面,具备 BGM 识别的强大功能,这部分功能已经有成熟的开源模型可以使用。另一方面,即使模型未成功过滤掉噪音,其实也是无妨的,因为该模型的 BGM 一般为歌词。对于纯音乐类型的 BGM,其实它的 ASR 并不会输出任何文本。能够输出文本的背景音一般都是歌词,然而歌词与视频内容的关联性,通常可以通过训练图文关联性的模型进行调整,例如类似于中文 clip 这样的模型就可以将其有效地过滤掉。
Q13:视频检索涉及到线上实时 Infer 吗?是离线做 T+1 的,还是实时流的?如果线上实时 infer 的话,这么大的模型是怎么扛住的?
A13:可以实时 Infer,以视频文本语义检索为例,经过有效的训练后,我们可以利用视频在入库时,通过训练过的模型,来获取视频的整体 embedding。然后,我们便可以将这个 embedding 存储在向量检索的数据库中。对于文本检索来说,通常的方式就是在线查询文本。我们可以去部署一些较为轻量化的方案,例如,我们将文本方面的模型进行轻量化处理,采用量化解释和增强流等方法,以生产出与视频部分相匹配的轻量级模型。在实际检索中,我们只需要运行这个轻量级的模型,实时提取出文本的表征,接着习惯于之前已经存储了视频向量的检索底层库,进行量化检索即可。对于检索来说,有很多可以提升速度的手段,例如基于 faiss 等向量库实现实时的检索。
Q14:请问你们平常用到的向量数据库是哪个?
A14:我们内部使用了一款名为千寻的检索平台,这并非开源产品。然而,其实现原理与我之前所提及的 Facebook 开源的向量检索数据库 faiss 原理基本相同。
以上就是本次分享的内容,谢谢大家。
编辑:于腾凯
校对:林赣敏