Blip2.0本地部署

1、LAVIS--语言视觉库简介

LAVIS(Language-Visual Pretraining, 语言视觉预训练)是一个开源的、针对多模态任务(包括图像、文本、视频等)的预训练模型库,旨在支持对视觉和语言任务的研究和开发。它是由多个深度学习模型和工具组成,能够处理多模态数据的输入和输出,主要面向图像与文本的结合使用。

LAVIS 的主要特点包括:统一和模块化接口、轻松的现成推理和特征提取、可重复的模型库和训练配方、数据集库和自动下载工具

2、BLIP

2.1Blip2简介

BLIP-2(Bootstrapping Language-Image Pretraining 2)是BLIP模型的改进版本,旨在通过更加高效和精细的方式提升视觉-语言任务的性能。BLIP-2 由 3 个模型组成:类似 CLIP 的图像编码器、查询转换器 (Q-Former) 和大型语言模型,并在多个视觉-语言任务上表现出色。它结合了视觉模型和语言模型,特别强调了视觉信息的精确获取和生成能力,从而大幅提高了任务的处理效果。


该模型可以用于以下任务:

(1)图像字幕

(2)视觉问答 (VQA)

(3)通过将图像和之前的对话作为提示输入到模型来实现类似聊天的对话

2.2 BLIP-2-OPT-2.7B介绍

本文主要介绍对BLIP-2-OPT-2.7B 进行本地部署,BLIP-2-OPT-2.7B 是 BLIP-2 系列中的一个更具体、规模更大的变种,它结合了BLIP-2的多模态学习框架和 OPT(Open Pretrained Transformer) 模型。OPT 是 Meta(前Facebook)发布的大型语言模型,它具有 2.7B 参数,专注于提升语言理解和生成能力。

该模型可以使用不同精度进行推理进而减少对内存的需求

from transformers import Blip2Processor, Blip2ForConditionalGeneration 

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

通过修改torch_dtype参数来修改精度进而修改对内存需求。

3、三步完成本地部署

3.1搭建开发环境

  请下载并安装Anaconda,然后用下面的命令创建并激活名为BLIP2的虚拟环境:

conda create -n BLIP2 python=3.9		#创建虚拟环境
conda activate BLIP2					#激活虚拟环境
python -m pip install --upgrade pip          #升级pip到最新版本
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121     
#安装对应版本的pytorch,且在此之前已经安装好适配的cuda(  https://developer.nvidia.com/cuda-toolkit  )

安装lavis语言视觉库

pip install salesforce-lavis

    期间要是提示什么库版本不正确,对应调整库的版本 ,主要是以下几个库的版本会不兼容报错,按照以下版本安装即可:

  

pip install accelerate==1.0.1
pip install bitsandbytes==0.44.1
pip install transformers==4.30.0

    建议使用python3.9版本,其他版本的python可能会导致等会使用pip安装salesforce-lavis 时出现版本不兼容现象。

3.2.将模型安装到本地

    运行以下代码把blip2-opt-2.7b模型下载到本地:

git lfs install
git clone https://huggingface.co/Salesforce/blip2-opt-2.7b

如果下载速度过慢或者网络问题可以使用以下国内镜像网站进行下载:

git clone https://hf-mirror.com/Salesforce/blip2-opt-2.7b

3.3 编写推理示例程序

  

编写blip2-opt-2.7b的推理程序,非常简单,只需要调用五个API函数:

  1. 编译并载入BLIP-2模型到指定DEVICE:Blip2ForConditionalGeneration.from_pretrained()
  2. 实例化BLIP-2模型的Processor:processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
  3. 加载和处理图像:raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')
  4. 将图像和问题转换为Token序列:processor()
  5. 生成答案的Token序列:model.generate()
  6. 解码为自然语言:processor.batch_decode()

  完整范例程序如下所示(在GPU上使用float16运行模型):

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

device = "cuda" if torch.cuda.is_available() else "cpu"
processor = Blip2Processor.from_pretrained("C:/Users/4241/blip2-opt-2.7b") #此处修改为模型的路径可以使用绝对路径
model = Blip2ForConditionalGeneration.from_pretrained(
    "C:/Users/4241/blip2-opt-2.7b", torch_dtype=torch.float16
)#此处修改为模型的路径可以使用绝对路径
model.to(device)

# 3. 加载和处理图像
img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg' 
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')

# 4. 将自然语言问题和图像转换为输入Tensor
question = "how many dogs are in the picture?"
inputs = processor(images=raw_image, return_tensors="pt").to(device, torch.float16)

# 5. 生成答案的Token序列并解码为自然语言
generated_ids = model.generate(**inputs)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip()
print(generated_text)

  运行blip2.py:

 

