0
写在前面
过去十年深度学习的发展,极大地推动了多媒体领域视觉与语言之间跨模态分析的进步。然而,目前还没有一个开源的代码库以统一和模块化的方式来支持训练和部署跨模态分析任务的神经网络模型。在这项工作中,作者提出了X-modaler——一个通用和高性能的代码库,它将SOTA的跨模态任务流程封装到几个通用阶段 。
每个阶段涵盖了目前SOTA方法广泛采用的一系列模块,并允许在不同模块之间进行无缝切换。这使得科研工作者们实现了图像字幕、视频字幕和视觉语言预训练等任务更加灵活,促进研究社区的快速发展。
同时,由于有些阶段(如跨模块态交互)的有效模块化设计是在不同的视觉语言任务中共享的,因此x-modaler可以扩展到跨模态分析中其他任务,包括视觉问题回答、视觉常识推理和跨模态检索。
1
论文和代码地址
X-modaler: A Versatile and High-performance Codebase for Cross-modal Analytics
代码语言:javascript复制论文地址:https://arxiv.org/abs/2108.08217
代码地址:https://github.com/YehLi/xmodaler
官网文档:https://xmodaler.readthedocs.io/en/latest/
2
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,
2)encoder,
3)cross-modal interaction,
4)decoder,
5)decode strategy,
6)training strategy,
7)pre-training
按照这一理念,x-modaler由这七个通用阶段组成,每个阶段都被赋予了一些常用模块的功能。这种模块化设计能够灵活地实现SOTA的视觉语言算法,同时用户可以根据自己idea设计即插即用的模块来代替他们,来促进跨模态分析新模型的产生。
3
方法
上图展示了x-modaler七个阶段的示意图和类图。
3.1 Pre-processing
预处理阶段,将图像/视频和文本句子的输入转换为视觉和文本token。除了典型的tokenizing方法外,还包括许多模块可以选择,以不同的方式表示每个输入图像/视频:
1)直接将CNN 全连接层 的输出特征作为图像/视频特征;
2)通过Faster R-CNN 提出bottom-up的特征;
3)通过预训练的目标分类器 从视觉内容中识别目标;
4)通过Multiple Instance Learning 提取高级语义属性;
5)探索每两个区域之间的语义和空间关系 。
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 ,自动回归地生成每个单词;
2)Convolution ,充分利用卷积来解码句子;
3)Transformer ,首先通过自注意机制捕获单词依赖,通过交叉注意机制进一步捕捉视觉和语言的共同注意,促进单词的生成。
3.5 Decode Strategy
解码策略阶段包括两个模块,用于在推理时生成最终的输出句子:
1)greedy decoding :在每个时间步中以最大概率采样单词,直到生成句末token或达到最大长度;
2)beam search :一种启发式搜索算法,在每个解码时间步中维护一个包含几个最有可能的句子的beam。
3.6 Training Strategy
在训练策略阶段,作者整理了一系列在SOTA的视觉到语言模型中采用的训练策略:
1)cross entropy :用交叉熵损失来惩罚每个单词的预测;
2)label smoothing :通过估计label的边缘化效应来正则化每个分类器的预测;
3)schedule sampling :每个时间步将输入token从ground-truth token更改为前一步估计的token;
4)reinforcement learning :直接用评估时的指标作为reward,来优化整个编码器-解码器结构。
3.7 Pre-training
为了使编码器-解码器结构具有视觉语言预训练的多模态推理能力,作者在x-modelar中还用了预训练阶段,使用了一些经典的预训练任务:masked language masked language ,masked sentence generation , 和visual-sentence matching 。
4
多模态任务
Image/Video Captioning
Image/Video Captioning任务旨在根据输入图像/视频的视觉内容,自动生成描述的句子。作者在x-modelar中实现了一些SOTA的Image Captioning模型(