NLP实践——VQA/Caption生成模型BLIP-2的应用介绍

2023-11-16

NLP实践——VQA/Caption生成模型BLIP-2的应用介绍

1. 简介

今天介绍一个跨模态模型,也是最近比较火的一个工作,叫做BLIP-2。很久很久之前我写过一个简单的image caption项目的介绍,那个模型原理比较简单,就是encode-decode模式,但是项目却不怎么好运行,而现在,随着技术的迭代升级,还有huggingface社区的加持,想实现图文生成变得方便了许多。

BLIP模型是一个对图像部分和文字部分分别编码,然后再深度交互的模型,对于模型的技术细节,本文不做过多的介绍,可以直接阅读论文,总的来说没有什么难以理解的点。

利用这个模型,你可以一键生成对图像的描述,或者询问图像中的信息,与模型进行对话等。

模型结构

下面是项目和论文的地址。

项目地址:https://github.com/salesforce/LAVIS/tree/main/projects/blip2
论文地址:https://arxiv.org/abs/2301.12597

本文将介绍如何利用huggingface的transformers模块,实现BLIP-2的调用。

2. 模型下载

目前HF上开源出来的BLIP-2有好几个模型,这里选择Salesforce/blip2-opt-6.7b作为例子进行介绍,我们进入该项目的地址:

https://huggingface.co/Salesforce/blip2-opt-6.7b/tree/main

把文件列表里的所有文件全都下载下来,放在一个目录里。因为文件比较大,所以不建议直接联网下载到hf的默认缓存区,可以像我这样下载到自定义的地址,在加载模型的时候手动指定目录即可。

模型下载
如果你迫不及待地想要体验一下在线版,可以直接进入space,直接在线操作:
https://huggingface.co/spaces/Salesforce/BLIP2

3. 运行环境

运行BLIP-2,需要最新版本的transformers模块,截至目前,已经发布的transformers的最高版本是4.26.1,我尝试使用这个版本,发现仍然没有BLIP2相关的模型,所以到git上找到开发中的版本4.27-dev。

截至目前(2023-02-16),进入git上官方transformers,你看到的transformers版本即为4.27的开发版,如果当你体验这个项目的时候,正式版已经更新,就可以跳过这一步,直接通过pip安装4.27及以上的版本:

pip install transformers==4.27

如果安装失败了,说明它还没有上线,那你需要手动安装。

    1. 通过git clone或者download zip,下载官方transformers,然后解压它,并且激活你的使用的python环境,
    1. 直接执行python setup.py,即可完成安装。
    1. 此时进入你相应地python环境,就可以成功地引用BLIP-2相关的模块了。

4. 模型应用

首先import所需的模块:

import torch
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration

然后是建模,除了模型之外,有一个processor,起到类似tokenizer的作用,既可以对文本进行tokenize,也可以将图像划分为patch:

# 其中这个路径是上文中介绍的下载的模型所存放的路径
processor = Blip2Processor.from_pretrained("your_path_to/BLIP-2-opt/")
model = Blip2ForConditionalGeneration.from_pretrained("your_path_to/BLIP-2-opt/")

我们随便读取一张图片,这里我用了一张之前我自己用disco-diffusion生成的一张图片(原本准备给自己写的小说做配图的)。

image = Image.open('./my_pic_1.png')

我的图片
对于image caption,我们只需要对图像进行操作,因为文本部分完全是由模型生成的:

# 注意,由于模型过大,我并没有把它放到GPU上
# 所以相应地在生成inputs的时候,也不要放在GPU上或者使用16精度计算
inputs = processor(images=image, return_tensors="pt") # .to(device, torch.float16)
generated_ids = model.generate(**inputs)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip()

print(generated_text)
# 'a rocky cliff with trees and water in the background'

可以看到生成的描述是比较贴切的。

然后来问它一个问题,比起caption,只需要对prompt进行tokenize:

