分享

BLIP-2:下一代多模态模型的雏形

 520jefferson 2023-02-18 发布于北京

ALBEF,BLIP,BLIP2 都是 Junnan Li 大佬的杰作,给了我很大的启发。ALBEF去掉了笨重的Detector,BLIP统一了理解与生成,BLIP2再次刷新了我的认知,感谢大佬!

图片

BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

论文连接:https:///abs/2301.12597

代码仓库:https://github.com/salesforce/LAVIS/tree/main/projects/blip2

HF上的Demo:

https:///spaces/Salesforce/BLIP2

TL,DR

  1. 实现了开放性的多模态内容理解与生成,让我们有了更多的想象空间;

  2. 从新的视角去看待图文模态,引入了LLM模型。CV模型是传感器,负责感知,LLM模型是处理器,负责处理;

  3. 相对友好的计算资源,比起动辄几百张卡的大模型,BLIP 2 最大的模型也不过16张A100 40G;

  4. 传统图文任务上性能爆表;

从泰坦尼克号说起

BLIP2模型的多模态问答

开始前介绍论文前我们先来讨论下,实现图片中的问答,需要什么能力呢?

  1. 图片里发生了什么:一位男士在船头搂着一位女士。(感知-CV模型的能力)

  2. 问题问的什么:电影的结尾是什么?(感知-NLP模型的能力)

  3. 图片和电影有什么关系:这是泰坦尼克号里的经典镜头。(对齐融合-多模态模型的能力)

  4. 电影的结尾是什么:泰坦尼克号沉没了。(推理-LLM模型的能力)

对不同模型扮演角色的理解

从上面的问题可以看出,为了解决这个问题,需要几个模型配合一下。其实自从多模态模型(特别是图文多模态模型)出现,模态之间怎么配合就是个问题

ViLBERT

19年20年的时候,ViLBERT和Uniter采用了Object-Text对来提升模型对图片的理解能力。Object的引入,不可避免的需要一个笨重的检测器,去检测各种框,使得图像模态显得比较笨重。而且检测器模型不可避免的会存在漏检的问题,可以参考后来Open-Vocabulary一些工作,比如ViLD。这一阶段,显然对图像的理解是多模态的重头戏,文本更多是辅助图像任务的理解。

ViLT

到了21年22年,去掉检测器成了主流,ViLT,ALBEF,VLMo,BLIP 等等都抛弃了检测器,彻底摆脱了CNN网络的舒服,全面拥抱Transformer,当然这也得益于本身ViT模型在CV领域的大放光彩,让两个模态的有机融合成为了可能。在这一阶段,文本模态感觉已经可以和图像模态平起平坐了。从在各项具体下游任务(VQA、VG、ITR)的实际表现上来说,已经比较令人满意了。但总感觉差点味道,就是复杂推理。比如VQA上的问题,大多数是简单的逻辑计算或识别,感觉还不够智能。

那么如何实现更加复杂的推理呢?众所周知,NLP领域一直领先于CV领域的发展。得益于更丰富的语料库,NLP领域的已经拥有了一些具有初步推理能力模型的研究,特别是LLM大模型的出现。(今天谷歌刚刚发布了22B的ViT,而在NLP领域这个规模的模型应该已经不算新闻了。)我对于LLM能力有多强的理解,其实也是ChatGPT之后才有明确的感知。

BLIP2

23年1月,BLIP2出来了,引入了LLM。从图像上看,BLIP2大概由这么几个部分组成,图像(Image)输入了图像编码器(Image Encoder),得到的结果与文本(Text)在Q-Former(BERT初始化)里进行融合,最后送入LLM模型。我是学自动化出身的,从自动化的角度看看BLIP2。

  • 图像和文本:自然信号;

  • 图像编码器(Image Encoder):传感器(图像);

  • Q-Former:传感器(文本)+ 融合算法(Query);

  • LLM:处理器。

之前的模型大多都关注在了传感器和融合算法的设计上,但忽略了处理器的重要作用。BERT模型虽然能理解文本,但却没有世界观的概念,没有庞大的背景知识库,只能作一个传感器。只有LLM模型,才能实现这一角色,统一起各个模态的信号,从一个宏观的角度去看待这个问题。这里引用一段原文中的话。

Powered by LLMs (e.g. OPT (Zhang et al., 2022), FlanT5 (Chung et al., 2022)), BLIP-2 can be prompted to perform zero-shot image-to-text generation that follows natural language instructions, which enables emerging capabilities such as visual knowledge reasoning, visual conversation, etc.

