ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

LAVIS 中 Img2LLM-VQA 实战指南:用冻结大语言模型实现零样本视觉问答

LAVIS 中 Img2LLM-VQA 实战指南:用冻结大语言模型实现零样本视觉问答 LAVIS 中 Img2LLM-VQA 实战指南用冻结大语言模型实现零样本视觉问答【免费下载链接】LAVISLAVIS - A One-stop Library for Language-Vision Intelligence项目地址: https://gitcode.com/gh_mirrors/la/LAVIS本指南围绕 LAVIS 官方仓库中的 projects/img2llm-vqa/README.md 展开系统讲解 Img2LLM-VQA代码中注册名为img2prompt_vqa这一即插即用模块的原理、四阶段推理流程、配置与源码实现以及零样本评测结果。读完本文你将掌握如何在 LAVIS 框架内把冻结的 LLM如 OPT用于 VQA 任务而不做端到端训练并能按步骤复现完整推理 Demo。一、背景LLM 与 VQA 之间的两重断连大语言模型LLM在零样本迁移到新任务上表现出色但将其直接用于视觉问答Visual Question Answering, VQA却并不顺利。原文档指出核心障碍在于 LLM 与 VQA 任务之间存在模态断连modality disconnection与任务断连task disconnectionLLM 只能消费文本无法直接看到图像同时 LLM 预训练任务与看图回答这一任务形态之间缺少桥接。Img2LLM 的解法是不去微调任何视觉模型或 LLM而是用一个即插即用plug-and-play模块把图像翻译成 LLM 可以理解、且贴合 VQA 任务形态的文本化 Prompt。论文题为From Images to Textual Prompts: Zero-shot VQA with Frozen Large Language ModelsJiaxian Guo、Junnan Li 等人CVPR 2023其官方实现已集成进 LAVIS对应文件为 lavis/models/img2prompt_models/img2prompt_vqa.py。二、四阶段推理流程从图像到最终答案原文档的 Demo 将 Img2LLM-VQA 推理归纳为四个步骤projects/img2llm-vqa/img2llm_vqa.ipynb 给出了完整可运行代码。下面逐阶段说明并给出对应的源码实现位置。阶段 1图像-问题匹配Image-Question Matching首先用 BLIP 图像文本匹配模型计算图像块patch相对问题文本的相关性分数。源码中对应 img2prompt_vqa.py 的forward_itm它会去除问题末尾的问号将问题 tokenize 后通过compute_gradcam来自 blip_image_text_matching.py计算 GradCAM 注意力图并把结果 reshape 后存入samples[gradcams]。samples model.forward_itm(samplessamples) gradcam samples[gradcams].reshape(24, 24) # 24x24 的注意力网格Notebook 中随后调用lavis.common.gradcam.getAttMap将注意力图叠加回原图进行可视化直观展示模型看到了哪里。阶段 2图像描述生成Image Captioning得到相关性分数后按相关性对图像块采样生成问题引导的描述question-guided captions并用 ITM 分数过滤掉与问题相关性低的噪声描述。源码中对应forward_capimg2prompt_vqa.py其关键逻辑用torch.multinomial按 gradcam 分数采样num_patches默认 20个图像块送入 BLIP Caption 模型解码生成描述用image_question_matching_model.itm_rank对每条描述打分仅保留 ITM 分数 ≥ 0.5 且不与已有描述重复的候选循环直到收集满num_captionsDemo 中为 50条。samples model.forward_cap(samplessamples, num_captions50, num_patches20) print(samples[captions][0][:5])阶段 3问题生成Question Generation从描述中抽取候选答案再以答案 上下文的形式调用 T5 模型生成合成问题synthetic questions形成 LLM 的示范样本。核心实现有两个方法answer_extractionimg2prompt_vqa.py用 spaCyen_core_web_sm对每条描述做词性标注抽取NOUN/VERB/ADJ/ADV/NUM词元、命名实体与名词短语作为候选答案按频次排序并为每个答案生成answer: %s context: %s.形式的生成输入forward_qa_generationimg2prompt_vqa.py以num_beams3、max_length30调用 T5 生成问题。samples model.forward_qa_generation(samples) print(samples[questions][:5], samples[answers][:5])阶段 4Prompt 构造与 LLM 推理最后把上下文描述Context Prompt、合成问答示范Task Prompt和原始问题拼装成一个完整 Prompt交给冻结的LLM如 OPT生成答案。源码中prompts_constructionimg2prompt_vqa.py按如下模板组装Please reason the answer of the questions according to the given contexts. Contexts:问题引导描述... 若干组 Question/Answer 示范 Question:用户问题 Answer:Notebook 中用 Transformers 加载facebook/opt-6.7b也可换成 OPT-13B/30B/66BOPT-175B 需手动下载权重将 Prompt tokenize 后调用llm_model.generate最后用postprocess_Answer截取到第一个句号/换行为止得到最终答案。示例输入 What item s are spinning which can be used to control electric?输出为 wind turbines。三、模型结构四个子模型的组合从源码结构看Img2PromptVQA是一个组合式模型from_configimg2prompt_vqa.py通过配置中的arch字段用注册表加载各子模型并自动下载问题生成模型的检查点。四个组成部分如下子模型配置字段默认预训练权重图像-问题匹配BLIP ITMimage_question_matching_modelBLIP 检索大模型COCO 微调图像描述BLIP Captionimage_captioning_modelBLIP 描述大模型COCO 微调问题生成T5question_generation_moodel原文拼写如此T5-large 微调的T5_large_QG.pth冻结 LLM外部加载如 OPT由用户按需选择完整配置见 lavis/configs/models/img2prompt-vqa/img2prompt_vqa_base.yaml关键参数包括arch: img2prompt_vqa、model_type: base注册名与模型类型ITM 与 Caption 均使用vit_type: large、image_size: 384BERT 侧配置指向 lavis/configs/models/med_large_config.jsonCaption 模型设置prompt: a picture of 作为解码前缀预处理blip_image_eval视觉处理器384 分辨率与blip_caption文本处理器。需要说明的是该实现最初名为 Img2Prompt-VQA后续论文定名 Img2LLM-VQA二者在代码中是同一个模型源码文件头部注释明确说明了这一命名演变。四、环境准备与运行 Demo安装依赖除 LAVIS 本体外Img2LLM-VQA 额外依赖 spaCy 模型用于答案抽取。Notebook 中的安装步骤为git clone https://gitcode.com/gh_mirrors/la/LAVIS pip install . pip3 install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.0.0/en_core_web_sm-3.0.0.tar.gz加载模型时会自动下载三份权重BLIP ITM、BLIP Caption、T5 QG 检查点首次运行耗时较长。加载模型与预处理import torch from PIL import Image from lavis.models import load_model_and_preprocess device torch.device(cuda if torch.cuda.is_available() else cpu) model, vis_processors, txt_processors load_model_and_preprocess( nameimg2prompt_vqa, model_typebase, is_evalTrue, devicedevice ) raw_image Image.open(./demo.png).convert(RGB) question What item s are spinning which can be used to control electric? image vis_processorseval.unsqueeze(0).to(device) question txt_processorseval samples {image: image, text_input: [question]}一键推理prepare_LLM_inputimg2prompt_vqa.py把四阶段串联为一条完整的推理入口返回(预测答案列表, 描述列表, gradcam)pred_answers, captions, gradcam model.prepare_LLM_input(samples)其中num_captions默认 50、num_patches默认 20、cap_max_length20、cap_min_length10、top_k50、top_p1、block_num7GradCAM 使用的 cross-attention 层索引。它还支持offload_modelTrue把视觉模型临时卸载到 CPU 以节省显存适合资源受限环境。注意该方法要求inference_method必须为generate且问题数量需与 batch size 一致。五、零样本评测结果原文档给出了 Img2LLM-VQA 在不同规模 OPT 下的零样本结果无需任何端到端训练并与需端到端训练的基线对照模型端到端训练VQAv2 valVQAv2 testOK-VQA testAOK-VQA valAOK-VQA testFrozen-7Bbase是29.5-5.9--Flamingo-9Bbase是-51.844.7--Flamingo-80Bbase是-56.350.6--Img2LLM-VQA-OPT13B否57.157.339.933.333.0Img2LLM-VQA-OPT30B否59.560.441.836.936.0Img2LLM-VQA-OPT66B否59.960.343.238.738.2Img2LLM-VQA-OPT175B否60.661.945.642.940.7从表中可以推断仅靠图像 → 文本化 Prompt → 冻结 LLM的链路Img2LLM-VQA 在 VQAv2 上即能超越需要端到端训练的 Frozen-7B并随 LLM 规模增大稳定提升。原文档同时说明如需复现这些评测可参考论文作者的官方复现仓库Img2LLM。六、注意事项与扩展阅读命名兼容模型注册名始终是img2prompt_vqa加载时使用load_model_and_preprocess(nameimg2prompt_vqa, model_typebase)不要使用论文名 Img2LLM。LLM 选择Demo 默认用 CPU 跑 OPT-6.7B更大模型30B/66B的 FP16 权重会随 HuggingFace 自动下载175B 需按原文档提示手动准备权重并注意Prompt 长度 生成长度 ≤ 2048的断言。依赖提示Img2PromptVQA.__init__中会执行spacy.load(en_core_web_sm)未安装该模型将直接报错。源码速览完整实现位于 lavis/models/img2prompt_models/img2prompt_vqa.py配置位于 lavis/configs/models/img2prompt-vqa/img2prompt_vqa_base.yaml端到端推理示例见 projects/img2llm-vqa/img2llm_vqa.ipynb。若论文对你有帮助可按原文档提供的 BibTeX 引用条目标注出处。【免费下载链接】LAVISLAVIS - A One-stop Library for Language-Vision Intelligence项目地址: https://gitcode.com/gh_mirrors/la/LAVIS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表