prompt = "Question: What tree is it in the picture? Answer:"
inputs = processor(images=image, text=prompt, return_tensors="pt") #.to(device, torch.float16)
# 注意这个时候的inputs.keys()包括了'pixel_values', 'input_ids', 'attention_mask'
inputs = processor(images=image, text=prompt, return_tensors="pt") #.to(device, torch.float16)
generated_ids = model.generate(**inputs)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip()

print(generated_text)
# "It's a pine tree"

虽说它回答成了’a tree’,但是树的类型应该是对了。

参考文档:https://huggingface.co/docs/transformers/main/en/model_doc/blip-2#transformers.Blip2ForConditionalGeneration.forward.example

以上就是本文的全部内容了,如果你觉得还不错,欢迎点个一键三连加关注,我们下期再见。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NLP实践——VQA/Caption生成模型BLIP-2的应用介绍 的相关文章

  • Java常用集合分析

    ArrayList与Vector 动态数组 速度较慢 创建时可以使用initialCapacity指定初始化大小 如果不指定则数组大小默认为10 ArrayList与Vector的区别 ArrayList是线程不安全的 当多个线程访问同一个
  • matlab调整图像大小123开始—放缩比例

    imresize 调整图像大小 此 MATLAB 函数 返回图像 B 它是将 A 的长宽大小缩放 scale 倍之后的图像 输入图像 A 可以是灰度 RGB 或二值图像 如果 A 有两个以上维度 则 imresize 只调整前两个维度的大小
  • 【gitlab wiki】git首次上传本地文档操作步骤

    1 在gitLab中创建一个项目 2 进入本地电脑中的你要上传文件的文件目录 右击鼠标选择 Git Bash Here git命令窗口 本机电脑要安装好git 3 在远程git项目中 复制出项目http地址 4 在 Git Bash Her