目前看,或许LLM就是下一代多模态模型的关键一环。

言归正传,我们开始介绍论文。

如何统一多模态的表征

LLM本质上是个语言模型,自然无法直接接受其他模态的信息。所以如何把各个模态的信息,统一到LLM能理解的特征空间,就是第一步要解决的问题。为此,作者提出了Q-Former。

Q-Former的设计

为了融合特征,那Transformer架构是最合适不过的了。熟悉ALBEF或者BLIP的同学或许发现,Q-Former的结构和ALBEF其实很像,如果看代码的话,可以发现就是在ALBEF基础上改的。

相较于ALBEF,最大的不同,就是Learned Query的引入。可以看到这些Query通过Cross-Attention与图像的特征交互,通过Self-Attention与文本的特征交互。这样做的好处有两个:(1)这些Query是基于两种模态信息得到的;(2)无论多大的视觉Backbone,最后都是Query长度的特征输出,大大降低了计算量。比如在实际实验中,ViT-L/14的模型的输出的特征是257x1024的大小,最后也是32x768的Query特征。

这里其实有点疑问,也欢迎大家讨论。论文里是这样讲的:

This bottleneck architecture works together with our pre-training objectives into forcing the queries to extract visual information that is most relevant to the text.

作者通过Q-Former强制让Query提取文本相关的特征,但如果在推理时没有文本先验,那什么样的特征算是相关的呢?

针对Q-Former的三个训练任务分别是 Image-Text Contrastive Learning (ITC),Image-grounded Text Generation (ITG),Image-Text Matching (ITM)。其中 ITC 和 ITM 任务,与ALBEF中的实现类似,只不过图像特征改为了Query的特征,具体可以参考代码实现(ITC和ITM)。这里比较特别的是ITG任务,与ALBEF中的MLM不同,这里改成了生成整句Text的任务,类似Captioning,具体代码实现ITG。实际上,这几个任务都是以Query特征和文本特征作为输入得到的,只不过有不同的Mask组合,具体可以参考上图中的右图。

第一阶段,对于模型的训练,就是由以上三个任务组成,通过这几个任务,实现了对于特征的提取与融合。但现在模型还没见过LLM。我们现在用传感器完成了数据的提取与融合,下一步,我们得把数据转换成处理器能识别的格式。

变成LLM认识的样子

第二阶段的训练架构

通过第一阶段的训练,Query已经浓缩了图片的精华,现在要做的,就是把Query变成LLM认识的样子。

为什么不让LLM认识Query,而让Query变成LLM认识呢?这里的原因有两:(1)LLM模型的训练代价有点大;(2)从 Prompt Learning 的观点来看,目前多模态的数据量不足以保证LLM训练的更好,反而可能会让其丧失泛化性。如果不能让模型适应任务,那就让任务来适应模型。

这里作者针对两类不同LLM设计了不同的任务:

  1. Decoder类型的LLM(如OPT):以Query做输入,文本做目标;

  2. Encoder-Decoder类型的LLM(如FlanT5):以Query和一句话的前半段做输入,以后半段做目标;

为了适合各模型不同的Embedding维度,作者引入了一个FC层做维度变换。

至此,模型两阶段的训练方法就介绍完了。

训练细节

作为图文预训练的工作,工程问题往往是关键。BLIP2的训练过程主要由以下几个值得关注的点:

  1. 训练数据方面:包含常见的 COCO,VG,SBU,CC3M,CC12M 以及 115M的LAION400M中的图片。采用了BLIP中的CapFilt方法来Bootstrapping训练数据。

  2. CV模型:选择了CLIP的ViT-L/14和ViT-G/14,特别的是,作者采用倒数第二层的特征作为输出。

  3. LLM模型:选择了OPT和FlanT5的一些不同规模的模型。

  4. 训练时,CV模型和LLM都是冻结的状态,并且参数都转为了FP16。这使得模型的计算量大幅度降低。主要训练的基于BERT-base初始化的Q-Former只有188M的参数量。

  5. 最大的模型,ViT-G/14和FlanT5-XXL,只需要16卡A100 40G,训练6+3天就可以完成。

  6. 所有的图片都被缩放到224x224的大小。

实验部分

作者首先用了整整一页的篇幅,为我们展示了BLIP2的 instructed zero-shot image-to-text generation 能力。这里暂且按下不表,到后面一起讨论。我们先看看BLIP2在传统的一些图文任务上的效果。

Image Captioning

Captioning 实验结果

