0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用BLIP-2 零样本“图生文”

深度学习自然语言处理 来源:Hugging Face 2023-03-03 11:06 次阅读

本文将介绍来自 Salesforce 研究院的 BLIP-2 模型,它支持一整套最先进的视觉语言模型,且已集成入 Transformers。我们将向你展示如何将其用于图像字幕生成、有提示图像字幕生成、视觉问答及基于聊天的提示这些应用场景。

BLIP-2 模型文档:
https://hf.co/docs/transformers/main/en/model_doc/blip-2

Transformers 模型及文档:
https://hf.co/transformers

简介

近年来,计算机视觉和自然语言处理领域各自都取得了飞速发展。但许多实际问题本质上其实是多模态的,即它们同时涉及几种不同形式的数据,如图像和文本。因此,需要视觉语言模型来帮助解决一系列组合模态的挑战,我们的技术才能最终得到广泛落地。视觉语言模型可以处理的一些 图生文 任务包括图像字幕生成、图文检索以及视觉问答。图像字幕生成可以用于视障人士辅助、创建有用的产品描述、识别非文本模态的不当内容等。图文检索可以用于多模态搜索,也可用于自动驾驶场合。视觉问答可以助力教育行业、使能多模态聊天机器人,还可用于各种特定领域的信息检索应用。

现代计算机视觉和自然语言模型在能力越来越强大的同时,模型尺寸也随之显著增大。由于当前进行一次单模态模型的预训练既耗费资源又昂贵,因此端到端视觉语言预训练的成本也已变得越来越高。

BLIP-2 通过引入一种新的视觉语言预训练范式来应对这一挑战,该范式可以任意组合并充分利用两个预训练好的视觉编码器和 LLM,而无须端到端地预训练整个架构。这使得我们可以在多个视觉语言任务上实现最先进的结果,同时显著减少训练参数量和预训练成本。此外,这种方法为多模态ChatGPT 类应用奠定了基础。

BLIP-2 论文链接:
https://arxiv.org/pdf/2301.12597.pdf

BLIP-2 葫芦里卖的什么药?

BLIP-2 通过在冻结的预训练图像编码器和冻结的预训练大语言模型之间添加一个轻量级 查询 Transformer (Query Transformer, Q-Former) 来弥合视觉和语言模型之间的模态隔阂 (modality gap)。在整个模型中,Q-Former 是唯一的可训练模块,而图像编码器和语言模型始终保持冻结状态。

67e8ea1c-b91e-11ed-bfe3-dac502259ad0.pngBLIP-2 框架概览

Q-Former 是一个 transformer 模型,它由两个子模块组成,这两个子模块共享相同的自注意力层:

  • 与冻结的图像编码器交互的图像 transformer,用于视觉特征提取
  • 文本 transformer,用作文本编码器和解码器
68045db0-b91e-11ed-bfe3-dac502259ad0.pngQ-Former 架构

图像 transformer 从图像编码器中提取固定数量的输出特征,这里特征的个数与输入图像分辨率无关。同时,图像 transformer 接收若干查询嵌入作为输入,这些查询嵌入是可训练的。这些查询还可以通过相同的自注意力层与文本进行交互 (译者注: 这里的相同是指图像 transformer 和文本 transformer 对应的自注意力层是共享的)。

Q-Former 分两个阶段进行预训练。

第一阶段,图像编码器被冻结,Q-Former 通过三个损失函数进行训练:

  • 图文对比损失 (image-text contrastive loss): 每个查询的输出都与文本输出的 CLS 词元计算成对相似度,并从中选择相似度最高的一个最终计算对比损失。在该损失函数下,查询嵌入和文本不会 “看到” 彼此。
  • 基于图像的文本生成损失: 查询内部可以相互计算注意力但不计算文本词元对查询的注意力,同时文本内部的自注意力使用因果掩码且需计算所有查询对文本的注意力。
  • 图文匹配损失 (image-text matching loss): 查询和文本可以看到彼此,最终获得一个几率 (logit) 用以表示文字与图像是否匹配。这里,使用难例挖掘技术 (hard negative mining) 来生成负样本。

