微调BLIP2和InstructBLIP

记录一下用BLIP2跑image caption和VQA任务baseline的过程。
GitHub repo: salesforce/LAVIS (as of 2024.12.17)

环境安装

Readme里面的installation已经很久没更新了,按照上面的指示没办法把环境装好,踩了好久的坑。。。

  1. 创建虚拟环境
conda create -n lavis python=3.10
conda activate lavis
  1. 开发者模式安装lavis包
git clone https://github.com/salesforce/LAVIS.git
cd LAVIS
pip install -e .
  1. open3d报错

【报错】

ERROR: Could not find a version that satisfies the requirement open3d==0.13.0 (from salesforce-lavis) (from versions: 0.16.0, 0.17.0, 0.18.0)
ERROR: No matching distribution found for open3d==0.13.0

【解决】(refer to https://github.com/salesforce/LAVIS/issues/641)

pip install open3d>=0.13.0
  1. opencv-python和numpy不兼容

【报错】

RuntimeError: module compiled against ABI version 0x1000009 but this version of numpy is 0x2000000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/LAVIS/lavis/__init__.py", line 15, in <module>
    from lavis.datasets.builders import *
  File "/home/LAVIS/lavis/datasets/builders/__init__.py", line 8, in <module>
    from lavis.datasets.builders.base_dataset_builder import load_dataset_config
  File "/home/LAVIS/lavis/datasets/builders/base_dataset_builder.py", line 17, in <module>
    from lavis.datasets.data_utils import extract_archive
  File "/home/LAVIS/lavis/datasets/data_utils.py", line 14, in <module>
    import cv2
  File "/home/.conda/envs/lavis/lib/python3.10/site-packages/cv2/__init__.py", line 8, in <module>
    from .cv2 import *
ImportError: numpy.core.multiarray failed to import

【解决】重装opencv-python以兼容numpy 2.2.0 (refer to https://github.com/salesforce/LAVIS/issues/762)

pip uninsatll opencv-python-headless
pip cache purge # 清空package缓存
pip install opencv-python # 自动装最新版,可以和numpy 2.2.0兼容
  1. moviepy报错

【报错】

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/LAVIS/lavis/__init__.py", line 15, in <module>
    from lavis.datasets.builders import *
  File "/home/LAVIS/lavis/datasets/builders/__init__.py", line 8, in <module>
    from lavis.datasets.builders.base_dataset_builder import load_dataset_config
  File "/home/LAVIS/lavis/datasets/builders/base_dataset_builder.py", line 18, in <module>
    from lavis.processors.base_processor import BaseProcessor
  File "/home/LAVIS/lavis/processors/__init__.py", line 29, in <module>
    from lavis.processors.audio_processors import BeatsAudioProcessor
  File "/home/LAVIS/lavis/processors/audio_processors.py", line 11, in <module>
    from moviepy.editor import VideoFileClip
ModuleNotFoundError: No module named 'moviepy.editor'

【解决】requirements.txt中的moviepy没有指定版本,碰到以下报错,发现是moviepy在最新的版本中进行了重大更新(refer to MoviePy documentation — MoviePy documentation),移除了editor。解决方式为在重装低版本的moviepy(也可以对应在requirements.txt中修改)。(refer to https://zulko.github.io/moviepy/)

pip install moviepy==1.0.3 --force-reinstall
  1. transformers, peft, diffusers, huggingface_hub不兼容
    用hugging_face的transformers、diffusers包来调用LLM、VLM甚至是diffusion models来进行推理或者微调时,常用到的库包括transformers、huggingface_hub、diffusers、peft(用来微调),LAVIS在requirements.txt中指定了transformers(4.33.2)和diffusers(<)的版本,但没有指定peft和huggingface_hub的,由于peft和huggingface_hub的快速更新导致装的最新版本和分别指定的transformers和diffusers冲突,所以需要downgrade peft和huggingface_hub的版本,至于应该降到哪个版本,目前采取的方法是根据报错去看源码,找到可以兼容的源码对应的版本。。。还有一个比较蛋疼的点是,downgrade peft的时候,装peft又会自动根据peft的依赖把transformers更新到最新。。。所以 downgrade完peft又要重装指定版本的transformers。
    (refere to https://stackoverflow.com/questions/79273647/cannot-import-name-encoderdecodercache-from-transformers, …)
    (salesforce你们真的没有人来维护一下这个repo的dependencies吗!!!愤怒!!!💢)
pip install peft==0.10.0 --force-reinstall
pip install transformers==4.33.2 --force-reinstall # check了源码,这个版本的transformers要求huggingface_hub >= 0.15.0就行
pip install huggingface_hub==0.22.0 --force-reinstall

至此,运行下面的代码成功打印model_zoo,这个破环境终于算是装好了。

from lavis.models import model_zoo
print(model_zoo)
# ==================================================
# Architectures                  Types
# ==================================================
# albef_classification           ve
# albef_feature_extractor        base
# albef_nlvr                     nlvr
# albef_pretrain                 base
# albef_retrieval                coco, flickr
# albef_vqa                      vqav2
# alpro_qa                       msrvtt, msvd
# alpro_retrieval                msrvtt, didemo
# blip_caption                   base_coco, large_coco
# blip_classification            base
# blip_feature_extractor         base
# blip_nlvr                      nlvr
# blip_pretrain                  base
# blip_retrieval                 coco, flickr
# blip_vqa                       vqav2, okvqa, aokvqa
# clip_feature_extractor         ViT-B-32, ViT-B-16, ViT-L-14, ViT-L-14-336, RN50
# clip                           ViT-B-32, ViT-B-16, ViT-L-14, ViT-L-14-336, RN50
# gpt_dialogue                   base

数据准备

to fill

模型训练及推理

to fill

模型评估

to fill

### InstructBLIP 使用教程 #### 一、简介 InstructBLIP是一种先进的多模态预训练模型,能够处理复杂的视觉与语言任务。此模型基于Transformer架构并融合了多种创新机制来提升理解生成能力[^4]。 #### 二、环境搭建 为了顺利运行InstructBLIP项目,在开始之前需先安装Python依赖项。通过`requirements.txt`文件可以方便地管理这些包版本,确保所有参与者使用相同配置从而减少兼容性问题的发生[^1]。 ```bash pip install -r requirements.txt ``` #### 三、数据准备 对于大多数情况下应用InstructBLIP来说,官方提供了预处理过的公开数据集供下载链接;而对于特定应用场景,则可能需要自行收集整理相应的图片及文本描述作为输入源。 #### 四、加载预训练模型 利用Hugging Face Transformers库可以直接调用已有的InstructBLIP权重参数而无需重新训练整个网络结构: ```python from transformers import BlipForConditionalGeneration, BlipProcessor processor = BlipProcessor.from_pretrained("Salesforce/instructblip-flan-t5-xl") model = BlipForConditionalGeneration.from_pretrained("Salesforce/instructblip-flan-t5-xl") ``` #### 五、推理过程 当完成上述准备工作之后就可以进入实际操作环节——即向模型提供一张或多张图像以及相应指令(如提问),进而获得由AI生成的回答或解释说明等内容输出。 ```python url = "http://images.cocodataset.org/val2017/000000039769.jpg" image = Image.open(requests.get(url, stream=True).raw) text = "Question: how many cats are there?" inputs = processor(images=image, text=text, return_tensors="pt") generated_ids = model.generate(**inputs) result = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip() print(result) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值