BLIP论文阅读

介绍

BLIP和BLIP-2是Salesforce提出的两篇关于视觉语言预训练的研究论文。
感觉blip2里的QFormer和flamingo的门控注意力挺像的。看看论文是怎么个事。
参考文章:一文读懂BLIP和BLIP-2多模态预训练

BLIP正文9页。

BLIP(Bootstrapping Language-Image Pretraining)是salesforce在2022年提出的多模态框架,是理解和生成的统一。提出了一种基于预训练,联合训练视觉和语言模型来提升多模态任务的性能。
BLIP在AIGC中通常用来给图像生成prompt,好的prompt对交叉注意力的微调非常关键,例如ControlNet中的Automatic Prompt就是BLIP生成的。
       ~~~~~~       
为什么叫Bootstrapping,是因为训练数据来自网络图文对,包含大量噪声,所以增加了一个在线数据打标签和清理的任务,把处理好的数据继续用来迭代原模型。

BLIP

摘要

现有的视觉-语言预训练(VLP)模型只能处理理解型或生成型任务之一,此外性能的提升主要是通过扩大数据集规模,使用从网络上收集的噪声图像-文本对来实现的,这是一种次优的监督来源。作者提出BLIP这个新的VLP框架,它既能理解图像和文字的关系,也能根据图像生成文字描述。它通过改进字幕生成和过滤噪声数据,在多个任务中表现优异,比如图像搜索、图像描述生成和视觉问答。BLIP还能零样本迁移到视频-语言任务。

引言

视觉-语言预训练最近在各种多模态下游任务中取得了巨大成功。然而,现有方法存在两个主要局限性:
(1) 模型视角:大多数方法要么采用基于编码器的模型(CLIP),要么采用编码器-解码器模型(SimVLM)。基于编码器的模型在直接迁移到文本生成任务(如图像描述生成)时不够直观,而编码器-解码器模型尚未成功应用于图像-文本检索任务。
(2) 数据视角:大多数最先进的方法(如CLIP、ALBEF、SimVLM)从网络收集图像-文本对并进行预训练。尽管通过扩大数据集获得了性能提升,但我们的论文表明,噪声网络文本对于视觉-语言学习并非最优

我们提出了BLIP:用于统一视觉语言理解+生成的Bootstrapping语言 图像预训练方法。从模型和数据视角分别引入了两项贡献:
(a) 多模态混合编码器-解码器架构(MED):用于多任务预训练和灵活迁移学习的新模型架构。MED可以作为单模态编码器、基于图像的文本编码器或基于图像的文本解码器运行。该模型通过三种视觉-语言目标联合预训练:图像-文本对比学习、图像-文本匹配和图像条件语言建模。
(b) 字幕生成与过滤(CapFilt):通过已有数据生成更多数据的技术,用于增强数据集的质量和数量。将预训练的MED微调为两个模块:一个字幕生成器,用于为网络图像生成字幕;一个过滤器,用于从原始网络文本和生成文本中去除噪声字幕。

实验结论
• 字幕生成器与过滤器共同实现了在各种下游任务上的显著性能提升。更多样化的字幕会带来更大的收益。
• BLIP在广泛的视觉-语言任务上实现了最先进的性能,包括图像-文本检索 、图像描述、视觉问答、视觉推理和视觉对话。当迁移到两个视频-语言任务(文本到视频检索和视频问答)时,模型也实现了最先进的零样本性能。

相关工作

视觉语言预训练
视觉-语言预训练是一种通过大量图像和文本对预训练模型,以提高其在下游视觉语言任务性能的技术。由于人工标注数据成本高,研究者通常使用网络爬取的图像和文本对,但这些数据往往包含噪声。噪声的负面影响在很大程度上被忽视,被数据集规模扩大带来的性能提升所掩盖。本文提出了一种新方法CapFilt,能更有效地利用这些噪声数据。
此外,现有的模型难以同时处理图像理解和生成任务,本文提出的多模态编码器-解码器混合模型则能更好地兼顾这两类任务,并在多种任务中表现更优。

