VLM-R1:用 GRPO 给视觉语言模型装上推理能力,值得试吗
Solve Visual Understanding with Reinforced VLMs
秒懂
- 它是什么?
- VLM-R1 是一个把 DeepSeek-R1 的强化学习训练法搬到 Qwen2.5-VL 和 InternVL 上的开源项目,主打指代表达理解和开放词汇检测。本文拆解它的训练机制、上手步骤和适用边界。
- 适合谁用?
- VLM-R1 适合那些已有 Qwen2.5-VL 或 InternVL 使用经验、想在 REC 或 OVD 任务上尝试强化学习的研究团队和算法工程师。它不适合刚接触视觉语言模型、没有多卡训练资源或只想快速跑通推理的用户,因为训练入口是 shell 脚本和 JSONL 数据格式,门槛不低。
- 能商用吗?
- 可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 71 天前。
- 用什么语言写的?
- 主要是 Python(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
这个项目解决什么问题
VLM-R1 解决的是视觉语言模型在细粒度视觉理解任务上推理能力不足的问题。具体任务有两个:指代表达理解(REC),即根据一句文本描述框出图中对应物体;开放词汇检测(OVD),即识别训练时没见过的类别。项目把 DeepSeek-R1 的强化学习训练方法搬到 Qwen2.5-VL 和 InternVL 上,用 GRPO 算法替代传统的监督微调(SFT)。README 里报告了一个关键观察:在小步数训练下,SFT 模型在域内测试集上表现与基线几乎不变,而 R1 模型稳定提升;在域外数据上,SFT 模型性能反而随步数增加而下降,强化学习模型却能泛化。这个对比是项目存在的核心理由。
训练机制:GRPO 加自定义奖励
训练流程围绕 GRPO 展开。代码库把 REC 和 OVD 过程统一实现在 grpo_jsonl.py 里,数据以 JSONL 格式输入。奖励函数是关键设计点。项目引入了一个参数 is_reward_customized_from_vlm_module,当设为 true 时,奖励逻辑由 QwenVL2Module 或 InternVLModule 内部定义,而不是用通用的规则奖励。OVD 任务还额外支持 odLength、weighted_sum 和 cosine 三种奖励,分别处理检测框长度、加权求和和余弦相似度。这种设计把奖励和模型模块耦合在一起,好处是不同架构可以有自己的打分逻辑,坏处是如果你想加新任务,得同时改数据脚本和模型模块,改动面比纯规则奖励大。
训练脚本和关键参数
仓库提供了多个 shell 脚本作为入口。run_grpo_rec.sh 跑 REC 的 GRPO 全参数微调,run_grpo_rec_lora.sh 用 LoRA 减少显存占用,multinode_training_demo.sh 演示多节点训练,run_grpo_gui.sh 处理多图像输入。一个重要的开关是 freeze_vision_modules,设为 true 可以冻结视觉编码器,只训练语言部分,这能显著降低显存需求。训练前需要把数据转成项目规定的 JSONL 格式,README 里有专门章节说明。模型支持方面,目前内置 QwenVL 和 InternVL 两种,新增模型需要参考 assets/add_new_model.md 的指引。整个流程不是 pip install 就能跑,你得先克隆仓库,然后按脚本里的路径配置数据、模型权重和输出目录。
推理部署:从 vllm 到华为昇腾
项目不只有训练代码,还包含推理适配。更新日志显示,2025 年 8 月他们把模型适配到华为昇腾 Atlas 800T A2 和 Atlas 300I Duo 系列,基于 vllm-ascend 框架。随后又针对 JD 开源的 xllm 推理框架做了优化,声称 TTFT 比 vllm-ascend 降低 50%,吞吐量提升 127%。这些数字来自 README 的更新记录,我没有实测验证。如果你在昇腾硬件上部署,可以看 ascend_inference/910B/ 和 ascend_inference/300IDuo/ 目录下的 README。但要注意,这些优化只针对特定硬件和框架组合,普通 GPU 用户用 vllm 或 transformers 可能得不到同样的收益。
一个明显的局限:数据格式和奖励耦合
VLM-R1 不是拿来即用的工具。它要求你把数据整理成特定的 JSONL 结构,多图像输入还有额外格式要求。奖励函数虽然灵活,但自定义奖励的入口藏在模型模块内部,这意味着你要理解 QwenVL2Module 或 InternVLModule 的代码逻辑才能修改。另一个潜在坑是 README 里提到的像素配置问题。项目发现之前的 REC SFT 实验用了不匹配的 pixel config,导致结论偏差,他们重新跑了实验。这说明训练配置里的细节错误会直接影响结果,而这类错误不容易从日志里发现。如果你只是想快速对比 SFT 和 RL 的效果,这个项目的前期成本可能比预期高。
对比方案:SFT 和专用检测模型
VLM-R1 的直接对照是监督微调。项目自己的实验显示,在小步数下 SFT 和 RL 差距不大,但步数增加后 SFT 在域外数据上会退化。这说明如果你有充足的高质量标注数据,SFT 可能更简单且够用。另一个对照是专门的开放词汇检测模型,比如 OVDEval 里对比的那些。README 声称 VLM-R1-OVD 在 OVDEval 上超过了 SFT 基线和专用检测模型。但注意,这个结论来自项目自己的评测,没有第三方复现。相比专用检测模型,VLM-R1 的优势是能利用语言模型的推理能力,但代价是训练和推理的算力开销更大。
维护状态和许可
仓库最后一次推送是 2026 年 7 月,说明项目仍在维护。版本发布节奏集中在 2025 年 3 月到 4 月,从 v0.1.0 到 v0.2.1,之后没有新 release,但主分支有持续更新。代码采用 Apache-2.0 许可,这对商用友好,不用开源自己的修改。但要注意,项目依赖 Qwen2.5-VL 和 InternVL 的预训练权重,这些权重的许可条款各自不同,使用前需要单独确认。训练代码的维护成本不低,因为 GRPO 和奖励函数耦合了模型架构,升级到新版本的 Qwen 或 InternVL 时,你可能需要重写模块接口。
编辑结论
VLM-R1 适合那些已有 Qwen2.5-VL 或 InternVL 使用经验、想在 REC 或 OVD 任务上尝试强化学习的研究团队和算法工程师。它不适合刚接触视觉语言模型、没有多卡训练资源或只想快速跑通推理的用户,因为训练入口是 shell 脚本和 JSONL 数据格式,门槛不低。采用前先验证三件事:你的数据能否转成项目要求的 JSONL 格式,你的 GPU 显存能否支持 freeze_vision_modules 之外的设置,以及你是否接受 Apache-2.0 下模型权重和代码的各自许可条款。项目更新到 2026 年 7 月仍有提交,但主分支的活跃度需要你自己看 commit 历史判断。如果只想用现成模型做推理,Hugging Face 上的 checkpoint 和 demo 是更快的起点。
社区笔记