- 人工智能
- 多模态
- Embedding
- 微调
- 计算机视觉
- 深度学习
- 机器学习
- 模型评测
【免费下载链接】VLM2Vec
This repo contains the code for "VLM2Vec / MMEB" [ICLR 2025], "VLM2Vec-V2 / MMEB-V2" [TMLR 2026], and "MMEB-V3" [COLM 2026]
VLM2Vec 是一个开源的多模态检索工具包(ICLR 2025 论文项目),它把现成的视觉-语言模型(VLM)改造成统一的多模态嵌入模型,让你可以用同一个模型完成图像搜索、文本搜索、图文匹配、视觉问答等任务。本文带你从零跑通第一次图像/文本相似度搜索,并了解模型训练与评估的完整流程。
一、VLM2Vec 是什么?为什么适合做多模态检索?
传统的 CLIP 类模型往往只能做"图搜图"或"文搜文",而实际业务中,检索的输入输出可能是任意模态组合:
- 用一段文字描述找图片
- 用一张图片找相似的描述
- 用"图片 + 问题"找正确的答案
VLM2Vec 的核心思路是:取 VLM 序列最后一个 token 的隐状态,作为整段多模态输入的统一向量表示。这样一来,无论输入是纯文本、纯图片还是图文混合,都能编码到同一个向量空间里,通过计算余弦相似度即可完成检索。
上图展示了 VLM2Vec 支持的四大任务族(分类、VQA、视觉定位、检索):每个任务只需给出一句不同的指令(Instruction),同一模型即可输出对应任务的嵌入向量,并在 MMEB 基准上统一评估。
二、原理速览:如何把 VLM 变成嵌入模型
VLM2Vec 采用双编码器 + 对比学习的经典结构:
- 查询侧(Query):把图片、指令等输入送入 VLM,取 LAST token 得到查询向量;
- 目标侧(Target):把正样本(如正确描述、正确图片)用同样方式编码为目标向量;
- 对比损失(Contrastive Loss):拉近正样本对、推开负样本对,使向量空间中"语义相近 = 距离相近"。
该框架对骨干模型没有特殊要求,仓库已内置 Phi-3.5V、LLaVA-Next、Qwen 等主流开源 VLM 的适配代码(见 src/vlm_backbone/),因此你可以选择任意熟悉的 VLM 作为检索底座。
三、快速上手:跑通第一次图文相似度搜索 🚀
仓库提供了开箱即用的演示脚本 scripts/llava_next/demo.py,它加载 LLaVA-Next 版本的 VLM2Vec,完成"图片 + 文本查询 → 与候选文本算相似度"的完整流程:
# 图片 + 文本作为查询 qry_output = model(qry=inputs)["qry_reps"] # 纯文本作为检索目标 tgt_output = model(tgt=inputs)["tgt_reps"] model.compute_similarity(qry_output, tgt_output)演示中使用了一张小狗和小猫互动的示例图片 figures/example.jpg:
运行结果示例:
| 检索文本 | 相似度 |
|---|---|
| A cat and a dog(一只猫和一只狗) | 0.44 |
| A cat and a tiger(一只猫和一只老虎) | 0.36 |
可以看到,与图片内容更匹配的文本得分更高——这就是构建图像/文本搜索引擎的最小闭环。相似度计算逻辑位于 src/model.py 的compute_similarity方法。
💡 提示:构建真实检索应用时,只需把目标库中所有候选(图片/文本)预先编码并向量化存储(如存入向量数据库),查询时编码一次并取 Top-K 即可。
四、训练你自己的多模态嵌入模型
如果你想在自己的数据上训练或微调,train.py 提供了完整的训练入口,几个关键参数:
| 参数 | 作用 | 建议 |
|---|---|---|
--model_name | VLM 骨干模型 | 如microsoft/Phi-3.5-vision-instruct |
--lora --lora_r 16 | 启用 LoRA 低秩微调 | 显存有限时首选,可省大量显存 |
--grad_cache True | 启用 GradCache 优化 | 对比学习显存过大的救星 |
--gc_q_chunk_size/--gc_p_chunk_size | GradCache 分块大小 | 显存越小设越小 |
--temperature 0.02 | 对比损失温度 | 默认值即可 |
--pooling last | 取最后一个 token 作为向量 | 与官方模型保持一致 |
多卡训练示例(完整参数见 README.md 的 Training 章节):
torchrun --nproc_per_node=2 train.py \ --model_name microsoft/Phi-3.5-vision-instruct \ --model_backbone phi3_v \ --dataset_name TIGER-Lab/MMEB-train \ --grad_cache True --lora --lora_r 16其中 GradCache(梯度缓存)的完整实现放在 grad_cache/ 目录下,其命令行用法说明见 grad_cache/minigc_cmd.md。训练数据采用官方 MMEB-train 数据集(20 个子任务,涵盖分类、VQA、检索、定位等多种指令风格),指令多样性显著提升模型对未见任务的泛化能力。
五、评估:用 MMEB 基准检验检索效果
VLM2Vec 配套提出了MMEB(Massive Multimodal Embedding Benchmark)基准,包含 20 个域内(IND)+ 16 个域外(OOD)任务,覆盖分类、VQA、检索、视觉定位四大元任务。
评估入口是 eval.py,流程分三步:
- 编码查询集(query)得到
qry_reps向量; - 编码目标集(target)得到
tgt_reps向量; - 计算相似度并输出各任务的检索/分类得分(打分逻辑在 evaluation/eval_utils.py)。
python eval.py --model_name TIGER-Lab/VLM2Vec-Full \ --model_backbone phi3_v \ --dataset_name TIGER-Lab/MMEB-eval \ --subset_name N24News HatefulMemes CIRR \ --normalize True --image_dir eval_images/从官方结果看,基于 LLaVA-Next 的 LoRA 微调版本整体得分62.9,比最强无微调基线高+18.2,比最强微调基线高+15.7——在多模态检索任务上优势明显。
六、实践建议清单 ✅
- 显存紧张:优先
--lora+--grad_cache True,并调小--gc_q_chunk_size; - 图像输入:通过
--num_crops控制图像裁剪数量,越多越精细但越耗时(演示脚本用 4 个 crop); - 向量归一化:检索场景建议开启
--normalize True,配合余弦相似度使用; - 指令工程:给查询配上与目标任务匹配的 Instruction 文本,检索效果会更稳定;
- 选择底座:追求最高性能选 LLaVA-Next 版本,追求轻量可试 Phi-3.5V 版本。
现在,你已经掌握了用 VLM2Vec 从嵌入向量构建图像/文本搜索应用的全链路:跑通 demo → 按需训练微调 → 用 MMEB 评估效果。动手试试吧!
- 人工智能
- 多模态
- Embedding
- 微调
- 计算机视觉
- 深度学习
- 机器学习
- 模型评测
【免费下载链接】VLM2Vec
This repo contains the code for "VLM2Vec / MMEB" [ICLR 2025], "VLM2Vec-V2 / MMEB-V2" [TMLR 2026], and "MMEB-V3" [COLM 2026]
相关推荐
LanceDB Rust SDK 实战指南:用 Rust 构建嵌入式向量检索与多模态 AI 应用
LanceDB Rust SDK 实战指南:用 Rust 构建嵌入式向量检索与多模态 AI 应用 LanceDB Rust SDK(crate 名为 lance
向量数据库数据库全文检索数据湖多模态嵌入式数据库列式数据库Sentence Transformers 图像搜索实战:用 CLIP 模型将图像与文本嵌入同一向量空间
Sentence Transformers 图像搜索实战:用 CLIP 模型将图像与文本嵌入同一向量空间 本文是 Sentence Transformers 图
人工智能NLP深度学习微调RAGFlow.Launcher Everything 文件搜索完整上手指南
Flow.Launcher Everything 文件搜索完整上手指南 Flow.Launcher 是一款 Windows 快捷启动器,它内置的 Explore
桌面应用插件系统
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考