AAAI 2024 Oral|打破边界!利用CLIP的多任务多模态视频行为识别方法

点击下方卡片,关注“CVer”公众号

AI/CV重磅干货,第一时间送达

点击进入—>【Mamba/多模态/扩散】交流群

添加微信:CVer5555,小助手会拉你进群!

扫描下方二维码,加入CVer学术星球!可以获得最新顶会/顶刊上的论文idea和CV从入门到精通资料,及最前沿应用!发论文/搞科研/涨薪,强烈推荐!

2b4b458bdf00fbc394e3ab6996da0c60.jpeg

转载自:极市平台 | 作者丨王蒙蒙@知乎(已授权)

来源丨https://zhuanlan.zhihu.com/p/704566210

导读

 

本文提出了一种新颖的多模态、多任务适配框架,将强大的CLIP模型转移到视频动作识别任务中。该方法在确保最先进的零样本可转移性的同时,实现了强大的监督性能。 

本文介绍我们在视频行为理解领域的一篇新工作,该工作发表在AAAI 2024(Oral)《A Multimodal, Multi-Task Adapting Framework for Video Action Recognition》。

40f14e08bec3cc24dc4cf4b5eb9b08ac.jpeg

论文链接:https://ojs.aaai.org/index.php/AAAI/article/download/28361/28707

代码地址:https://github.com/sallymmx/m2clip

1 引言

近年来,大规模视觉-语言预训练模型(VLM)如CLIP、ALIGN和Florence的出现引起了极大的关注。因此,研究人员积极探索有效地将这些大型模型适应于特定领域的方法。本文重点研究如何将CLIP模型转移到视频动作识别领域,强调其在推动该领域进步中的重要作用。

毫无疑问,将CLIP强大的知识转移到新领域具有巨大的潜力,因为它具备强大的表示能力和出色的泛化性能。最直观的方法是直接在CLIP的图像编码器上添加时间建模,并微调整个网络。然而,微调的计算成本高昂,且可能影响CLIP原有的泛化能力。随着参数高效微调(PEFT)的出现,研究人员开始探索冻结CLIP的原始参数,并引入各种适配器或提示词,仅训练新添加的参数。值得注意的是,PEFT促使人们重新评估传统的单模态视频分类框架。通过直接利用CLIP的视觉分支并结合添加的适配器,再在末端添加线性分类层,这些方法在监督场景中表现出色。然而,需注意的是,在这些方法中排除了文本分支,导致CLIP的泛化能力丧失,而这种能力正是CLIP的核心吸引力之一。

PEFT也可以应用于多模态CLIP转移框架,直接影响视觉分支或文本分支,甚至同时影响这两个分支。这显著提高了效率并减少了可学习参数的数量。然而,冻结多模态骨干网络会导致监督精度下降,与单模态框架的性能相比存在差距,即使结合了强大的单模态适配器也是如此。我们通过实验验证了这一观察,如图1左所示。使用ST-Adapter作为单模态框架的代表,我们引入了CLIP的文本分支,将ST-Adapter转变为多模态框架。正如预期的那样,通过冻结CLIP参数并学习适配器,我们确实观察到了监督性能的明显下降。其原因在于CLIP的文本分支缺乏足够的判别特征,特别是对动作动词的判别特征,如图1右所示。此外,与CLIP原始训练集相比,在相对较小的数据集上训练时,CLIP自身的对比学习损失使得视频的判别特征难以学习,尤其是在文本数据稀少的情况下。

85f35beb75625700835a2d255add3d8b.jpeg
图1 单模态vs多模态 (a)性能比较。请注意,ST-Adapter 无法进行Zero-shot预测,因此在Zero-shot UCF101 和 HMDB51 中没有结果。(b) ST-Adapter+text的前40个SSv2标签特征与本方法的同样的40个标签特征的类间相关图。颜色越红,特征耦合越强。我们的M2-CLIP提高了四个数据集的性能并降低了相关性。

为了打破有监督学习和泛化能力的边界,我们提出了一种新的多模态、多任务CLIP视频转移框架,称为M2-CLIP。首先,我们专注于多模态适配以构建更强大的架构,在文本和视觉分支中都添加了适配器。具体而言,为了更好地表示视频的时间信息,我们设计了一种新颖的TED-Adapter,能够同时整合全局时间增强和局部时间差分建模。此外,我们在文本分支中引入了一种简单的适配器,以捕捉与动作标签相关的附加语义信息,从而显著改善了第一个问题。其次,我们设计了一个多任务解码器,以挖掘更强的学习潜力。解码器由四个部分组成:(a) 原始的对比学习头,旨在对齐视频-文本对的表示。(b) 跨模态分类头,可以突出跨模态特征的判别能力。(c) 在文本分支的最后一层设计了跨模态掩码语言模型头,促进视觉特征聚焦于动作动词的识别。(d) 在视觉分支的末端引入视觉特征分类器,以便区分不同类别的视觉特征。

