Flamingo论文介绍:把视觉特征向语言模型看齐
今天介绍一篇经典的多模态论文,来自NeurIPS 2022的《Flamingo: a Visual Language Model for Few-Shot Learning》 ,论文地址:https://arxiv.org/pdf/2103.00020
文章目录
- 一、Motivate
- 二、Method
- 三、模块细节:Perceiver Resampler 模块和Gated XATTN-DENSE 模块
- 3.1 Perceiver Resampler 模块(感知重采样器)
- 3.2 Gated XATTN-DENSE 模块(门控注意力模块)
- 四、数据格式
- 五、效果
一、Motivate
论文旨在桥接预训练好的视觉模型和语言模型,在不改变视觉模型和语言模型的基础上,做好两种模态模型的融合。简单来说这是一篇粘模型的工作,主要思想是将视觉模型的编码token向语言模型方向转化,使得语言模型能够直接利用视觉的token。
二、Method
Flamingo设计了两个模块达到多模态对齐, 一是 Perceiver Resampler
模块,这个模块将任意个数的输入的视觉(视频/图像)特征转换为固定个数的视觉tokens(64个);二是 Gated XATTN-DENSE
模块,将 Perceiver Resampler 输出的视觉 tokens,与新插入到 LM 中的层计算交叉注意力,从而将视觉信息注入到 LM 的生成过程中。过程中使用一个tanh做门控,使得融合更平滑缓慢。
三、模块细节:Perceiver Resampler 模块和Gated XATTN-DENSE 模块
3.1 Perceiver Resampler 模块(感知重采样器)
输入可以是图像也可以是视频,视频可以理解为多个帧的图像,在输入时,在时间维度上进行展开即可。以图像为例,输入图像后,通过一个视觉编码器(ResNet/NFNet/ViT)进行编码得到特征向量,展平,然后和64个可学习的token做交叉注意力,KV来自于视觉特征,Q来自于这64个可学习token(论文中叫做Learned latent queries
),再经过多层 Attention + FFW 处理,这样这64个queries就能学习到来自视觉的特征信息,作为视觉表征。这里的 queries 就有点类似于 ViT 中的 cls token。
视频过程可以理解为下图,其实就是把视频在时间维度上展开之后再铺平,后面的操作和图片一样。不管是视频还是图片,Learned latent queries的大小不会发生改变,都是64。
3.2 Gated XATTN-DENSE 模块(门控注意力模块)
Flamingo 将固定长度的视觉 query 注入到语言模型的方法称为 Gated xattn dense,其详细结构示意图及伪代码如下图所示。具体来说,在预训练好的 LM 的各层交替地插入一些随机初始化的交叉注意力层。所谓 gated门控,在每一新插入的层之后的残差链接之前添加一个 tanh gating,即 tanh(α) ,其中 α 是一个可学习的标量值,初始值为 0,从而保证初始化时的输出与原 LM 一致。
四、数据格式
Flamingo 的训练数据有三类:**图文交错数据集、图像文本对数据集和视频文本对数据集。**其中图文交错数据集是 Flamingo 数据的重点,其多模态 in-context learning (few-shot learning) 的能力可以说主要就是来自图文交错数据。作者收集了一个大规模图文交错数据集 M3W,通过解析 HTML 获取并标记图片在文本中的位置。
五、效果
可以通过论文中的示例图看到Flamingo的效果还是非常炸裂的,在多项任务上都有惊人的表现。当然Flaminggo也有一些待改进的地方,比如,Flamingo的输出只是单模态的文本。