图像 transformer 作为一个信息瓶颈 (information bottleneck),查询嵌入经过它后,其输出嵌入已经不仅仅包含了视觉信息,而且包含了与文本相关的视觉信息。这些输出嵌入用作第二阶段 LLM 输入的视觉前缀。该预训练阶段主要涉及一个以基于图像的文本生成任务,损失函数使用因果 LM 损失。

BLIP-2 使用 ViT 作为视觉编码器。而对于 LLM,论文作者使用 OPT 和 Flan T5 模型。你可以找到在 Hugging Face Hub 上找到 OPT 和 Flan T5 的预训练 checkpoints。

在 Hugging Face Hub 中检索 BLIP-2 相关模型:
https://hf.co/models?other=blip-2

但不要忘记,如前所述,BLIP-2 设计的预训练方法允许任意的视觉主干模型和 LLM 的组合。

通过 Hugging Face Transformers 使用 BLIP-2

使用 Hugging Face Transformers,你可以轻松下载并在你自己的图像上运行预训练的 BLIP-2 模型。如果你想跑跑本文中的示例,请确保使用大显存 GPU

我们从安装 Transformers 开始。由于此模型是最近才添加到 Transformers 中的,因此我们需要从源代码安装 Transformers:

pipinstallgit+https://github.com/huggingface/transformers.git

接下来,我们需要一个输入图像。《纽约客》每周都会面向其读者举办一场 卡通字幕比赛。我们从中取一张卡通图像输入给 BLIP-2 用于测试。

卡通字母比赛链接:
https://www.newyorker.com/cartoons/contest#thisweek

importrequests
fromPILimportImage

url='https://media.newyorker.com/cartoons/63dc6847be24a6a76d90eb99/master/w_1160,c_limit/230213_a26611_838.jpg'
image=Image.open(requests.get(url,stream=True).raw).convert('RGB')
display(image.resize((596,437)))
681b0fb0-b91e-11ed-bfe3-dac502259ad0.jpgNew Yorker Cartoon

现在我们有一张输入图像了,还需要一个预训练过的 BLIP-2 模型和相应的预处理器来处理输入。你可以在 Hugging Face Hub 上找到所有可用的预训练 checkpoints 列表。这里,我们将加载一个使用 Meta AI 的预训练 OPT 模型的 BLIP-2 checkpoint,该 OPT 模型具有 27 亿个参数。

fromtransformersimportAutoProcessor,Blip2ForConditionalGeneration
importtorch

processor=AutoProcessor.from_pretrained("Salesforce/blip2-opt-2.7b")
model=Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b",torch_dtype=torch.float16)

请注意,你暂时还无法使用 Auto API (例如 AutoModelForXXX) 来加载 BLIP-2 模型,这种情况在 Hugging Face 中比较少见。你需要显式使用 Blip2ForConditionalGeneration 来加载 BLIP-2 模型。虽然自动获取模型还不能做到,但是你可以使用 AutoProcessor 来获取匹配的处理器类,在本例中为 Blip2Processor

我们可以使用 GPU 来加快文本生成速度:

device="cuda"iftorch.cuda.is_available()else"cpu"
model.to(device)

图像字幕生成

我们先看看 BLIP-2 是否可以零样本地为《纽约客》卡通图像生成字幕。要为图像添加字幕,我们不必向模型提供任何文本提示,仅提供预处理过的输入图像。没有任何文字提示,模型将从 BOS (beginning-of-sequence) 开始生成图像字幕。

inputs=processor(image,return_tensors="pt")

generated_ids=model.generate(**inputs,max_new_tokens=20)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"twocartoonmonsterssittingaroundacampfire"

对于未使用《纽约客》风格的卡通图像训练过的模型,这是一个令人印象深刻的准确描述!

有提示图片字幕生成

我们还可以通过提供文本提示来扩展图像字幕生成,模型将在给定图像的情况下接着提示词往下补充。

prompt="thisisacartoonof"

inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=20)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"twomonsterssittingaroundacampfire"
prompt="theylookliketheyare"

inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=20)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"havingagoodtime"

视觉问答

用于视觉问答时,提示必须遵循特定格式: "Question: {} Answer:"

prompt="Question:Whatisadinosaurholding?Answer:"

inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=10)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
"Atorch"

基于聊天的提示

最后,我们可以通过拼接对话中每轮的问题和回答来创建类似 ChatGPT 的体验。我们用某个提示 (比如 “恐龙拿着什么?”) 来问模型,模型会为它生成一个答案 (如 “火炬”),我们可以把这一问一答拼接到对话中。然后我们再来一轮,这样就把上下文 (context) 建立起来了。但是,需要确保的是,上下文不能超过 512 个标记,因为这是 BLIP-2 使用的语言模型 (OPT 和 T5) 的上下文长度。

context=[
("Whatisadinosaurholding?","atorch"),
("Wherearethey?","Inthewoods.")
]
question="Whatfor?"
template="Question:{}Answer:{}."

prompt="".join([template.format(context[i][0],context[i][1])foriinrange(len(context))])+"Question:"+question+"Answer:"

print(prompt)
Question:Whatisadinosaurholding?Answer:atorch.Question:Wherearethey?Answer:Inthewoods..Question:Whatfor?Answer:
inputs=processor(image,text=prompt,return_tensors="pt").to(device,torch.float16)

generated_ids=model.generate(**inputs,max_new_tokens=10)
generated_text=processor.batch_decode(generated_ids,skip_special_tokens=True)[0].strip()
print(generated_text)
Tolightafire.

结论

BLIP-2 是一种零样本视觉语言模型,可用于各种含图像和文本提示的图像到文本任务。这是一种效果好且效率高的方法,可应用于多种场景下的图像理解,特别是当训练样本稀缺时。

该模型通过在预训练模型之间添加 transformer 来弥合视觉和自然语言模态之间的隔阂。这一新的预训练范式使它能够充分享受两种模态的各自的进展的红利。

如果您想了解如何针对各种视觉语言任务微调 BLIP-2 模型,请查看 Salesforce 提供的 LAVIS 库,它为模型训练提供全面支持。

Salesforce 提供的 LAVIS 代码仓库:
https://github.com/salesforce/LAVIS

要查看 BLIP-2 的运行情况,可以在 Hugging Face Spaces 上试用其演示。

Hugging Face Spaces 中的 Salesforce BLIP-2:
https://hf.co/spaces/Salesforce/BLIP2

致谢

非常感谢 Salesforce 研究团队在 BLIP-2 上的工作,感谢 Niels Rogge 将 BLIP-2 添加到 Transformers,感谢 Omar Sanseviero 审阅这篇文章。


最后给大家推荐一下最近小编从最新的斯坦福NLP的公开课都放到了bilibili上了,都已做了中英翻译,大部分已经更新完毕了,给需要的小伙伴~是最新的呦~目录

  • 词向量

  • 神经分类器

  • 反向传播和神经网络

  • 句法结构

  • RNN

  • LSTM

  • 机器翻译、Seq2Seq和注意力机制

  • 自注意力和Transformer

  • Transformers和预训练

  • 问答

  • 自然语言生成

  • 指代消解

  • T5和大型预训练模型

  • 待更...

    审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    3643

    浏览量

    134524
  • 计算机视觉
    +关注

    关注

    8

    文章

    1698

    浏览量

    45993
  • 语言模型
    +关注

    关注

    0

    文章

    524

    浏览量

    10277
  • 自然语言处理

    关注

    1

    文章

    618

    浏览量

    13561