807ed3a0bfd98ce83aa71c5415852a84.jpeg
图2:性能比较:zero-shot与有监督精度。圆圈大小表示可调参数的数量,其中性能较好的模型位于右上侧。可以看到我们的 M2-CLIP以极少的可调参数实现了最佳效果。

综上所述,我们的贡献有三点:1)我们提出了一种新颖的多模态、多任务适配框架,将强大的CLIP模型转移到视频动作识别任务中。该方法在确保最先进的零样本可转移性的同时,实现了强大的监督性能,如图2所示。2)我们设计了一种新的视觉TED-Adapter,执行时间增强和差分建模,以增强视频编码器的表示能力。同时,我们为文本编码器引入了适配器,使标签表示可学习和可调节。3)我们引入了一个多任务解码器,以提高整个框架的学习能力,巧妙地在监督性能和泛化能力之间实现平衡。

2 方法

如图3所示,我们的框架由三个关键组件组成:视频编码器、文本编码器和多任务解码器。

7c54cfc7f3211f47150d8d648ae519c1.jpeg
图3 整体框架图

形式上, 框架的输入为视频 , 其空间尺寸为 , 包含 帧采样帧, 以及预定义标签集 中的文本标签 。

视频编码器: 由 层 Transformer 层 和相应的视觉 TED-Adapters 组成。输入的第 帧被划分为不重叠的补丁 , 其中 。然后, 这些补丁被投影到补丁嵌入 , 并在前面加上一个可学习的类标记 和位置编码 。帧级输入构建如下:

。

如果在每个 Transformer 层之前放置视觉适配器, 输入将按顺序处理为:

。

为了获得最终的视频表示 , 最后一层 Transformer 层的类标记 被投影到一个通用的视频语言 空间, 通过 , 并沿时间维度进行平均,

。

语言编码器: 同样, 由 层 Transformer 层 和相应的文本适配器 组成。输入的单词被标记化并投影到单词嵌入 , 其中 是文本长度。编码器的输入构建如下:

以在每个 Transformer 层之前插入文本适配器为例, 每层的特征获取如下:

标签  的最终 VL 空间文本表示 通过 获得, 其中 是 的最后一个标记, 是投影层。

解码器: 一旦获得两个编码器的输出特征,它们将被输入到我们专门设计的多任务解码器中。在训练过程中,解码器的作用是对编码器生成的特征表示施加约束,促进两个模态之间的语义对齐,并使不同类别的特征能够区分开来。模型训练完成后,解码器非常灵活,既能生成用于监督学习的分类得分,又能进行零样本分类。解码器结构的详细设计将在下一节中详细阐述。

2.1 视觉和文本适配器

为了更好地将CLIP转移到这个任务中,并增强动作动词标签的语义表示,我们为视觉和文本分支引入了适配器,以改善它们各自的表示能力。

e8a4d9e9768483bd2443bbc3bfa6fb84.jpeg
图4 视频TED-Adapter与文本Adapter

视频 TED-Adapter: 将CLIP的图像分支适配到视频分支需要额外的时间建模模块,可以从两个角度进行:全局时间增强和局部时间差异建模。前者是直观的全局时间聚合,被称为时空特征,其中时间注意力或时间卷积应用于多个帧的特征,以聚合相似的动作主体。这在CLIP的转移中已经被广泛探索。后者是短期帧间特征差异学习,旨在捕捉相邻帧之间的局部运动模式和动态。这种特征在早期的计算效率卷积算法中有所提及,但在CLIP的转移中尚未探索。为了在统一结构中探索这两种时间建模,我们设计了一种新的 TED-Adapter,同时学习Temporal Enhancements 和时间Differences。

如图4所示, 我们首先采用1D时间卷积进行时间特征增强。对于包括类标记和补丁标记在内的TEDAdapter层的输入 , 我们进行以下操作:

其中 和 是下投影和上投影权重。Conv1D 表示在时间维度上进行时空建模的1D卷积。请注意, 此部分为了简化省略了重塑操作, 但在图4中显示了重塑操作。

接下来, 对于时间差异建模, 我们从当前帧的特征中减去前一帧的特征, 然后使用2D空间卷积自动学习相邻特征差异中的有用信息。形式上, 给定第 帧的输入补丁 ,

其中 Conv2D 表示2D空间卷积。对于第一帧,我们将其特征置为全零张量,即 。

最终, 通过融合这两种时间特征, 可以获得TED-Adapter的输出。此外, 应用残差求和以保留输入中的信息:

其中 , 而 是一个与 形状相同的零矩阵。

TED-Adapter 默认情况下放置在多头自注意力(MHSA)之前,除非另有说明。通过结合时间增强和时间差分操作,提出的TED-Adapter能够捕捉时空特征和局部精细的运动模式,这对于此任务都至关重要。