知识蒸馏
知识蒸馏(Hinton 等,2015)是一种让小模型(学生)从大模型(教师)中提取知识的方法,从而提高小模型的性能。自蒸馏是知识蒸馏的一种特殊情况,教师和学生模型的大小相同。现有的 KD 方法简单地强制学生模型与教师模型具有相同的类别预测,而CapFilt 是一种在视觉语言预训练中更有效的知识蒸馏方法,它通过生成语义丰富的字幕和过滤掉噪声字幕来提取知识。

数据增强
数据增强在图像处理中很常见,但在处理语言任务时就不那么容易了。最近,人们开始用生成模型来为语言任务创造更多数据。本研究展示了在大规模视觉语言预训练中,使用合成字幕的好处。

方法

模型架构

在这里插入图片描述
采用Vit作为图像编码器,它将输入图像分割成多个patch并将其编码为嵌入向量,同时添加一个[CLS]标记来表示全局图像特征。预训练一个兼具理解和生成能力的统一模型:多模态混合编码器-解码器模型(MED)。这是一个多任务模型,可以执行以下三种任务之一:
(1) 单模态编码器,分别对图像和文本进行编码。文本编码器与BERT相同,在文本输入的开头添加一个[CLS]标记以总结句子。
(2) 基于图像的文本编码器,通过在文本编码器的每个Transformer块中的自注意力层(SA)和前馈网络(FFN)之间插入一个额外的交叉注意力层(CA)来注入视觉信息。在文本中添加一个任务特定的[Encode]标记,并使用[Encode]的输出嵌入作为图像-文本对的多模态表示
(3) 基于图像的文本解码器,将基于图像的文本编码器中的双向自注意力层替换为因果自注意力层。使用[Decode]标记来指示序列的开始,并使用序列结束标记来指示其结束。

预训练目标

预训练过程中联合优化三个目标。每个图像-文本对需要通过计算量较大的visual transformer进行一次前向传播,需要通过text transformer进行三次前向传播,以激活不同的功能来计算以下三种损失:
图像-文本对比损失(ITC) 激活单模态编码器。该损失通过使得正样本图像-文本对具有更相似的表示来对齐视觉编码器和文本编码器的特征空间。采用Li等(2021a)的ITC损失,其中引入了动量编码器来生成特征,并从动量编码器创建软标签作为targets,以考虑负样本对中潜在的正面样本。ALBEF

到底啥是对比损失 CLIP使用交叉熵.
I_f = image_encoder(I) T_f = text_encoder(T) I_e = l2_normalize(np.dot(I_f, W_i), axis=1) T_e = l2_normalize(np.dot(T_f, W_t), axis=1) logits = np.dot(I_e, T_e.T) * np.exp(t) # symmetric loss function labels = np.arange(n) loss_i = cross_entropy_loss(logits, labels, axis=0) loss_t = cross_entropy_loss(logits, labels, axis=1) loss = (loss_i + loss_t)/2
ALBEF
在这里插入图片描述

图像-文本匹配损失(ITM) 激活基于图像的文本编码器。它旨在学习图文多模态表示,捕捉视觉和语言之间细粒度对齐。ITM是一个二分类任务,模型使用ITM头(一个线性层)来预测给定多模态特征的图文对是正样本还是负样本。为了找到更具信息量的负样本,我们采用了ALBEF的硬负样本挖掘策略,即在批次中对比相似度较高的负样本对更有可能被选中来计算损失。

语言建模损失(LM) 激活基于图像的文本解码器。其目标是根据图像生成文本描述。它优化了交叉熵损失,以自回归的方式训练模型以最大化文本概率。计算损失时应用了0.1的标签平滑。与广泛用于视觉语言预训练(VLP)的MLM损失相比LM使模型具备将视觉信息转换为连贯描述的泛化能力is that true?