python blip2.py

    运行结果,如下所示: 

 

    自此BLIP-2-OPT-2.7B本地部署安装完成

    <think>好的,我需要帮助用户了解Blip-2的实际应用案例或教程。首先,根据用户提供的引用内容,引用[1]提到了使用预训练模型进行推理的代码示例,这可能与Blip相关。引用[2]讨论了模型训练的不同阶段,包括预训练和微调,这可能涉及到如何应用Blip-2。引用[3]提供了一个模型文件的下载链接,可能用于实际操作。 首先,我应该确认Blip-2的主要功能和应用场景。Blip-2通常用于图像到文本的任务,如图像描述生成、视觉问答(VQA)和多模态任务。接下来,我需要结合用户提供的引用内容,特别是引用[1]中的代码示例,这可能是一个使用Blip模型进行图像描述的实例。用户可能希望了解如何在实际项目中使用Blip-2,例如加载模型、处理输入图像、生成输出等步骤。 然后,考虑到用户可能需要教程或应用实例,我应该分步骤解释如何使用Blip-2,包括安装环境、加载预训练模型、进行推理等。同时,引用[2]提到微调和轻量化微调,这部分可能涉及如何根据特定任务调整Blip-2,比如在自己的数据集上进行微调。需要确保提供的步骤正确,并参考用户提供的链接,例如引用[3]中的模型文件,可能需要指导用户如何下载和加载这些模型。 另外,用户提供的示例中有代码块,因此我也需要提供一个清晰的代码示例,类似于快速排序的Python代码,但这里应展示Blip-2的应用代码。需要确保代码格式正确,使用正确的语法,并解释每个步骤的作用。 可能还需要考虑常见问题,例如环境配置问题、模型加载错误或处理不同输入格式的方法。此外,引用[2]中的阶段划分可能提示用户对学习路径有兴趣,因此相关问题可以包括进阶学习资源或如何将Blip-2集成到商业应用中。 最后,生成的相关问题应围绕Blip-2的实际应用、优化方法、与其他模型的对比以及商业应用展开,帮助用户进一步探索。需要确保所有回答符合格式要求,如使用中文、正确的LaTeX格式,以及引用标记。</think>### Blip-2 实战教程与应用实例 Blip-2 是一种基于多模态预训练的视觉-语言模型,广泛应用于图像描述生成、视觉问答(VQA)、跨模态检索等任务。以下是其核心应用场景及实战示例: --- #### **1. 基础应用:图像描述生成** 通过加载预训练模型,输入图像可直接生成文本描述。例如,使用以下代码进行推理: ```python from transformers import Blip2Processor, Blip2ForConditionalGeneration import torch from PIL import Image # 加载预训练模型和处理器 processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b") model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", torch_dtype=torch.float16) device = "cuda" if torch.cuda.is_available() else "cpu" model.to(device) # 输入图像并生成描述 image = Image.open("demo/cat-dog.png").convert("RGB") inputs = processor(images=image, return_tensors="pt").to(device, torch.float16) generated_ids = model.generate(**inputs, max_new_tokens=20) description = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] print(description) # 输出示例:"一只猫和一只狗在草地上玩耍" ``` 此代码展示了如何利用 Blip-2 生成图像描述[^1]。 --- #### **2. 进阶应用:视觉问答(VQA)** Blip-2 可结合图像和问题生成答案。例如,输入图像和问题“猫是什么颜色的?”: ```python question = "猫是什么颜色的?" inputs = processor(images=image, text=question, return_tensors="pt").to(device, torch.float16) generated_ids = model.generate(**inputs, max_new_tokens=10) answer = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] print(answer) # 输出示例:"棕色" ``` --- #### **3. 微调(Fine-tuning)** 若需针对特定任务优化模型(如医疗图像描述),可加载预训练权重并在自定义数据集上微调: ```python from datasets import load_dataset # 加载数据集(示例) dataset = load_dataset("your_custom_dataset") # 配置训练参数 from transformers import TrainingArguments, Trainer training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=4, num_train_epochs=3, ) trainer = Trainer( model=model, args=training_args, train_dataset=dataset["train"], ) trainer.train() ``` 微调可显著提升模型在垂直领域的表现[^2]。 --- #### **4. 轻量化部署** 为降低推理成本,可将模型转换为 ONNX 格式或使用量化技术: ```python model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", torch_dtype=torch.float16) model = torch.quantization.quantize_dynamic(model, {torch.nn.Linear}, dtype=torch.qint8) ``` 此方法适用于移动端或边缘设备部署[^3]。 ---
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值