怎么用图文预训练模型CLIP做视频任务?
关注公众号,发现CV技术之美
▊ 1 写在前面
CLIP由于其强大的泛化性能,简单的代码逻辑,受到了广泛的关注。目前CLIP也被应用到各个其他场景中,在这篇文章中,我们就来盘点一下,怎么把CLIP这个图文预训练的模型拓展到具有时序信息的视频任务中。
本文主要分为两个部分,第一个部分是介绍一下CLIP的原理和流程,第二部分为介绍,目前基于CLIP的视频模型!
▊ 2 回顾CLIP
CLIP的motivation主要有三点:
2)当前的模型只能胜任一个任务,迁移到新任务上非常困难;
3)当前模型泛化能力较差,很难在新的数据上达到比较好的效果。
2)互联网上存在的这些已经标注好的CV数据集数量不仅大而且差异也大,当我们在这样的数据集上训练一个表达能力足够强的模型时,这个模型就能具备较强的泛化能力,较容易迁移到其他新任务上,这缓解了motivation”中的第2和第3个问题。
CLIP的模型结构非常简单,如上图所示:
CLIP的伪代码也非常简单:
2)然后用线性层分别将图像和文本embedding映射到相同的语义空间中。
3)接着对图像和文本的embedding求相似度,得到bs x bs的相似度矩阵。
4)最后只需要在这个矩阵行方向和列方向分别计算cross entropy损失,得到最终的损失函数。
▊ 3 基于CLIP的视频模型
Actionclip: A new paradigm for video action recognition
论文:https://arxiv.org/pdf/2109.08472.pdf
代码:https://github.com/sallymmx/ActionCLIP
视频动作识别的本质就是一个分类任务,判断一段视频属于预定义的哪个类别。所以这个任务的pipeline就如红框所示,首先用Video Encoder来提取视频的特征,并映射为logits向量,然后将其与one-hot形式的ground truth label进行对比,用cross entropy进行学习优化。
ActionCLIP的OverView如上图所示。首先class label先进行Prompt操作得到一个完整的句子,然后将其输入到Text Encoder中,这部分就是CLIP的Text Encoder,得到文本表示。
CLIP4Caption: CLIP for Video Caption
论文:https://arxiv.org/pdf/2110.06615.pdf
这篇文章的做法也比较简单。将Captioning的过程分成了两步,第一步基于下游的video caption数据集,进行视频文本检索的预训练任务。预训练的流程和刚刚讲的ActionCLIP类似,就是一个视频-文本匹配的任务,这一步的作用是为了获得一个能将下游视频数据映射到文本共享语义空间的Video Encoder。
Clip4clip: An empirical study of clip for end to end video clip retrieval
论文:https://arxiv.org/pdf/2104.08860.pdf
整个思路和上面提到的文章类似,用CLIP的Text Encoder提取文本特征,用CLIP的Visual Encoder提取帧的特征,然后将帧聚合之后的特征和文本特征求相似度,基于相似度采用和CLIP相同的方式进行优化。
对于patch embedding的方式,作者提出两种方式,一种是和CLIP的2D的embedding方式,embedding的时候不考虑时间维度上的信息;
Prompting Visual-Language Models for Efficient Video Understanding
论文:https://arxiv.org/pdf/2112.04478.pdf
动作识别和视频-文本检索的流程和之前的ActionCLIP和CLIP4Clip基本都一样。对于动作定位,作者首先用了一个预训练的proposal detector来提取出可能包含动作的视频proposal,然后将这些proposal和prompt之后的动作类别进行相似度对比,相似度最高的proposal就是最终定位的结果。
▊ 作者简介
研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。知乎/公众号:FightingCV
END
欢迎加入「视频」交流群👇备注:视频