VCoder
通过注入分割图和深度图,让多模态大模型获得像素级物体感知能力(CVPR 2024)
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
通过注入分割图和深度图,让多模态大模型获得像素级物体感知能力(CVPR 2024)
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:VCoder 在复杂场景下的物体识别与计数效果(来源:项目官方 Demo)
想象你对 AI 说:「数一数这张照片里有几把椅子」。对人类来说再简单不过的任务,对传统多模态大模型(MLLM)却是个难题——它们虽然能看懂图片里有什么,却很难准确回答「数量」和「精确位置」这类需要物体级别感知的问题。这是因为标准的 MLLM 主要依赖 RGB 视觉编码器,而 RGB 图像天然缺乏深度、语义分割等结构化信息。
SHI Labs(由南加州大学 Humphrey Shi 教授领导)在 CVPR 2024 发表的 VCoder(Versatile Vision Encoders)正是为了解决这个痛点。它提出了一个优雅而高效的方案:不给 MLLM 换眼睛,而是在它的「视觉输入」中额外注入辅助感知信息——分割图(Segmentation Map)和深度图(Depth Map),帮助模型实现像素级的物体级感知能力。
VCoder 并非要从零训练一个全新的多模态模型。它的核心思路是站在 LLaVA-1.5 的肩膀上,通过添加轻量级 adapter 来融合辅助感知信息,同时冻结预训练的 LLM 和 Vision Encoder,大幅降低训练成本。
项目提供了三个模型变体,覆盖从基础研究到实际应用的不同需求:
| 模型 | 训练数据 | 能力 | 适用场景 |
|---|---|---|---|
| VCoder (LLaVA-1.5) | COST 数据集 | 物体识别 + 计数 | 目标检测类任务 |
| VCoder-DS | COST + Depth 数据 | + 深度排序预测 | 更精细的室内导航/3D 理解 |
| VCoder-IT | 混合微调数据 | + 指令遵循能力 | 对话交互、复杂问答 |
从代码结构来看,VCoder 的架构包含以下几个核心模块:
1. 多模态视觉编码器(CLIP Vision Tower)
使用 OpenAI clip-vit-large-patch14-336 作为视觉主干,从 RGB 图像中提取视觉特征。该编码器在训练和推理阶段均被冻结(requires_grad_(False)),不参与参数更新,确保预训练知识不被破坏。
2. 分割 Adapter(Seg Projector)
将外部分割模型的输出(如 OneFormer 产生的全景分割图)投影到 LLM 的 embedding 空间。代码中支持两种投影器类型:linear(线性投影)和 mlp2x_gelu(双层 MLP + GELU 激活),后者是默认选择。
3. 深度 Adapter(Depth Projector)
与分割 Adapter 结构相同但独立,专门处理 DINOv2 产生的深度图特征。该 Adapter 使模型获得空间深度感知能力。
4. 专用 Token 机制
代码中定义了三个专用 token:
***(Image Token):RGB 图像特征插入位置***(Seg Token):分割图特征插入位置***(Depth Token):深度图特征插入位置VCoder 的训练分为两个阶段,完全基于 LLaVA-1.5 的预训练权重:
第一阶段:Pretrain(仅训练 Segmentation Adapter)
使用 COST 数据集(约 30 万条图文分割数据),冻结 LLM、Vision Encoder 和原始 LLaVA MLP Projector,仅训练 seg_mm_projector。7B 模型训练约 8 小时(A100 x8),13B 模型约 14 小时。
第二阶段:Instruction Tuning(可选)
在混合指令数据上微调,使模型获得更好的对话和问答能力。VCoder-DS 训练脚本还加入了深度预测任务。
整个训练基于 DeepSpeed ZeRO-3 分布式训练框架,配合 gradient checkpointing 以节省显存。7B 模型推理至少需要 14GB VRAM(支持 4bit/8bit 量化),13B 模型建议 28GB+。
项目提供了两种推理方式:
Gradio Web 界面(推荐尝鲜):
CUDA_VISIBLE_DEVICES=0 python -m vcoder_llava.serve.gradio_app \\
--model-path shi-labs/vcoder_ds_llava-v1.5-13b
CLI 推理(适合批量处理):
CUDA_VISIBLE_DEVICES=0 python -m vcoder_llava.serve.cli \\
--model-path shi-labs/vcoder_ds_llava-v1.5-13b \\
--image-file example.jpg \\
--seg-image-file example_pan.png \\
--depth-image-file example_depth.jpeg
注意:用户需要自行准备分割图和深度图。项目文档推荐使用 OneFormer 生成分割图,DINOv2 生成深度图,增加了实际使用的前置成本。
项目代码结构清晰,基于 LLaVA 框架扩展,遵循良好的模块化设计:
vcoder_llava/model/language_model/:三种模型(VCoder/VCoder-DS/VCoder-IT)的 PyTorch 实现,继承自 transformers Llama 架构vcoder_llava/model/multimodal_encoder/:CLIP Vision Tower 封装,支持延迟加载vcoder_llava/model/multimodal_adapter/:分割/深度 Adapter 的可插拔设计scripts/v1_5/:完整的训练和评测脚本,覆盖 COST、GQA、VQAv2、MME 等基准playground/data/:数据集预处理和 prompt 模板文档质量较高:README 完整,Getting Started、Data Preparation 等子文档齐全。但缺乏 Docker 支持,依赖管理依靠 pip install -e . 手动安装,对新手不够友好。
VCoder 的部署门槛较高,属于典型的学术研究级项目:
如果只是想体验功能,最便捷的方式是通过 HuggingFace Spaces 在线 Demo,无需任何安装。
VCoder 是一项扎实的多模态研究工作,其核心贡献在于证明了辅助感知模态(分割+深度)可以低成本地注入现有 MLLM,无需从头训练。它获得了 CVPR 2024 录用,项目代码结构清晰,模型权重已在 HuggingFace Hub 开源,对多模态感知领域有较高的参考价值。
从工程落地角度看,它更适合研究团队用于下游任务的微调基底,而非开箱即用的产品组件。如果你正在构建需要精确物体感知(计数、定位、空间关系)的多模态应用,VCoder 是一个值得深入研究的起点。