作者用图片配合文字 prompt “a photo of”作为模型的输入。训练过程中冻结LLM,训练Q-Former和CV模型。可以看到,在域内数据集(COCO)上,其表现并没有非常亮眼,但在域外数据集NoCaps上,BLIP2显示出了强大的泛化能力,相交之前的模型有明显的提升。

Visual Question Answering

VQA 实验结果

VQA 任务 Pipeline

训练的参数和IC任务一致,主要是Q-Former和ViT。不同的是,Q-Former和LLM都有Question作为文本输入。Q-Former的文本输入,保证了Query提取到的特征更加的精炼。

Image-Text Retrieval

Image-Text Retrieval 实验结果

ITR任务,作者只采用了第一阶段的Q-Former和ViT来做,没有引入LLM。具体的做法与ALBEF类似,先通过ITC任务算出点积相似度,再取Topk的匹配对,作ITM任务,得到最后的Matching Score。Flickr30K上再次刷新了SOTA,特别是I2T,基本饱和了。

Instructed Zero-shot Image-to-Text Generation

我觉得这个能力才是BLIP2最亮眼的地方。文章中是这样说的:

Selected examples of instructed zero-shot image-to-text generation using a BLIP-2 model w/ ViT-G and FlanT5XXL, where it shows a wide range of capabilities including visual conversation, visual knowledge reasoning, visual commensense reasoning, storytelling, personalized image-to-text generation, etc.

首先我们来看看BLIP2对信息的检索能力,下面几个例子都是对图片中物体的背景知识提问,可以看到,模型都给出了相应的答案。这里体现的实际上是LLM强大的背景知识库。图中有什么(ViT)+ 问的是什么(Q-Former,LLM)+ 找答案 (LLM)。

信息检索能力

下面的几个问题,都是要求模型对图片的内容进行进一步的推理。比如图二,需要建立对男人惊讶和鸡之间的因果联系。

事实推理能力

最后的几个问题是开放性的生成问题。需要模型有一定的长文本生成能力。

开放生成问题

为了进一步探索BLIP2模型的效果,我也自己测试了一些Demo,这里采用的是ViT-G和FlanT5的模型组合,Hugging Face 上提供的CKPT加起来有50G左右了,作为一个平时接触CV多一点的人来看,是想当炸裂的,一般我模型的CKPT和最后那个零头差不多。

模型参数文件

先介绍一下测试的输入格式,这里主要参考:

GitHub - NielsRogge/Transformers-Tutorials: This repository contains demos I made with the Transformers library by HuggingFace.

我测试了如下形式的输入样例,其中比较特别的是Incontext Learning,这里除了图片中的信息,我还会给出一段文本中的信息,希望模型通过综合两个模态的信息给出答案。

  • Single-question answering

    • Template:'Question: {} Answer:'

    • Input: [Query, Template]

  • Multi-questions answering

    • Context: 'Question: {} Answer: {}.'

    • Template: 'Question: {} Answer: '

    • Input: [Query, Context, Template]

  • Incontext Learning

    • Template: 'Context: {} Question: {}'

    • Input: [Query, Template]

  • Instructed Generation

    • Input: [Query, Command]

下面是一些测试样例以及有趣的发现。粗体为模型的输出结果。

样例:Airbus 380

首先,我们问几个简单的问题

Q: What type of aircraft is this?
A: a a380
Q: What are the characteristics of this type of aircraft?
A: the a380 is the largest commercial passenger airline.

可以看到BLIP2基本给出了正确的回答,但当我询问飞机载客量时,模型确依然给出了380,推测可能是这个飞机和380这个数字的联系比较紧密。

Q: How many people can this aircraft accommodate?
A: 380

于是,同样的问题,我们给出一点文字上的提示,这里摘取了一段Wiki上的介绍送入模型。

C: The Airbus A380 is a large wide-body airliner that was developed and produced by Airbus. It is the world's largest passenger airliner and only full-length double-deck jet airliner. Airbus studies started in 1988, and the project was announced in 1990 to challenge the dominance of the Boeing 747 in the long-haul market. The full-length double-deck aircraft has a typical seating for 525 passengers, with a maximum certified capacity for 853 passengers.
Q: How many people can the aircraft in this figure accommodate?
A: 853

这时,我们可以看到,模型成功的给出了回答。也就是说,模型有联合两个模态信息联合推理的能力。如果我们使点坏呢,比如给出错误的Context。

C: The Airbus A350 is a long-range, wide-body twin-engine jet airliner developed and produced by Airbus.
Q: What type of aircraft is this figure?
A: airbus a350

