LLaVA-v1.5-13B图像理解原理剖析:一张图片如何变成576个视觉Token进入大语言模型

📅 2026/8/23 14:49:45
LLaVA-v1.5-13B图像理解原理剖析:一张图片如何变成576个视觉Token进入大语言模型
LLaVA-v1.5-13B图像理解原理剖析一张图片如何变成576个视觉Token进入大语言模型【免费下载链接】llava-v1.5-13b项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/llava-v1.5-13bLLaVA-v1.5-13B 是目前最受欢迎的开源多模态大语言模型之一专注于图像理解任务。当你给它一张照片并提问图里有什么时模型并不是直接看像素而是先把图片转换成576 个视觉 Token再和文字一起喂给 13B 大语言模型。本文带你用 5 个阶段拆解一张图片 → 576 个视觉 Token → 进入 LLM的完整链路无需数学基础新手也能看懂。一、为什么图片必须先变成视觉Token大语言模型LLM天生只认识一维的 Token 序列——文字可以被分词器切成一个一个的 Token但图片不行。LLaVA 的解决方案很巧妙图片 → 视觉编码器CLIP ViT→ 576 个 1024 维向量 → MLP 投影器mm_projector→ 576 个5120 维向量→ 替换文本中的image占位符 → 送入 LLaMA-2-13B 生成回答从这一刻起图片在模型眼中就是一段长度为 576 的特殊词汇序列与文字 Token 完全平等地参与注意力计算。二、5个阶段LLaVA图片转视觉Token的完整流程阶段1图片缩放为 336×336config.json 中mm_vision_tower指定使用openai/clip-vit-large-patch14-336即 CLIP 视觉塔要求输入336×336的方形图片。image_aspect_ratio: pad表示非正方形图片会被填充padding成方形而非裁剪。阶段2切成 576 块 14×14 的图块 CLIP ViT 以14×14 像素为一个 Patch 进行切分336 ÷ 14 24横向336 ÷ 14 24纵向24 × 24 576 个 Patch✅这就是576的由来——每个 Patch 将最终对应 1 个视觉 Token。作为对比早期 224 分辨率模型只能得到 16×16 256 个 Token576 意味着更细的空间分辨率。阶段3CLIP视觉塔提取 1024 维特征每个 Patch 被送入 CLIP ViT-Large 提取特征得到 1024 维向量对应 config.json 中的mm_hidden_size: 1024。两个关键配置值得注意mm_vision_select_layer: -2取视觉塔倒数第 2 层的输出倒数第 1 层偏向预测倒数第 2 层语义更均衡mm_vision_select_feature: patch只取Patch 级特征丢弃 CLS 全局向量——这正是保留 576 个位置信息的做法阶段4mm_projector 完成跨模态翻译 ⭐这是 LLaVA 最核心的创新模块。视觉特征1024 维和 LLM 的词嵌入空间5120 维维度不同必须对齐语言空间。config.json 中mm_projector_type: mlp2x_gelu定义了这是一个两层 MLPLinear(1024 → 5120) → GELU 激活 → Linear(5120 → 5120)投影器的独立权重保存在 mm_projector.bin 中在分片权重索引 pytorch_model.bin.index.json 里可查到model.mm_projector.0与model.mm_projector.2两组权重被记录在第 3 个分片中。阶段5576个视觉Token进入 LLaMA-2-13B576 个 5120 维向量按空间顺序拼接替换提示词中的image占位符mm_use_im_start_end: false即不使用额外的图片起止标记 Token最终形成一条混合序列[s] [视觉Token#1] [视觉Token#2] ... [视觉Token#576] [用户提问的文字Token] ...这条序列随后经过 LLaMA-2-13B 的40 层 Transformernum_hidden_layers: 40、隐藏层宽度 5120、词表 32000见 config.json逐层推理逐字生成回答。三、config.json 里的 5 个关键参数576从何验证打开 config.json以下参数共同决定了576 个视觉 Token参数值含义mm_vision_towerclip-vit-large-patch14-336336 分辨率、14×14 Patch 的 CLIP 视觉塔mm_vision_select_featurepatch取 576 个 Patch 特征而非 CLSmm_vision_select_layer-2取视觉塔倒数第 2 层输出mm_projector_typemlp2x_gelu1024 → 5120 的两层 MLP 投影mm_hidden_size/hidden_size1024/5120视觉侧与 LLM 侧的维度差由投影器补齐四、模型文件结构24.3GB 权重如何分片 文件作用pytorch_model-00001-of-00003.bin / 00002 / 00003LLaMA-2-13B 语言模型分片权重含嵌入层、40 层 Transformer、输出头mm_projector.bin独立的 MLP 投影器权重pytorch_model.bin.index.json权重索引记录每个参数位于哪个分片总大小 26,094,673,920 字节约 24.3 GBFP16tokenizer.model / tokenizer_config.jsonLLaMA-2 分词器LlamaTokenizer词表 32000special_tokens_map.json特殊 Token 定义s、/s等五、快速获取模型并验证文件完整性若需下载完整模型权重可执行git clone https://gitcode.com/hf_mirrors/ai-gitcode/llava-v1.5-13b本地部署提示13B 模型 FP16 加载约需26GB 显存普通显卡建议使用 4bit/8bit 量化方案。六、常见问题 FAQ Q1576 是固定值吗在使用 336×336 输入本仓库默认配置时是固定的 24×24 576若改用 224 分辨率则为 256。Q2视觉 Token 是词表里的词吗不是。词表32000中没有为图片预留 Token576 个视觉向量是旁路注入到嵌入层的连续向量与文字 Token 的嵌入在形状上完全一致。Q3它的图像理解能力是怎么练出来的据 README.md模型使用了约 55.8 万 BLIP 标注图文对 15.8 万 GPT 生成的多模态指令数据 45 万学术 VQA 数据 4 万 ShareGPT 对话数据进行指令微调。Q4一张图的理解成本高吗576 个视觉 Token 会占用 4096 上下文窗口max_position_embeddings的 14%这是高分辨率带来的精度与成本平衡——这也是多模态模型工程化时最常被权衡的参数。写在最后 回顾整条链路336×336 图片 → 576 个 Patch → CLIP 提取 1024 维特征 → MLP 投影到 5120 维 → 576 个视觉 Token 替换占位符 → 40 层 LLaMA-2 生成文字答案。LLaVA 用视觉编码器 小型 MLP 桥梁的极简设计让语言模型第一次真正看懂了图片——这也是它成为多模态大模型入门首选的原因。打开 config.json 对照本文逐条验证你会对视觉 Token这个概念建立完全具体的认知。【免费下载链接】llava-v1.5-13b项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/llava-v1.5-13b创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考