SD-VLM
NeurIPS 2025 接收:深度编码让 VLM 具备精确空间测量能力,MSMU-Bench 领先
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
NeurIPS 2025 接收:深度编码让 VLM 具备精确空间测量能力,MSMU-Bench 领先
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你对着一张室内照片随口问 AI「这间客厅有多宽」,它不但能回答「大约 4 米」,还能说出茶几比沙发矮多少厘米、两把椅子之间的距离——这种「看到就能量」的感知能力,正是当前大多数视觉语言模型(VLM)的短板。VLM 在语义理解上表现惊艳,但在定量空间推理上往往力不从心,因为它本质上是在处理一张「没有深度信息」的 2D 图像。
浙江大学、西湖大学、阿里云和上海交大的联合团队提出了一个优雅的解决方案:SD-VLM(Depth-Encoded Vision-Language Model),被 NeurIPS 2025 接收。它的核心思想非常直接——既然 2D 图像缺少深度,那我们就给它「加上」深度。通过一个名为 DPE(Depth Positional Encoding,深度位置编码) 的即插即用模块,SD-VLM 让 VLM 从「看图说话」升级为「看图测量」。
VLM(如 GPT-4o、Qwen2.5-VL)在图像描述、视觉问答等任务上已经相当强大,但当你问「图片里这本书的厚度大约是多少厘米」或「这两个物体之间的距离有多远」时,模型往往会给出模糊或错误的答案。这并非模型不够大,而是因为:
针对这一问题,SD-VLM 团队构建了MSMU(Multi-Scale Spatial Measuring Understanding)数据集,包含 2000 个场景、25000 张图像、75000 个物体和 70 万对问答,并在此基础上训练了带深度编码的 LLaVA-7B 模型,在 MSMU-Bench 上以 56.31 分大幅超越 GPT-4o(32.28 分),领先幅度达 26.91%。
DPE 是 SD-VLM 的核心创新,灵感来自 Transformer 中的标准位置编码(PE)。标准 PE 用正弦/余弦函数为 token 序列注入位置信息,DPE 则将这一思想迁移到视觉特征上:
图像帧 ──→ [Vision Encoder] ──→ 视觉特征 F
深度图 ──→ [Depth Encoder] ──→ 深度特征 D
↓
F + D(逐位置相加)
↓
融合特征 → LLM → 输出
具体来说,DPE 对深度图中的每个像素位置计算多频率正弦/余弦编码,生成与视觉特征同维度的深度位置嵌入,与视觉特征逐位置相加后送入 LLM。这一设计有几个关键优点:
即插即用(Plug-and-Play):DPE 是一个独立模块,不修改 LLM 权重,可以嫁接到任何基于 LLaVA 架构的 VLM 上。论文中展示了将 DPE 嫁接到 LLaVA-1.5、InstructBLIP 等多个模型后,空间推理能力均有显著提升。
兼容外部深度估计:推理时若图像没有配套深度图,可使用 Depth Anything V2 等单目深度估计模型自动生成,流程无缝衔接。
极简实现:代码仅需在 LLaVA 的视觉特征融合阶段加入数行矩阵加法,无需新增 attention 层或复杂的特征对齐网络。
MSMU 是目前规模最大、标注最精确的空间推理数据集,构建流程分为五步:
从 3D 场景库构建场景图(Scene Graph):获取 2000 个室内场景的 3D 模型,从中提取所有物体的类别、3D 边界框坐标(长×宽×高)和相对位置关系,存储为 JSON 格式的场景图。
将 3D 投影为 2D 图像并建立映射:使用官方渲染工具将 3D 场景渲染为 2D 图像,同时保留每个像素到 3D 空间的映射关系,从而建立精确的 2D→3D 坐标对应。
物体筛选(三重过滤):
模板化问答生成:基于场景图中的数值信息,使用预定义模板生成问答对,覆盖存在性判断、物体计数、尺度估计、相对位置、绝对距离、尺度比较等 8 类任务,累计生成 70 万对问答、250 万个数值标注。
LLM 协同链式推理(CoT)增强:选取 1 万对高质量样本,结合图像和空间标注,用 Qwen2.5-VL 构建链式推理路径,再用 DeepSeek-V3 筛选逻辑一致性,最终得到 MSMU-CoT 子集。在 MSMU-CoT 上微调的 SD-VLM 达到了 59.19 分,进一步拉开与 GPT-4o 的差距。
SD-VLM 代码库建立在 LLaVA(Large Language and Vision Assistant) 架构之上,主要目录结构如下:
SD-VLM/
├── llava/
│ ├── model/
│ │ └── depth/
│ │ ├── metric_depth/ # 度量深度模块(含 DPE 实现)
│ │ └── app.py # Gradio Web 界面
│ ├── eval/ # 推理和评估脚本
│ ├── serve/ # 模型服务相关
│ └── train/ # 训练脚本
├── evaluation/
│ ├── inference.py # 单图推理入口
│ └── evaluate_final.py # 批量评测(MSMU-Bench)
├── images/
│ └── demo_cli.gif # CLI 演示
└── pyproject.toml # 依赖声明
核心依赖包括:PyTorch 2.1.2、Transformers 4.37.2、Gradio 4.16.0(Web 界面)、Depth Anything V2(深度估计)、Open3D(点云处理)、SentenceTransformers(评测)。
Web 界面(app.py)基于 Gradio ImageSlider 构建,用户上传一张图像后,模型自动估计深度图,并结合用户提问输出空间推理答案。界面支持原始图像与深度图的并排对比,方便直观理解 DPE 的作用机制。
在 MSMU-Bench 8 类空间任务上,SD-VLM 全面超越主流商用和开源 VLM:
| 模型 | MSMU-Bench 平均分 |
|---|---|
| GPT-4o | 32.28 |
| Intern-VL3-78B | 33.63 |
| Qwen2.5-VL-72B | 30.82 |
| SD-VLM-7B | 56.31 |
| SD-VLM-7B + MSMU-CoT | 59.19 |
分任务来看,SD-VLM 在绝对距离估计(75.16 分)和存在性判断(87.23 分)上表现尤为突出,说明模型已具备扎实的空间度量直觉。而在物体计数(47.92 分)上仍有提升空间,这也是当前多模态模型共同面临的难点。
SD-VLM 需要 Python 3.10+ 和 CUDA 11.8+ 环境,推荐使用 conda 创建独立环境:
conda create -n sdvlm python=3.10 -y
conda activate sdvlm
git clone https://github.com/cpystan/SD-VLM.git
cd SD-VLM
pip install -e .
模型权重(约 14GB)需从 HuggingFace 下载(cpystan/SD-VLM-7B),深度估计权重(约 370MB)放在 checkpoints/ 目录,需要 Git LFS 支持。
cd llava/model/depth
python app.py
启动后访问本地 7860 端口即可使用,上传图像后在输入框描述你的空间问题,如「图片中左侧的柜子和右侧的桌子之间的距离大约是多少?」
from llava.model.builder import load_pretrained_model
from llava.mm_utils import get_model_name_from_path
model_path = "cpystan/SD-VLM-7B"
tokenizer, model, image_processor, context_len = load_pretrained_model(model_path)
# ... 输入图像 + 提问,获取空间推理答案
模型规模受限:当前开源版本仅为 7B 参数,尚未发布更大规模(如 13B/34B)的版本,对于复杂场景的空间推理可能存在能力上限。
深度估计的累积误差:推理时依赖 Depth Anything V2 估计深度图,若深度估计出现偏差(如透明物体、镜面反射),会直接影响最终的度量结果。
室内场景为主:MSMU 数据集聚焦室内场景,对户外、开放场景的空间推理泛化能力有待验证。
SD-VLM 的发布标志着 VLM 从「语义理解时代」迈向「空间度量时代」。随着具身智能(Embodied AI)、AR/VR、智能机器人等场景对精确空间感知的需求日益增长,能够「量化现实世界」的视觉语言模型将成为基础设施级的关键组件。
DPE 的即插即用特性也值得关注——它不依赖特定模型架构,理论上可以为任何 VLM 注入空间度量能力,有望在未来成为 VLM 社区的标准扩展模块。
*项目地址:github.com/cpystan/SD-VLM | 模型权重:HuggingFace cpystan/SD-VLM-7B |