可以看到,模型输出了错误的答案。可能由于本身LLM对文字更加关注,而且Figure的概念可能对他来说并不熟悉,在他看来,32个Query只不过是带Visual信息的Word Token。

样例:交通标志

在这个样例中,我们直接让模型自己生成个问题。

Q: Give me several question about the figure.
A: What is the speed limit on the road?

接着,我们问问看,模型自己知道答案么?

Q: What is the speed limit on the road?
A: 40 mph.

可以看到,模型准确地给出了限速。接着我们让他做一些简单逻辑判断。

Q: Can I drive 70 mph here?
A: No.
Q: Can I drive 30 mph here?
A: Yes.

模型竟然都能够正确的给出答案。最后,来个OCR的任务,让模型输出牌子上写了什么。

Q: What is written on this sign?
A: speed limit 40.

模型同样也给出了正确的答案。可以看到,模型对于逻辑判断和图片中文字的识别,都有一定的基础。

样例:表格

这里先用文章中自己的表格做测试。

Q: What is the name of the table?
A: a comparison of the mri and ct scans.

Emmm,属于是自家人不认自家人了。问问他认识自己不?

Q: Do you know BLIP2?
A: BLIP2 is a protein that in humans is encoded by the BLIP2 gene.

好吧,不认识。接着又有一些问题,模型的回答也不是很好。

Q: Which model in the table performs best?
A: dcm vs dcm vs dcm vs dcm vs dcm vs dcm.
Q: How many training parameters does BLIP2 have?
A: BLIP2 has a total of ten training parameters.

原因的话,其实比较好理解,表格的图片相对于自然图像的Gap较大,模型本身可能缺乏相应的训练数据;其次,虽然32的Query使得信息变得精炼,但也使得模型的表达能力有了瓶颈,加上224x224的大小,这种小文字的识别其实是比较困难的。我们看下个例子。

样例:图表1

我们让模型自己问个问题。

Q: Give me several question about the figure
A: What is the percentage of survival for those with no adolescent treatment?

可以看到,模型提问的大致方向是可以的,比如存活率。但是图表中的Adjuvant Treatment却被识别成了adolescent treatment。这说明,模型有一定的OCR能力,但不多。尤其是对于这种比较小又不常见的文字,很容易识别错误。

样例:图表2

同样,先让模型自己问个问题。

C: Caption: Fig. 3. The hospitalization and ICU figures from our simulation.
Q: Give me several question about the figure
A: What is the population of the city?

自问自答一下。

C: Caption: Fig. 3. The hospitalization and ICU figures from our simulation.
Q: What is the population of the city?
A: NYC population 8 million.

从这里不难看出,模型其实对于常见的单词,即使图片比较小也能够很好地识别到。最后来个最难的。

Q: On day 20, approximately how many people were hospitalized?
A: 200, 000.

这个问题的要求其实挺高,需要模型根据坐标去推断数值,不出意外的回答错误了。

Limitation

首先,不可否认的是,这篇工作确实让我们的想象空间更多了,尤其是 Instructed Zero-shot Image-to-Text Generation 的能力,我觉得肯定还有没有发现的潜在能力。但我们从测试样例中也看到,模型还存在一些问题。在文章中,作者也给出了一些Bad Case,比如错误的建立联系,错误的推断依据以及过时的知识库。

Bad Case

作者在文中对自己模型的不足主要解释为,首先,

However, our experiments with BLIP-2 do not observe an improved VQA performance when providing the LLM with in-context VQA examples. We attribute the lack of in-context learning capability to our pretraining dataset, which only contains a single image-text pair per sample.

由于图文数据集大多数是一对一的匹配,所以很难让模型建立上下文的联系。

其次,

BLIP-2's image-to-text generation could have unsatisfactory results due to various reasons including inaccurate knowledge from the LLM, activating the incorrect reasoning path, or not having up-to-date information about new image content.

这个主要是由于LLM模型本身局限决定的。

除了作者提到的几点,我觉得一下几点也是可以探索的:

  1. 细粒度的识别,由于图像的信息都浓缩在了32个Query中,所以能否识别细粒度信息以及图像中重要的位置信息就成了疑问;

  2. 更多的任务,BLIP2强大zero-shot能力,能不能应用在更多的任务上,多模态的类似VG,单模态的类似Classification。

  3. 当然从传感器与处理器的角度去看,其他模态(比如Audio)也可以拿个传感器去测,然后送给处理器分析分析hhh

当然,BLIP2的能力应该还远远没有被挖掘完,等有新的认识了再分享。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多