为了在多任务学习时进行高效预训练,文本编码器和文本解码器共享除自注意力(SA)层之外的所有参数。原因是编码和解码任务之间的差异由SA层捕捉。具体而言,编码器采用双向自注意力来为当前输入标记构建表示,而解码器采用因果自注意力来预测下一个标记。嵌入层、交叉注意力(CA)层和前馈网络(FFN)在编码和解码任务中的功能相似,因此共享这些层可以提高训练效率,同时受益于多任务学习。

  1. 图像-文本对比损失(ITC):让模型学会区分匹配和不匹配的图像-文本对,使匹配的对在特征空间中更接近。
  2. 图像-文本匹配损失(ITM):让模型判断图像和文本是否匹配,并通过选择更难区分的负样本来提高模型的准确性。
  3. 语言建模损失(LM):让模型根据图像生成描述文本,类似于让模型“看图说话”。

    为了高效训练,文本编码器和解码器共享大部分参数,只有自注意力层不同,因为编码和解码的任务需求不同。这种方法既能提高训练效率,又能让模型同时学习多种任务。

CapFilt

在这里插入图片描述

由于标注成本过高,高质量的人工标注图像-文本对{(Ih, Th)}(例如COCO)数量有限。网络上自动收集的图像和替代文本对{(Iw, Tw)},这些替代文本通常无法准确描述图像的视觉内容,使其成为噪声信号,不利于学习视觉-语言对齐。
CapFilt方法是一种提高文本语料库质量的新方法。图3展示了CapFilt的示意图。它引入了两个模块:captioner,filter。captioner和filter都从同一个预训练的MED模型初始化,并分别在COCO数据集上进行微调。captioner根据网络图片生成描述,然后用另一个模型检查这些描述是否与图片匹配,去掉不匹配的描述。最后将过滤后的图像-文本对与人工标注的对结合,形成一个新的数据集,用于预训练一个新模型。具体来说:
1.captioner是一个基于图像的文本解码器,它通过LM目标进行微调,以根据图像解码文本。给定网络图像Iw,- captioner生成合成描述Ts,每张图像对应一个描述。
2.filter是一个基于图像的文本编码器,它通过ITC和ITM目标进行微调,以学习文本是否与图像匹配。filter会去除原始网络文本Tw和合成文本Ts中的噪声文本,如果ITM头预测文本与图像不匹配,则该文本被视为噪声。

实验

预训练

采用PyTorch实现,在两个16-GPU节点上进行预训练。
图像编码器采用在ImageNet上预训练的ViT,采用了两种ViT变体:ViT-B/16和ViT-L/16。文本编码器采用BERTbase。预训练期间随机裁剪分辨率为224×224的图像,并在微调期间将图像分辨率提高到384×384。使用与ALBEF相同的预训练数据集,总共包含1400万张图像。包括两个人工标注的数据集(COCO和Visual Genome),三个网络数据集(Conceptual Captions、Conceptual 12M、SBU captions)。还尝试了另一个网络数据集LAION,该数据集包含1.15亿张图像,带有更多噪声文本。参数:

batch=2880(ViT-B)/2400(ViT-L)
epoch=20个
优化器=AdamW,权重衰减为0.05。
lr预热到3e-4(ViT-B)/2e-4(ViT-L),并以0.85的速率线性衰减。

CapFilt的效果

在表1中比较了在不同数据集上预训练的模型,体现CapFilt在下游任务(图像-文本检索和图像描述生成)中的有效性,包括微调和零样本设置。当仅对包含1400万张图像的数据集应用描述生成器或过滤器时,可以观察到性能的提升。当两者同时应用时,它们的效果相互补充,与使用原始噪声网络文本相比,带来了显著的改进。CapFilt可以通过更大的数据集和更大的视觉骨干网络进一步提升性能,这验证了其在数据规模和模型规模上的可扩展性。此外,通过使用大型描述生成器和过滤器与ViT-L结合,基础模型的性能也能得到提升。
在这里插入图片描述

生成描述过程中,多样性比较重要

在CapFilt中,采用核采样来生成描述。核采样是一种随机解码方法,其中每个标记都是从累积概率质量超过阈值p(实验中p = 0.9)的一组标记中采样的。在表2中将其与beam search进行比较,是一种确定性解码方法,生成概率最高的描述。尽管核采样由于过滤器的高噪声比而显得更为嘈杂,但它明显带来了更好的性能。作者认为因为核采样生成的字幕更加多样和新颖,包含了更多有用的信息。而束搜索虽然生成的字幕更常见,但提供的新知识较少。