文本适配器: 在动作识别中,描述动作的文本标签通常简短而简洁,强调动作本身,例如“展开某物”和“跨栏”。然而,我们观察到,单独使用CLIP的文本编码器可能无法有效区分这些标签的文本特征,如图1所示。为了解决这个问题,我们在文本分支中引入适配器,以学习更好的动作标签语义表示。我们直接采用了基本适配器的结构,如图4b所示。具体来说,给定文本适配器层的输入文本标记 , 我们执行文本适配器操作如下:

其中 Act 表示非线性激活函数,这里我们使用 GeLU。

文本适配器默认插入在 Transformer 层的前馈网络(FFN)之前。通过引入文本适配器,模型可以增强对动作标签的理解,捕捉更具辨别性的语义信息。这允许文本和视觉表示之间实现更好的对齐,从而在视频动作识别中达到更准确和有效的效果。

2.2 多任务解码器

正如前文所述,我们观察到,在使用CLIP的多模态框架时,仅依靠对比学习的表现不如配置相同的单模态框架。为了解决这个问题,我们提出了一个多任务解码器,配备了四个不同的学习任务,每个任务对应一个单独的头,如图5所示。此方法旨在利用多个任务约束来提高多模态框架的联合表示能力。

6bfb0382f88ba0d28b7e3c517f70bef8.jpeg
图5 多任务解码器

多模态对比学习头(Contrastive): 这是CLIP的原始训练目标。为了将视频表示 和标签表示 成对拉近, 定义了两种模态之间的对称相似性, 我们使用Kullback-Leibler散度作为视频-文本对比损失来优化这个头。训练模型后, 它将准备好进行零样本分类。在实践中, 可以像这样提示文本输入: " a video of ", 其中 是 类中的一个类别名。预测某个视频 的 的过程是找到由以下公式计算的最高相似度分数:.

跨模态分类头 (CMC): 由于动作标签在给定集合( 类)中预定义,我们可以在每次迭代中计算完整的标签特征集,从而进行跨模态特征分类。在这项工作中,我们采用了一种简单的无参数跨模态融合方法,直接使用上述公式计算余弦相似度。需要注意的是,这不同于对比学习,后者考虑的是训练批次中的视频-文本匹配,无法涵盖所有动作标签的表示。获得这些相似度后,目标是确保视频的表示与其对应标签的文本表示相似,而不是与其他类别的文本表示相似。为此,我们巧妙地将问题转化为1对的分类任务,并通过交叉熵损失对跨模态相似度分数添加分类约束。

跨模态掩码语言模型头 (CMLM): 与主要处理图像-文本配对数据的原始CLIP不同,我们的动作标签主要关注动词。为了增强CLIP的文本分支以更好地表示与动作相关的词汇并帮助文本适配器的学习,我们引入了一个额外的CMLM头,要求文本分支从其他文本和视频标记中预测被掩码的词汇。具体来说,给定逐帧视频特征 和文本特征 ,我们执行跨注意力操作以获得跨模态特征。由于文本数据量有限,直接学习这一注意力层的参数可能具有挑战性。我们解决这个问题的方法是使用文本分支中最后一个Transformer层的参数初始化这一注意力层的参数,然后冻结这些参数并在Transformer层的FFN之前添加一个文本适配器。然后我们只学习这个文本适配器的参数。过程如下:

7b64d2060003ae64b7445df0e3438814.png

其中 CA、LN和MLP 分别表示跨注意力层、层归一化和 MLP 层。然后, 我们附加一个BERT MLM 头,通过交叉摘损失来预测被掩码的词汇,如图5所示。

视觉分类头 (VC): 此外,我们在视频分支中引入了一个简单的分类头,以增强视频特征中不同类别之间的区分度。给定视频特征,我们直接附加一个线性层进行分类,并使用交叉熵损失进行训练。重要的是,通过添加这个分类头,我们可以直接使用其输出进行有监督的分类任务。添加这个分类头使得模型能够更有效地学习区分不同动作类别的视频特征。

总之,通过引入这四个学习任务,我们利用了更丰富的监督信号,引导模型更好地对齐视觉和文本模态,同时捕捉各种语义信息。这种多任务方法不仅缓解了有监督学习的性能差异,还保留了CLIP卓越的泛化能力。

3 实验

3.1 有监督实验结果

81f5cf1234348be3d168ea419d73052c.jpeg 8571a5f878bc6fc05e7f6acdc63e8621.jpeg

3.2 Zero-shot实验结果

cc94f8c2f9129a17e236ba290b89d745.jpeg

4 总结