随机推荐

  • OBJECT和EMBED标签

    OBJECT和EMBED标签 一 介绍 我们要在网页中正常显示flash内容 那么页面中必须要有指定flash路径的标 签 也就是OBJECT和EMBED标签 OBJECT标签是用于windows平台的IE浏览器的 而EMBED是用于win
  • 微信可以远程控制电脑吗_教你远程控制你的电脑

    众所周知啊 上班最尴尬的就是 你办公室的电脑还开着 可是人没了 老板看见你的电脑屏幕 打开的不是办公软件 而是游戏 电影网站 特意找了一个微信小程序能够帮你远程控制电脑锁屏 关机 甚至还能帮你操控电脑 打开关闭微信 以及各种程序 这款软件只
  • mysql 无法插入中文

    MySQL数据库默认编码已经是utf8了 default character set utf8 可是向数据库中表中插入中文时 却老是出现 xB5 xA5 xD1 xA1 for column 这样的错误 经过查阅网上类型的错误后 发现一个很
  • STM32 ADC采样不准怎么办

    最近在使用STM32L011的ADC时 发现ADC采样值极其不准确 经过查找资料 和反复测试 总算摸出点门道 如将VDDA接到VDD 那么电源的波动会极大的影响ADC精度 不过使用内部参考电压可以计算实际的VDDA电压 说明 VREFINT
  • Ubuntu 16.04下基于Anaconda安装cuda、cudnn及Pytorch

    Anaconda的基本使用见之前的博客 Ubuntu 16 04下Anaconda的安装及使用 创建虚拟环境pytorch gpu 并激活该环境 conda create name pytorch gpu python 3 6 source
  • CSS浮动(1)

    一 结构伪类选择器 1 作用与优势 作用 根据元素在HTML中的结构关系查找元素 优势 减少对于HTML中类的依赖 有利于保持代码整洁 场景 常用于查找某父级选择器中的子元素 2 选择器 选择器 说明 E first child 匹配父元素
  • python 数据库的中文乱码问题

    在使用pymssql操作sqlserver数据库时 碰到了中文乱码的问题 之前从网上查了很多 又是python编码 又是数据库编码什么的 非常乱 试了很多 好多都解决不了问题 数据库是sqlserver 先说我碰到的问题 数据库的配置cha
  • 【安卓学习之常见问题】 AAPT: error: resource drawable/ (aka xxx) not found(含as快捷键说明)

    安卓学习之常见问题 AAPT error resource drawable aka xxx not found 含as快捷键说明 相关文章 android学习开源项目之BasePopup BasePopup PopupWindow 进行二
  • c语言编程题

    include stdafx h include
  • 概念解析

    注1 本文系 概念解析 系列之一 致力于简洁清晰地解释 辨析复杂而专业的概念 本次辨析的概念是 非极大值抑制 NMS 及其改进工作 非极大值抑制 NMS 原理 缺点和改进 1 背景介绍 在计算机视觉中 物体检测是一个核心且充满挑战的问题 众
  • MQTT 协议基本介绍

    目录 一 简介 二 基本特点 三 基本概念 四 简单示例 五 进一步了解MQTT 3 六 MQTT协议的工作方式 七 MQTT控制报文 CONNECT报文 CONNACK报文 八 清除会话 保留消息和QoS的组合 九 MQTT 5 0 协议
  • Hyperledger Fabric环境搭建流程记录详解

    Fabric环境搭建记录 什么是超级账本Fabric 1 Fabric的本质 与一般区块链技术的相同点 Fabric与其他区块链技术一样 都有一个账本 和以太坊相像 也允许使用智能合约 从本质上看 它是参与者共同管理交易的系统 是联盟链的典
  • python分析excel数据-对照Excel使用Python进行数据分析,更快掌握

    Excel和Python 作为数据分析的主流工具 在从效率提升到数据商业化的整个过程中 都起到了重要作用 不管是在Excel中通过鼠标点选实现 亦或是利用Python通过代码实现 数据分析中的很多基础功能都是相通的 在数据量级大跃进的今天
  • HTTP协议原理

    一 http协议是什么 HTTP协议 全称HyperText Transfer Protocol 中文名为超文本传输协议 是互联网中最常用的一种网络协议 广泛应用于Web浏览器和Web服务器之间的应用层通信协议 在Internet上的Web
  • 基于flask与tk的网络粘贴板

    基于flask与tk的网络粘贴板 由于本人一直用 linux 所以平时和我的队友们交流代码 十分的不方便 没有办法 我就自己写一个功能简单但是特别适合我自己用的一个网络粘贴板 只有两个按钮 下载 和 上传 我的这个应用分成两个部分 一个是服
  • MFC之树形控件25

    1 树形控件 先了解相关知识 1 创建基于对话框的项目 2 删除对话框原有的内容 添加树形控件TreeControl 3 右击树形控件属性 然后添加相应属性 4 在资源视图里面右击icon文件夹 添加资源 选择icon导入预先准备好的图片
  • idea plugins一直在转圈解决方法

    方案一 配置代理 https plugins jetbrains com 然后重启idea 方案二 打开ip查看网站查看plugins jetbrains com的ip ip查看 然后将ip配置到host文件中 打开host文件 C Win
  • 胖AP与瘦AP的区别以及胖瘦AP组网的优劣对比

    一 胖瘦AP如何区分 无线AP通常可以分为胖AP Fat AP 和瘦AP Fit AP 两类 不是以外观来分辨的 而是从其工作原理和功能上来区分 当然 部分胖 瘦AP在外观上确实能分辨 比如有WAN口的一定是胖AP 胖AP除了前面提到的无线
  • 算法编程题-字符串类型题目

    1 介绍 在笔试面试中 字符串类型题目相当广泛 原因有一下几点 1 字符串可以看做是字符类型的数组 与数组的排序 查找 调整有关 2 很多其他类型的题目最终可能会转化成字符串类型的题目 2 需要掌握的几个概念 1 回文 2 子串 连续 3
  • NLP实践——VQA/Caption生成模型BLIP-2的应用介绍

    NLP实践 VQA Caption生成模型BLIP 2的应用介绍 1 简介 2 模型下载 3 运行环境 4 模型应用 1 简介 今天介绍一个跨模态模型 也是最近比较火的一个工作 叫做BLIP 2 很久很久之前我写过一个简单的image ca