参数共享与解耦

表3评估了采用不同参数共享策略预训练的模型,结果显示,共享除自注意力层之外的所有BLIP层相比不共享参数能带来更好的性能,同时减少了模型大小提高了训练效率。如果共享自注意力层,模型的性能会因编码任务和解码任务之间的冲突而下降。 在这里插入图片描述
在CapFilt过程中,如果让生成器和过滤器共享参数,性能下降。作者将其归因于确认偏差。由于参数共享,描述生成器生成的噪声描述不太可能被过滤器过滤掉,这从较低的噪声比率(8%相比25%)可以看出。(模型认为噪声少,但实际性能却不好。)
在这里插入图片描述

与最好模型对比

图文检索任务(图像到文本检索TR和文本到图像检索IR) ( UNIMO、ALIGN、ALBEF)

数据集:COCO、Flickr30K
使用ITC和ITM损失对预训练模型进行微调。为了实现更快的推理速度,首先根据图像-文本特征相似性选择k个候选,然后根据它们的ITM分数对选定的候选进行重新排序。为COCO设置k = 256,为Flickr30K设置k = 128。如表5所示,BLIP相比现有方法实现了显著的性能提升。
使用相同的1400万张预训练图像,BLIP在COCO上的平均召回率@1比之前的最佳模型ALBEF高出+2.7%。
直接将微调于COCO的模型迁移到Flickr30K上进行零样本检索,结果如表6所示,BLIP同样以较大优势超越了现有方法。在这里插入图片描述
在这里插入图片描述

描述生成 SimVLM LEMON

Nocaps、COCO

视觉问答
自然语言视觉推理
视觉对话
零样本迁移到视频-语言任务

结论

BLIP是一个新的视觉-语言预训练框架,它在多模态理解和生成的任务上均表现非常出色。它通过从大量带有噪声的图像-文本对中提取数据,并加入模型生成描述,同时去掉不准确的描述,来训练一个多模态混合编码器-解码器模型。有几个潜在方向可以进一步提升BLIP的性能:(1)多轮数据集引导;(2)为每张图像生成多个合成标题,以进一步扩大预训练语料库;(3)通过训练多个不同的标题生成器和过滤器,并在CapFilt中结合它们的力量进行模型集成。

### 关于BLIP-2的学术论文 BLIP-2是一个多模态预训练模型,它能够理解并生成与图像相关的文本描述。该模型基于先前的工作进一步改进了视觉和语言之间的交互方式[^1]。 对于希望深入了解BLIP-2的研究人员而言,可以关注以下几篇重要的学术文章: #### 1. BLIP-2原始论文 这篇论文介绍了BLIP-2的设计理念和技术细节,包括其架构特点以及如何通过大规模数据集进行有效训练。文中还展示了多个实验结果来验证模型性能提升的原因所在。 #### 2. 多模态学习中的应用案例研究 此类文献探讨了BLIP-2在实际应用场景下的表现情况,比如自动字幕生成、图片检索等任务上取得的效果对比其他同类方法有何优势之处。 #### 3. 对比分析与其他先进模型的关系 一些学者会将BLIP-2同领域内的其他领先解决方案做横向评测,从而揭示各自优缺点及适用范围的不同。 为了获取上述提到的具体参考资料,建议访问Google Scholar或者各大期刊会议官网搜索关键词“BLIP-2”,这通常能帮助找到最新的研究成果链接。 ```python import requests from bs4 import BeautifulSoup def search_blip2_papers(): url = 'https://scholar.google.com/scholar?q=BLIP-2' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') papers = [] for item in soup.select('.gs_ri'): title = item.select_one('h3').get_text() link = item.select_one('a')['href'] snippet = item.select_one('.gs_rs').get_text() if item.select_one('.gs_rs') else '' paper_info = { "title": title, "link": link, "snippet": snippet } papers.append(paper_info) return papers[:5] papers = search_blip2_papers() for idx, paper in enumerate(papers, start=1): print(f"{idx}. {paper['title']}\n Link: {paper['link']}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值