在这个工作中,我们介绍了一种新颖的多模态、多任务自适应方法,以解决将大型视觉-语言模型CLIP转移到视频动作识别领域的挑战。我们核心的创新在于将多模态适配器和多任务解码器集成到多模态框架中,这些是我们方法成功的关键。多模态适配器专为处理视觉和文本分支而设计,使我们的模型能够有效利用这些模态中包含的丰富信息,进而有助于更好的特征提取和理解。多任务解码器是另一个关键组件,它引入了多样的学习目标,通过同时解决各种任务来促进性能的提升。我们在多个数据集上的全面实验展示了我们方法在零样本任务上的显著表现,同时在具有少量可调参数的有监督学习任务中也取得了令人满意的结果。

何恺明在MIT授课的课件PPT下载

 
 

在CVer公众号后台回复:何恺明,即可下载本课程的所有566页课件PPT!赶紧学起来!

ECCV 2024 论文和代码下载

在CVer公众号后台回复:ECCV2024,即可下载ECCV 2024论文和代码开源的论文合集

CVPR 2024 论文和代码下载

在CVer公众号后台回复:CVPR2024,即可下载CVPR 2024论文和代码开源的论文合集

Mamba、多模态和扩散模型交流群成立

 
 
扫描下方二维码,或者添加微信:CVer5555,即可添加CVer小助手微信,便可申请加入CVer-Mamba、多模态学习或者扩散模型微信交流群。另外其他垂直方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch、TensorFlow和Transformer、NeRF、3DGS、Mamba等。
一定要备注:研究方向+地点+学校/公司+昵称(如Mamba、多模态学习或者扩散模型+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

 
 
▲扫码或加微信号: CVer5555,进交流群
CVer计算机视觉(知识星球)来了!想要了解最新最快最好的CV/DL/AI论文速递、优质实战项目、AI行业前沿、从入门到精通学习教程等资料,欢迎扫描下方二维码,加入CVer计算机视觉(知识星球),已汇集近万人!

▲扫码加入星球学习
 
 
▲点击上方卡片,关注CVer公众号
整理不易,请赞和在看
### CLIP4Clip 视频片段处理使用方法 #### 安装依赖库 为了能够顺利运行CLIP4Clip开源项目中的代码,需要安装一些必要的Python包。可以通过pip工具来完成这些操作。 ```bash pip install -r requirements.txt ``` 上述命令将会依据`requirements.txt`文件自动下载并配置好环境所需的各种第三方库[^1]。 #### 数据准备 准备好视频数据集以及对应的文本描述文件。通常情况下,视频会被切割成若干个小片段存储于特定目录下;而每一段视频对应的文字说明则被整理在一个CSV或者JSON格式的文档里。确保路径设置正确以便后续加载读取。 #### 加载预训练模型 利用官方给出的方法导入已经过大规模语料训练好的CLIP网络权重参数,这一步骤简化了从零开始构建复杂架构的过程同时也提高了效率。 ```python from clip4clip.modeling import CLIP4Clip model = CLIP4Clip.from_pretrained('path_to_model') ``` 这里假设本地存在一个名为'path_to_model'的文件夹用来存放预先训练完毕后的模型资源[^2]。 #### 处理单个视频片段 当面对单独的一段影片时,可以调用下面这段脚本来实现其特征提取工作: ```python import torch from PIL import Image from torchvision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize transform = Compose([ Resize((224, 224)), CenterCrop(224), ToTensor(), Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) def process_video_clip(video_path): frames = [] # 存储截取出来的帧图像 cap = cv2.VideoCapture(video_path) while(cap.isOpened()): ret, frame = cap.read() if not ret: break img = Image.fromarray(cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)) tensor_img = transform(img).unsqueeze_(0) with torch.no_grad(): output = model.encode_image(tensor_img)[0].cpu().numpy() frames.append(output) cap.release() return np.array(frames) ``` 此函数接收一个指向目标视频的具体位置作为输入参数,并返回由各时间点处的画面经过变换映射而成的新向量组成的列表形式的结果集合。 #### 执行跨模态匹配查询 有了前面几步打下的基础之后就可以着手解决实际问题——给定某条文字指令找到最相似的那个候选选项。具体做法是在遍历所有可能的选择过程中不断累积得分直到结束为止。 ```python text_input = "a dog is running on grass" with torch.no_grad(): text_features = model.encode_text(text_input) video_scores = [] for video_id in dataset.keys(): processed_frames = process_video_clip(dataset[video_id]['file']) avg_frame_feature = np.mean(processed_frames,axis=0) score = cosine_similarity([avg_frame_feature],[text_features])[0][0] video_scores.append({'id':video_id,'score':score}) sorted_results = sorted(video_scores,key=lambda k:k['score'],reverse=True)[:top_k] print(f"Top {top_k} matched videos:") for res in sorted_results: print(res) ``` 以上程序段展示了如何基于余弦距离度量标准挑选出与指定提示最为贴切的一些备选答案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值