原文标题:使用 BLIP-2 零样本“图生文”

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    低成本低功耗的嵌入式计算机视觉平台ADZS-BF707-BLIP2

    ADZS-BF707-BLIP2,Blackfin低功耗成像平台(BLIP)评估系统是一款低成本,低功耗的嵌入式计算机视觉平台,适用于大量实时传感应用。 BLIP利用行业领先的低功耗Blackfin
    发表于 03-08 09:24

    基于直推判别字典学习的样本分类方法

    样本分类的目标是对训练阶段未出现过的类别的样本进行识别和分类,其主要思路是,借助类别语义信息,将可见类别的知识转移到未见类别中.提出了一种直推式的字典学习方法,包含以下两个步骤:首先,提出一个判别
    发表于 12-25 10:15 0次下载
    基于直推判别字典学习的<b class='flag-5'>零</b><b class='flag-5'>样本</b>分类方法

    BLIP2主板支持包

    BLIP2 Board Support Package
    发表于 03-24 16:01 0次下载
    <b class='flag-5'>BLIP2</b>主板支持包

    BLIP2电路板设计数据库

    BLIP2 Board Design Database
    发表于 03-24 16:48 2次下载
    <b class='flag-5'>BLIP2</b>电路板设计数据库

    BLIP2电路板设计数据库

    BLIP2电路板设计数据库
    发表于 06-03 20:32 0次下载
    <b class='flag-5'>BLIP2</b>电路板设计数据库

    BLIP2主板支持包

    BLIP2主板支持包
    发表于 06-05 16:45 1次下载
    <b class='flag-5'>BLIP2</b>主板支持包

    融合样本学习和小样本学习的弱监督学习方法综述

    融合样本学习和小样本学习的弱监督学习方法综述 来源:《系统工程与电子技术》,作者潘崇煜等 摘 要: 深度学习模型严重依赖于大量人工标注的数据,使得其在数据缺乏的特殊领域内应用严重受限。面对数据缺乏
    发表于 02-09 11:22 2314次阅读
    融合<b class='flag-5'>零</b><b class='flag-5'>样本</b>学习和小<b class='flag-5'>样本</b>学习的弱监督学习方法综述

    欧姆龙NX1P2样本资料

    欧姆龙NX系列样本
    发表于 06-30 14:31 0次下载

    欧姆龙NX1样本资料

    欧姆龙NX1样本资料
    发表于 06-30 14:30 0次下载

    基于深度学习的样本SAR图像目标识别

    将该框架推广到广义样本学习,并针对域偏置问题,提出了- -种基于语义知识的域检测方法。利用域检测方法可以先将未见类别和已见类别进行区分,然后用两个模型分别在两个域进行分类,从而有效缓解域偏置问题。
    发表于 12-29 14:27 663次阅读

    形状感知样本语义分割

    由于大规模视觉语言预训练取得了令人瞩目的进展,最近的识别模型可以以惊人的高准确度对任意对象进行样本和开放式分类。
    的头像 发表于 04-28 11:26 822次阅读
    形状感知<b class='flag-5'>零</b><b class='flag-5'>样本</b>语义分割

    一个通用的自适应prompt方法,突破了样本学习的瓶颈

    为了解决这个问题,这篇研究提出了一种Universal Self-adaptive Prompting (USP)方法,对LLMs的样本学习进行了优化,同时也适用于少样本学习任务。USP只需要少量
    的头像 发表于 06-01 14:48 781次阅读
    一个通用的自适应prompt方法,突破了<b class='flag-5'>零</b><b class='flag-5'>样本</b>学习的瓶颈

    什么是样本学习?为什么要搞样本学习?

    样本分类的技术目前正处于高速发展时期, 所涉及的具体应用已经从最初的图像分类任务扩展到了其他计算机视觉任务乃至自然语言处理等多个相关领域。 对此, 本文将其称为广义样本分类。 相应
    发表于 09-22 11:10 2199次阅读
    什么是<b class='flag-5'>零</b><b class='flag-5'>样本</b>学习?为什么要搞<b class='flag-5'>零</b><b class='flag-5'>样本</b>学习?

    跨语言提示:改进跨语言样本思维推理

    进一步地,提出了Cross-Lingual Self-consistent Prompting (CLSP),利用不同语言专家的知识和不同语言间更加多样的思考方式,集成了多个推理路径,显著地提高了self-consistency的跨语言性能。CLSP 都能够在CLP的基础上更进一步地有效提高
    的头像 发表于 11-08 16:59 703次阅读
    跨语言提示:改进跨语言<b class='flag-5'>零</b><b class='flag-5'>样本</b>思维推理

    ADI公司开发BLACKFIN低功耗成像平台(BLIP)

    电子发烧友网站提供《ADI公司开发BLACKFIN低功耗成像平台(BLIP).pdf》资料免费下载
    发表于 11-28 10:41 1次下载
    ADI公司开发BLACKFIN低功耗成像平台(<b class='flag-5'>BLIP</b>)