ACMMM 2021-多模态宝藏!京东梅涛团队重磅开源第一个适用于多个任务的多模态代码库x-modaler
写在前面
过去十年深度学习的发展,极大地推动了多媒体领域视觉与语言之间跨模态分析的进步。然而,目前还没有一个开源的代码库以统一和模块化的方式来支持训练和部署跨模态分析任务的神经网络模型。在这项工作中,作者提出了X-modaler——一个通用和高性能的代码库,它将SOTA的跨模态任务流程封装到几个通用阶段 。
每个阶段涵盖了目前SOTA方法广泛采用的一系列模块,并允许在不同模块之间进行无缝切换。这使得科研工作者们实现了图像字幕、视频字幕和视觉语言预训练等任务更加灵活,促进研究社区的快速发展。
同时,由于有些阶段(如跨模块态交互)的有效模块化设计是在不同的视觉语言任务中共享的,因此x-modaler可以扩展到跨模态分析中其他任务,包括视觉问题回答、视觉常识推理和跨模态检索。
论文和代码地址
X-modaler: A Versatile and High-performance Codebase for Cross-modal Analytics
论文地址:https://arxiv.org/abs/2108.08217
代码地址:https://github.com/YehLi/xmodaler
官网文档:https://xmodaler.readthedocs.io/en/latest/
Motivation
视觉和语言是人类智能的两个基本能力。人类通常通过视觉和语言之间的交互作用进行跨模态分析,能够用自然句子描述他们看到的东西(对应image captioning和 video captioning任务),基于给定的图像回答问题(对应VQA任务)。
在过去的五年里,视觉到语言一直是跨模态分析的“最热门”和快速发展的主题之一,出版物数量和工业应用都在显著增长,例如,图像/视频字幕和视觉语言预训练的新兴研究任务的出现。
尽管许多现有的视觉到语言工作已经发布了开源实现,但源代码是在不同的深度学习平台(如Caffe、TensorFlow和PyTorch)中实现的,其中大多数不是以统一的方式构建的。因此,研究人员和工程师必须基于现有的不统一的开源实现,来修改/部署他们自己的视觉-语言任务的idea/应用程序,这严重阻碍了跨模态分析的快速发展。
为了缓解这个问题,作者提出了x-modaler代码库,这是一个基于pytorch的、通用的、用户友好的和高性能的多模态代码库,通过以模块化的方式组织所有组件,可以灵活地实现SOTA的视觉语言技术。x-modaler也是目前第一个针对跨模态分析的开源代码库。
具体来说,从NLP领域的机器翻译获得灵感,视觉到语言模型的典型架构本质上是一个编码器-解码器结构。首先,将图像/视频表示为一组视觉token、CNN特征或通过预处理的高级属性 ,这些视觉表示通过编码器(如LSTM、卷积或基于转换器的编码器)进一步转换为中间状态 。
接下来,基于中间状态,利用解码器在每个时间步长对每个单词进行解码 ,然后用解码策略模块(如greedy decoding或r beam search)生成最终的输出句子 。
跨模态分析的进展很大程度上基于视觉注意力机制,这个机制触发视觉特征(由编码器转换)和文本特征(由解码器生成)之间的跨模态交互,以促进视觉语言之间的关系。因此,在SOTA的视觉-语言技术中,通常采用了一个额外的跨模态交互阶段。
然后整个编码器-解码器结构通过不同的训练策略进行优化( cross entropy loss, reinforcement learning)。此外,视觉语言的预训练模型超越了典型的编码器-解码器结构,采用了额外的预训练任务(例如,masked language modeling和masked sentence generation)。
通过上面的分析,SOTA的跨模态分析技术可以封装为七个通用阶段:
1)pre-processing,
按照这一理念,x-modaler由这七个通用阶段组成,每个阶段都被赋予了一些常用模块的功能。这种模块化设计能够灵活地实现SOTA的视觉语言算法,同时用户可以根据自己idea设计即插即用的模块来代替他们,来促进跨模态分析新模型的产生。
方法
上图展示了x-modaler七个阶段的示意图和类图。
3.1 Pre-processing
预处理阶段,将图像/视频和文本句子的输入转换为视觉和文本token。除了典型的tokenizing方法外,还包括许多模块可以选择,以不同的方式表示每个输入图像/视频:
1)直接将CNN+全连接层 的输出特征作为图像/视频特征;
3.2 Encoder
编码器阶段是将视觉/文本token作为输入,并产生中间状态来编码语义内容。通过视觉/文本embedding 对每个视觉/文本token进行转换。编码器的最典型方法是直接采用LSTM 对token序列进行顺序编码。图卷积网络(GCN) 模块可以进一步利用区域间的图结构来加强每个区域级的编码特征。
卷积模块 使用卷积操作,可以代替LSTM中的顺序建模来实现并行化。自注意力模块 ,利用Self-Attention机制,通过探索模态内特征的交互作用,增强局部(区域/帧)特征。
3.3 Cross-modal Interaction
跨模态交互阶段旨在通过鼓励两种不同模态之间更多的交互来促进视觉语言任务。Attention模块 表示基于解码器的隐藏状态来动态测量每个局部图像区域或帧的贡献的传统Attention机制。
Top-down attention模块 探索了object层面的视觉Attention。Cross Attention模块 支持视觉和文本token之间的双向交互。Meshed memory attention模块 利用 memory-augmented的注意力。X-Linear attention模块 建模了空间和通道双线性注意力的高阶交互。
3.4 Decoder
解码器阶段的目标是在每个时间步中基于编码器得到的中间状态,来解码生成每个单词。与编码器阶段的模块类似,该解码器也可以以不同的形式构建:
1)LSTM/GRU ,自动回归地生成每个单词;
3.5 Decode Strategy
解码策略阶段包括两个模块,用于在推理时生成最终的输出句子:
1)greedy decoding :在每个时间步中以最大概率采样单词,直到生成句末token或达到最大长度;
3.6 Training Strategy
在训练策略阶段,作者整理了一系列在SOTA的视觉到语言模型中采用的训练策略:
1)cross entropy :用交叉熵损失来惩罚每个单词的预测;
3.7 Pre-training
为了使编码器-解码器结构具有视觉语言预训练的多模态推理能力,作者在x-modelar中还用了预训练阶段,使用了一些经典的预训练任务:masked language masked language ,masked sentence generation , 和visual-sentence matching 。
多模态任务
Image/Video Captioning
Image/Video Captioning任务旨在根据输入图像/视频的视觉内容,自动生成描述的句子。作者在x-modelar中实现了一些SOTA的Image Captioning模型( 𝑀2 Transformer,X-LAN)和Video Captioning模型(TDConvED,Transformer),结果如下表所示:
Vision-language Pre-training (VLP)
VLP是在大规模的视觉语言基准数据集上预训练一个统一的编码器-解码器结构,然后在下游任务中微调,实现不同的任务。如上图所示,目前的VLP模型大多是一个two stream的模型:句子和图像的encoder分别获得每个模态的特征,然后 cross-modal interaction模块用于进行多模态的推理,最后decoder用于句子的生成。
Visual Question Answering (VQA)
在VQA中,模型预测了关于一个图像的给定自然语言问题的答案(也就是一个典型的分类任务),模型的结构如上图所示。该模型首先通过图像和文本编码器对图像和输入问题进行分别编码,然后进一步利用跨模态交互模块来实现整体图像问题表示。最后,利用单层MLP作为分类器,基于整体图像问题表示来预测答案。
Cross-modal Retrieval
Cross-modal Retrieval的目标是根据定一个模态样本,从库中搜索另一个模态的对应样本。很自然地,这个任务就是一个rank问题,根据学习到的图像-句子匹配分数,然后对图像/句子进行排序。图像-句子匹配得分可以直接通过图像和句子的编码特征之间的点积来获得。
Visual Commonsense Reasoning (VCR)
VCR解决了两个问题:视觉问题回答和回答理由,这要求模型分别预测答案或判断所选答案的原因。整个结构和VQA相似,首先将图片和文本分别用Encoder进行编码,然后用cross-attention进行多模态交互,最后再用分类器进行结果的分类。
总结
在本文中,作者提出了一个用于跨模态分析的通用的和高性能的代码库X-modaler。这个代码库统一了SOTA的视觉语言技术中的常用代码模块,这些模块以标准化和用户友好的方式组织起来。
通过在几个常用的语言视觉数据集(COCO、MSVD和MSR-VTT)上进行的实验,证明了x-modaler为image/video captioning任务提供了SOTA的解决方案。
▊ 作者简介
知乎/公众号:FightingCV
END,入群👇备注:ACMMM