BLIP-2: 基于冻结图像编码器和大型语言模型的语言-图像预训练引导

在语言-图像预训练领域,BLIP-2的出现标志着一项重大进展。本篇博客将深入探讨BLIP-2的背景、意义以及它如何改变零-shot语言-图像任务的格局。
在这里插入图片描述

项目地址

https://github.com/salesforce/LAVIS/tree/main/projects/blip2

BLIP-2的背景与意义

BLIP-2是BLIP-2论文的官方实现,是一种通用且高效的预训练策略,可以轻松地利用预训练视觉模型和大型语言模型(LLMs)进行语言-图像预训练。BLIP-2在零-shot VQAv2上击败了Flamingo(65.0对56.3),在零-shot字幕生成上建立了新的技术水平(在NoCaps上的121.6 CIDEr分数,相对于之前的最佳113.2)。搭载强大的LLMs(如OPT、FlanT5),BLIP-2还为各种有趣的应用解锁了新的零-shot指导的视觉到语言生成能力!
在这里插入图片描述

BLIP-2的安装与演示

安装BLIP-2非常简单,只需执行以下命令:

pip install salesforce-lavis

或者根据LAVIS指令从源代码安装。

你还可以尝试我们的笔记本演示,体验指导式的语言到图像生成。

BLIP-2模型库

BLIP-2提供了多种模型架构和类型,包括:

  • blip2_opt:用于预训练和字幕生成
  • blip2_t5:用于预训练和字幕生成
  • blip2:用于特征提取和检索

图像到文本生成示例

让我们看看如何使用BLIP-2模型执行零-shot指导式的图像到文本生成。首先,我们从本地加载样本图像:

import torch
from PIL import Image

# 设置设备
device = torch.device("cuda") if torch.cuda.is_available() else "cpu"

# 加载样本图像
raw_image = Image.open("../../docs/_static/merlion.png").convert("RGB")
display(raw_image.resize((596, 437)))

然后,我们加载一个预训练的BLIP-2模型及其预处理器(变换):

import torch
from lavis.models import load_model_and_preprocess

# 加载预训练的BLIP-2模型
model, vis_processors, _ = load_model_and_preprocess(name="blip2_t5", model_type="pretrain_flant5xxl", is_eval=True, device=device)

# 准备图像
image = vis_processors["eval"](raw_image).unsqueeze(0).to(device)

给定图像和文本提示,询问模型生成响应:

model.generate({
   "image": image, "prompt": "Question: which city is this? Answer:"})  # 'singapore'

特征提取示例

BLIP-2支持LAVIS的统一特征提取接口。

图像-文本匹配示例

BLIP-2可以使用与BLIP相同的接口计算图像-文本匹配分数。

性能评估与训练

你可以通过下载数据集并运行相应脚本来评估预训练和微调模型。训练过程分为两个阶段:从头开始的预训练和第二阶段的预训练。

引用BLIP-2

你可以在ICML会议上找到关于BLIP-2的更多信息和引用。

Hugging Face集成

BLIP-2已集成到Hugging Face Transformers库中,并且通过bitsandbytes可以利用int8量化,大大减少了加载模型所需的内存量,而不会降低性能。

以上就是BLIP-2的简要介绍和功能概览,希望能为你提供一个清晰的了解。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 06:30:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 06:30:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 06:30:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 06:30:01       20 阅读

热门阅读

  1. Form.List的使用,设置某个字段的值

    2024-01-27 06:30:01       32 阅读
  2. overflow产生的滚动条样式设置

    2024-01-27 06:30:01       39 阅读
  3. 介绍一下OpenCV中常用的图像处理函数

    2024-01-27 06:30:01       26 阅读
  4. uniapp获取定位

    2024-01-27 06:30:01       28 阅读
  5. 看书标记【数据科学:R语言实战 2】

    2024-01-27 06:30:01       28 阅读
  6. Lowest Common Ancestor

    2024-01-27 06:30:01       36 阅读
  7. 汇编中$+6的意义与理解

    2024-01-27 06:30:01       34 阅读
  8. ES系列索引、文档、集群、技术原理文章目录

    2024-01-27 06:30:01       33 阅读
  9. 【算法题】74. 搜索二维矩阵

    2024-01-27 06:30:01       28 阅读