ARTICLE DETAIL

资讯详情

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

LLaVA 视觉语言助手实战指南:图像对话、VQA 与两阶段指令微调(AI-Research-SKILLs 多模态技能)

LLaVA 视觉语言助手实战指南:图像对话、VQA 与两阶段指令微调(AI-Research-SKILLs 多模态技能) AI 技能人工智能大模型深度学习【免费下载链接】AI-Research-SKILLsComprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex/gemini agent will be an AI research agent with full horsepower. Maintained by Orchestra Research.项目地址https://gitcode.com/gh_mirrors/ai/AI-Research-SKILLs点击查看免费下载LLaVALarge Language and Vision Assistant是开源社区广泛使用的视觉语言模型它将 CLIP 视觉编码器与 Vicuna/LLaMA 语言模型通过投影层连接实现真正的看图聊天能力。本文基于 AI-Research-SKILLs 仓库中 18-multimodal/llava/ 技能文档体系系统讲解 LLaVA 的选型依据、推理管线、CLI/Gradio 部署、多轮对话、量化压缩以及从零微调自定义视觉助手的完整方案读完即可在自有数据上构建可投入使用的视觉问答与图像对话系统。LLaVA 是什么定位与适用场景LLaVA 是一个开源的视觉语言模型vision-language model核心能力是基于图像的对话式理解——用户输入一张图片和一句自然语言问题模型输出与图像内容相关的回答。它不局限于单轮问答还能在多轮对话中持续引用图像上下文属于视觉指令跟随visual instruction following路线的代表工作。在 AI-Research-SKILLs 仓库的技能路由体系中LLaVA 被归入视觉指令微调Visual instruction tuning能力路由映射见 0-autoresearch-skill/references/skill-routing.md任务类型对应技能仓库路径视觉语言模型零样本分类等CLIP18-multimodal/clip/语音识别Whisper18-multimodal/whisper/视觉指令微调 / 图像对话LLaVA18-multimodal/llava/图像描述与 VQAQ-Former 路线BLIP-218-multimodal/blip-2/何时选用 LLaVA技能文档SKILL.md明确列出的适用场景构建视觉语言聊天机器人vision-language chatbots视觉问答Visual Question Answering, VQA图像描述与打标image description / captioning多轮图像对话multi-turn image conversations视觉指令跟随visual instruction following含图片的文档理解document understanding with images何时应选用其他方案文档同时给出了替代方案便于在任务规划阶段做正确取舍替代方案适用理由GPT-4V质量最高但依赖 API 调用非本地开源CLIP简单场景的零样本分类无需训练数据BLIP-2纯图像描述captioning任务表现更聚焦Flamingo研究性质未开源难以直接部署选型结论当任务核心是与图像进行对话式交互、指令跟随或多轮追问时LLaVA 是最贴合的开源选择如果只是给图片打标签或做相似度检索应优先考虑 CLIP 技能如果只需要高质量的图像描述可对比 BLIP-2 技能。快速上手安装与最小推理管线环境安装LLaVA 以源码方式安装依赖transformers、torch、pillow与技能 frontmatter 中声明的dependencies一致# 克隆上游 LLaVA 官方仓库地址以官方发布为准并进入目录 git clone LLaVA 上游仓库地址 cd LLaVA # 安装依赖与本地包 pip install -e .加载模型并完成一次图像问答这是技能文档给出的最小可运行推理管线涉及 LLaVA 工具链的四个核心模块llava.model.builder.load_pretrained_model按路径加载 tokenizer、模型与图像处理器llava.mm_utils的get_model_name_from_path/process_images/tokenizer_image_token负责从路径推断模型名、预处理图像、把图像占位符嵌入 prompt 并转成 tokenllava.constants的IMAGE_TOKEN_INDEX/DEFAULT_IMAGE_TOKEN图像 token 的索引与占位符文本llava.conversation.conv_templates对话模板管理决定角色名与消息格式。from llava.model.builder import load_pretrained_model from llava.mm_utils import get_model_name_from_path, process_images, tokenizer_image_token from llava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN from llava.conversation import conv_templates from PIL import Image import torch # 1. 加载模型 model_path liuhaotian/llava-v1.5-7b tokenizer, model, image_processor, context_len load_pretrained_model( model_pathmodel_path, model_baseNone, model_nameget_model_name_from_path(model_path) ) # 2. 加载并预处理图像 image Image.open(image.jpg) image_tensor process_images([image], image_processor, model.config) image_tensor image_tensor.to(model.device, dtypetorch.float16) # 3. 构造对话llava_v1 模板 图像占位符 conv conv_templates[llava_v1].copy() conv.append_message(conv.roles[0], DEFAULT_IMAGE_TOKEN \nWhat is in this image?) conv.append_message(conv.roles[1], None) # 助手消息留空等待生成 prompt conv.get_prompt() # 4. 将 prompt 转为输入 token图像占位符映射为 IMAGE_TOKEN_INDEX input_ids tokenizer_image_token( prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensorspt ).unsqueeze(0).to(model.device) # 5. 生成回答 with torch.inference_mode(): output_ids model.generate( input_ids, imagesimage_tensor, do_sampleTrue, temperature0.2, max_new_tokens512 ) response tokenizer.decode(output_ids[0], skip_special_tokensTrue).strip() print(response)关键点图像不是作为附件传给模型而是通过DEFAULT_IMAGE_TOKEN占位符嵌入到 prompt 中再由tokenizer_image_token替换为IMAGE_TOKEN_INDEX对应的视觉 token 序列这与 LLaVA 把视觉特征对齐进语言模型词表的架构设计直接对应。temperature0.2偏向确定性与事实性回答适合 VQA需要更多样化的表述时可上调。模型选型可用模型与显存权衡技能文档给出了三档官方模型覆盖从消费级 GPU 到多卡 A100 的场景模型参数量显存占用FP16 推理质量档位LLaVA-v1.5-7B7B~14 GBGoodLLaVA-v1.5-13B13B~28 GBBetterLLaVA-v1.6-34B34B~70 GBBest# 加载不同规模的模型 model_7b liuhaotian/llava-v1.5-7b model_13b liuhaotian/llava-v1.5-13b model_34b liuhaotian/llava-v1.6-34b # 4-bit 量化以降低显存文档标注约可减少 ~4× 显存 load_4bit Trueload_pretrained_model的load_4bit/load_8bit参数由底层transformers的 bitsandbytes 量化能力支撑# 4-bit 量化显存约降至 1/4 tokenizer, model, image_processor, context_len load_pretrained_model( model_pathliuhaotian/llava-v1.5-13b, model_baseNone, model_nameget_model_name_from_path(liuhaotian/llava-v1.5-13b), load_4bitTrue # Reduces VRAM ~4× ) # 8-bit 量化显存约降至 1/2 load_8bit True配合文档给出的 A100 实测性能参考以下为技能文档标注的参考值模型VRAMFP16VRAM4-bit速度tokens/s7B~14 GB~4 GB~2013B~28 GB~8 GB~1234B~70 GB~18 GB~5注上表以 A100 GPU 为参考环境。实际显存与吞吐受输入图像分辨率、对话长度、量化实现版本影响建议按本机 GPU 实测为准。三种使用方式CLI、Gradio Web UI 与代码集成CLI 单图问答# 单张图片单次查询 python -m llava.serve.cli \ --model-path liuhaotian/llava-v1.5-7b \ --image-file image.jpg \ --query What is in this image? # 多轮交互模式不传 --query进入交互式命令行 python -m llava.serve.cli \ --model-path liuhaotian/llava-v1.5-7b \ --image-file image.jpg # 随后在终端逐条输入问题即可连续对话Gradio Web UI# 启动 Gradio 界面服务 python -m llava.serve.gradio_web_server \ --model-path liuhaotian/llava-v1.5-7b \ --load-4bit # 可选以 4-bit 量化加载降低显存 # 浏览器访问 http://localhost:7860--load-4bit对应load_pretrained_model(load_4bitTrue)适合显存受限的 GPU 环境Web UI 模式下同样支持多轮对话历史。集成进 LangChain技能文档给出了把 LLaVA 包装成 LangChainLLM子类的最小模板——核心是在_call中接入前文完整的推理管线构造对话、注入图像 token、model.generate从而把 LLaVA 作为 Agent 链中的视觉问答节点from langchain.llms.base import LLM class LLaVALLM(LLM): def _call(self, prompt, stopNone): # 在此接入前文的 LLaVA 推理管线构造 conv → 图像 token 注入 → generate return response llm LLaVALLM()封装为 Gradio 聊天应用import gradio as gr def chat(image, text, history): response ask_llava(model, image, text) # 复用前文推理函数 return response demo gr.ChatInterface( chat, additional_inputs[gr.Image(typepil)], titleLLaVA Chat ) demo.launch()gr.Image(typepil)会直接把上传的图片转换为 PIL Image 对象恰好匹配process_images的输入类型是四种集成方式中改造量最小的一种。多轮对话对话模板的累积机制LLaVA 的多轮能力建立在conv_templates的消息累积机制上每一轮都把用户问题 助手回答追加进同一个conv对象再通过get_prompt()重新拼出完整对话文本。技能文档给出的完整三轮示例# 初始化对话复制模板避免污染全局 conv conv_templates[llava_v1].copy() # Turn 1 conv.append_message(conv.roles[0], DEFAULT_IMAGE_TOKEN \nWhat is in this image?) conv.append_message(conv.roles[1], None) response1 generate(conv, model, image) # 例如 A dog playing in a park # Turn 2把上一轮回答写回消息列表再追加新问题 conv.messages[-1][1] response1 conv.append_message(conv.roles[0], What breed is the dog?) conv.append_message(conv.roles[1], None) response2 generate(conv, model, image) # 例如 Golden Retriever # Turn 3 conv.messages[-1][1] response2 conv.append_message(conv.roles[0], What time of day is it?) conv.append_message(conv.roles[1], None) response3 generate(conv, model, image)其中generate(conv, model, image)是文档中为演示而抽象出的辅助函数实际等价于前文最小推理管线中从conv.get_prompt()到model.generate的完整流程。实现要点是每轮都要先执行conv.messages[-1][1] response回填上一轮生成结果否则模板拼接出的历史会把助手回答留空导致上下文断裂。常见任务模式五类典型提问技能文档归纳了五类可直接套用的提问模板ask(model, image, question)同样指代前文推理管线# 1. 图像描述captioning question Describe this image in detail. # 2. 视觉问答VQA question How many people are in the image? # 3. 文本化目标列举textual object detection question List all the objects you can see in this image. # 4. 场景理解 question What is happening in this scene? # 5. 文档理解传入文档截图 question What is the main topic of this document? response ask(model, document_image, question)文档特别提示提问越具体回答质量越高Clear prompts - Specific questions get better answers。例如把What is in this image?细化为How many people are in the image?可显著降低模型的自由发挥空间、减少幻觉。性能与基准测试技能文档记录了 LLaVA 在主流多模态基准上的表现下述数值以文档标注为准具体取决于模型版本与评测配置基准得分VQAv278.5%GQA62.0%MM-Vet35.4%MMBench64.3%同时文档也明确列出了 LLaVA 的已知局限选型与验收时必须纳入考量幻觉Hallucinations可能描述图像中不存在的内容关键场景需人工复核空间推理弱对精确位置左上角第二个物体判断不稳定小字号文本难以读取图像中的细小文字文档 OCR 类任务需谨慎目标计数不精确物体数量较多时计数不可靠显存门槛FP16 下 7B 也需要 ~14 GB 显存消费级显卡依赖量化推理速度慢于纯编码器模型如 CLIP不适合高频低延迟检索场景。自定义微调两阶段训练管线LLaVA 的训练遵循两阶段范式完整配置与数据规范见配套文档 18-multimodal/llava/references/training.md。阶段一特征对齐预训练目的把 CLIP 视觉编码器的输出特征与语言模型的词嵌入空间对齐训练对象主要是视觉-语言投影层projector。配置项取值数据558K 图像-描述对CC3M 子集基座语言模型Vicuna-7B 或 LLaMA-2-7B视觉编码器CLIP ViT-L/14训练耗时约 20 小时8× A100# 下载官方预训练投影层或从零开始训练 bash scripts/v1_5/pretrain.sh阶段二视觉指令微调目的在 150K GPT 生成的多模态指令数据上微调教会模型遵循视觉指令、组织多轮对话。配置项取值数据150K GPT 生成的多模态指令数据Epochs1Batch size128跨 8 卡学习率2e-5训练耗时约 24 小时8× A100# 使用指令数据微调 bash scripts/v1_5/finetune.sh指令数据格式JSON微调数据采用conversations多轮对话结构from字段区分human与gptvalue中通过image标记图像插入位置[ { id: 001, image: path/to/image.jpg, conversations: [ { from: human, value: image\nWhat is in this image? }, { from: gpt, value: The image shows a dog playing in a park. }, { from: human, value: What breed is the dog? }, { from: gpt, value: It appears to be a Golden Retriever. } ] } ]image占位符与推理时的DEFAULT_IMAGE_TOKEN语义一致训练时该位置被替换为视觉特征序列实现图文输入的统一建模。构造自定义数据集import json # 从自有数据生成指令格式数据集 data [] for image_path, qa_pairs in your_dataset: conversations [] for q, a in qa_pairs: conversations.append({from: human, value: fimage\n{q}}) conversations.append({from: gpt, value: a}) data.append({ id: str(len(data)), image: image_path, conversations: conversations }) # 保存为标准指令格式 with open(custom_data.json, w) as f: json.dump(data, f, indent2)DeepSpeed 微调脚本完整参数在预训练模型上做全量指令微调时技能文档给出了可直接运行的 DeepSpeed 脚本模板其中大部分参数直接决定训练效果与显存占用#!/bin/bash # 设置路径 DATA_PATHcustom_data.json IMAGE_FOLDERpath/to/images MODEL_PATHliuhaotian/llava-v1.5-7b OUTPUT_DIR./checkpoints/llava-custom # 微调 deepspeed llava/train/train_mem.py \ --deepspeed ./scripts/zero2.json \ --model_name_or_path $MODEL_PATH \ --version v1 \ --data_path $DATA_PATH \ --image_folder $IMAGE_FOLDER \ --vision_tower openai/clip-vit-large-patch14-336 \ --mm_projector_type mlp2x_gelu \ --mm_vision_select_layer -2 \ --mm_use_im_start_end False \ --mm_use_im_patch_token False \ --image_aspect_ratio pad \ --group_by_modality_length True \ --bf16 True \ --output_dir $OUTPUT_DIR \ --num_train_epochs 1 \ --per_device_train_batch_size 16 \ --per_device_eval_batch_size 4 \ --gradient_accumulation_steps 1 \ --evaluation_strategy no \ --save_strategy steps \ --save_steps 50000 \ --save_total_limit 1 \ --learning_rate 2e-5 \ --weight_decay 0. \ --warmup_ratio 0.03 \ --lr_scheduler_type cosine \ --logging_steps 1 \ --tf32 True \ --model_max_length 2048 \ --gradient_checkpointing True \ --dataloader_num_workers 4 \ --lazy_preprocess True \ --report_to wandb关键参数说明结合训练文档与脚本结构参数作用与建议--deepspeed ./scripts/zero2.json启用 ZeRO-2 分片支撑 8 卡分布式训练--vision_tower openai/clip-vit-large-patch14-336视觉编码器与 LLaVA-v1.5 官方配置一致336 分辨率--mm_projector_type mlp2x_gelu两层 GELU 激活的 MLP 投影层连接视觉与语言特征--mm_vision_select_layer -2取 CLIP 倒数第二层输出作为视觉特征--image_aspect_ratio pad图像按纵横比 padding 到方形网格适配不同长宽比图片--bf16 Truebfloat16 混合精度A100/H100 上显存减半且更稳--learning_rate 2e-5/--lr_scheduler_type cosine与官方指令微调一致的余弦退火学习率--warmup_ratio 0.033% 步数线性预热稳定训练初期--model_max_length 2048序列上限兼顾图文输入与对话历史--gradient_checkpointing True激活重计算显著降低激活显存--lazy_preprocess True懒加载预处理避免一次性把全部图像读入内存--group_by_modality_length True按是否含图分组 padding减少纯文本样本的显存浪费--report_to wandb日志上报到 Weights Biases可改为 tensorboardLoRA 低秩微调省显存方案当 GPU 资源有限时用 PEFT 的 LoRA 冻结基座、只训练低秩适配器文档标注可带来约 10× 的内存节省from peft import LoraConfig, get_peft_model # LoRA 配置 lora_config LoraConfig( r8, # LoRA 秩 lora_alpha16, # 缩放系数 target_modules[q_proj, v_proj], # 仅微调注意力 Q/V 投影 lora_dropout0.05, biasnone, task_typeCAUSAL_LM ) # 应用 LoRA model get_peft_model(base_model, lora_config) # 以远低于全量微调的内存开始训练r8表示低秩矩阵的秩为 8lora_alpha16控制更新幅度实际缩放为 alpha/r只选q_proj、v_proj是兼顾效果与显存的主流实践。硬件需求对照方案7B 模型13B 模型训练耗时全量微调8× A100 (40GB)8× A100 (80GB)20–48 小时LoRA 微调1× A100 (40GB)2× A100 (40GB)10–24 小时训练最佳实践训练文档从预训练权重起步不要从零训练——两阶段管线已经替你完成了特征对齐优先 LoRA约 10× 内存节省效果接近全量微调质量优先于数量1K 高质量指令样本通常优于 10K 低质量样本多轮对话优于单轮问答更贴近真实使用形态图像多样性覆盖不同场景、分辨率与长宽比指令要明确具体的问题描述带来更可控的生成监控 loss 平滑下降异常波动及时排查数据定期保存 checkpoint--save_strategy steps训练失败可回滚在留出集上定期评测避免过拟合训练分布多卡训练使用 DeepSpeed即脚本中的zero2.json配置。推理侧最佳实践清单技能文档给出的推理侧 8 条实践可直接作为生产接入的检查清单从 7B 模型起步质量够用、显存可控优先 4-bit 量化显著降低显存门槛必须使用 GPUCPU 推理极慢不适合交互场景提示词要清晰具体问题得到更好答案善用多轮对话上下文累积提升追问质量temperature 取 0.2–0.7平衡创造力与一致性max_new_tokens 取 512–1024为详细回答留足长度批量处理多图场景按顺序批量推理避免显存峰值。在 AI 研究流程中的定位与延伸阅读在本仓库的 AI 研究技能体系中LLaVA 属于 18-multimodal/ 多模态类别承担图像对话 / 视觉指令微调职能路由说明见 0-autoresearch-skill/references/skill-routing.md。与之配合使用的相邻技能包括CLIP 技能零样本图像分类、图文相似度检索可作为 LLaVA 的快速预筛模块BLIP-2 技能Q-Former 路线的图像描述与 VQA作为 captioning 任务的对照方案Whisper 技能语音模态扩展多模态 Agent 的输入能力。如需深入两阶段训练的实现细节、数据规范与更多参数组合请直接阅读仓库内的 18-multimodal/llava/references/training.md技能元信息适用场景、依赖、标签可查看 18-multimodal/llava/SKILL.md 的 YAML frontmatter。技能库的整体结构约定见 CLAUDE.md。总结从选型、推理、部署到两阶段微调LLaVA 技能文档提供了一条完整可落地的视觉语言助手建设路径——推理侧注意显存与量化的权衡、多轮对话中正确维护对话模板训练侧坚持预训练对齐 指令微调两阶段、资源受限时切到 LoRA即可在自有数据集上快速得到可用的图像对话模型。赞分享AI 技能人工智能大模型深度学习【免费下载链接】AI-Research-SKILLsComprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude code/codex/gemini agent will be an AI research agent with full horsepower. Maintained by Orchestra Research.项目地址https://gitcode.com/gh_mirrors/ai/AI-Research-SKILLs点击查看免费下载相关推荐如何利用Figma MCP Server打造沉浸式增强现实设计体验终极完整指南如何利用Figma MCP Server打造沉浸式增强现实设计体验终极完整指南 Figma MCP Server是一个革命性的设计到代码转换工具它通过将FiAI 技能AI 插件为什么说Prompts-for-edu是教育公平的终极武器为什么说Prompts for edu是教育公平的终极武器 在当今数字时代教育公平面临着前所未有的挑战与机遇。Prompts for edu作为一个开源的教多模态GPT视觉与语言指令的智能对话伙伴多模态GPT视觉与语言指令的智能对话伙伴 在人工智能领域多模态模型正逐渐成为理解和生成复杂信息的关键工具。基于开放源代码的 OpenFlamingo htt上一篇DIB-R性能评估IoU计算与Chamfer距离的实现方法下一篇B站直播弹幕过滤接口详解哔哩哔哩-API收集整理中的内容净化功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表