
035、VLM空间关系理解能力评测从基准测试到机器人空间推理改进上周调试机械臂抓取时遇到一个让我挠头的问题——视觉语言模型明明能准确说出“红色杯子在蓝色盘子的右边”但机械臂规划路径时却把抓取点算到了杯子左侧十厘米的位置。后来翻看模型中间层的注意力权重才发现VLM对“右边”这个空间词的理解是二维图像平面上的相对位置而机器人需要的却是三维世界坐标系下的空间关系。这个偏差让我意识到评测VLM的空间关系理解能力不能只看它能不能答对问题还得看它的空间表征方式能不能直接对接机器人的动作规划。从一道送命题说起先给你看个经典翻车案例。我拿一张俯拍桌面的图问VLM“螺丝刀相对于扳手在什么方位”模型回答“在扳手的左上方”。听起来没毛病对吧但当我追问“如果机械臂从正前方抓取螺丝刀应该往哪个方向移动”时模型直接懵了——它给出的方向向量和实际需要的完全相反。问题出在VLM默认的参考系是图像坐标系而机器人操作需要的是以基座或相机为原点的世界坐标系。这种参考系错位在现有基准测试里几乎不会被暴露因为大多数测试只问“什么方位”不问“怎么到达”。更隐蔽的坑在于空间关系的粒度。VLM能区分“左边”和“右边”但分不清“紧挨着”和“隔着一个物体”。我做过一个实验把三个物体排成一排问模型中间物体相对于最左物体的位置它能答对但问“中间物体距离最左物体多远”时模型的输出要么是模糊的“不远”要么直接给出一个和实际像素距离完全对不上的数值。这说明VLM的空间理解是离散的、定性的而机器人控制需要连续的、定量的空间信息。现有基准测试的三大盲区目前常用的空间关系评测集比如基于视觉问答的VQA-Spatial或者基于指令跟随的ALFRED都存在一个共同问题——它们把空间关系当成一个分类任务来测。模型只需要从几个预设方位词里选一个选对了就算通过。这种评测方式完全绕开了空间推理的核心难点参考系转换、距离估计、遮挡推理。第一个盲区是参考系混淆。大多数测试只给一张图问“A在B的哪边”模型只需要在图像平面内做判断。但真实机器人场景里相机视角和机器人视角往往不一致甚至机械臂末端执行器还有自己的局部坐标系。我测试过几个开源VLM在图像平面内的空间问答准确率能到百分之八十以上但一旦把问题改成“以机械臂基座为参考系A在B的哪个方向”准确率直接跌到三成以下。第二个盲区是距离与尺度的缺失。现有评测几乎不涉及“多远”“多大”这类度量问题。但机器人抓取必须知道物体之间的相对距离才能规划无碰撞路径。我试过让VLM估计桌面上两个物体之间的相对距离结果模型给出的答案和真实距离的相关系数只有0.3左右基本等于瞎猜。更麻烦的是VLM对尺度没有概念——同一个“五厘米”在近距离拍摄和远距离拍摄的图像里对应完全不同的像素数模型却无法自适应调整。第三个盲区是动态空间关系的推理。现有测试全是静态单帧图像但机器人操作过程中物体位置会随着抓取动作而改变。VLM能不能根据当前帧预测下一个动作之后的空间关系变化我测下来绝大多数模型不具备这种时间维度的空间推理能力它们只能描述“现在”的状态无法推演“下一步”会怎样。我设计的一套评测协议既然现有基准不够用我自己搭了一套针对机器人场景的空间关系评测协议分三个层级。第一层是静态空间描述和第二层是参考系转换第三层是动作导向的空间推理。第一层和第二层其实可以合并测但分开能更清晰地定位模型短板。第一层我沿用传统VQA格式但把问题设计得更刁钻——不光问方位还问距离等级、遮挡关系、相对大小。第二层是核心我会在提示词里明确指定参考系比如“以图像底部中心为原点描述A相对于B的位置”或者“假设你站在桌子正前方描述A在B的哪个方向”。这一层能直接暴露模型是否具备坐标系变换能力。第三层最贴近真实应用。我会给模型一个动作指令比如“把A移到B的右侧”然后让模型输出移动后的空间关系预测。这需要模型理解动作对空间布局的影响而不仅仅是静态描述。我测下来大部分VLM在这一层完全崩溃——它们能执行指令但无法预测执行后的状态。评测指标上我不用简单的准确率而是用三个维度方位正确率、距离误差率、参考系一致性。方位正确率好理解距离误差率是模型估计距离和真实距离的相对误差参考系一致性是指模型在不同参考系提问下回答的一致性程度——如果换个说法模型就答错说明它根本没有真正理解空间关系只是在背答案。从评测结果反推模型改进方向跑了十几个开源VLM之后我总结出三个普遍性的能力缺陷以及对应的改进思路。第一个缺陷是空间量化能力缺失。VLM能说“左边”“右边”但说不出“偏左三十度”或者“距离大约十五厘米”。改进方向是在训练数据里加入带精确空间标注的样本不只是问答对而是包含物体边界框、相对角度、像素距离的元数据。我在微调一个七B模型时在原有指令数据里混入了百分之十的合成空间数据——用程序生成随机物体布局自动标注相对位置和距离——效果立竿见影距离估计误差从百分之五十降到了百分之二十左右。第二个缺陷是参考系变换能力几乎为零。这不能靠加数据解决得改模型结构。我在尝试的一个思路是在视觉编码器和语言模型之间加一个空间变换模块输入相机内外参输出一个变换后的空间特征。这个模块可以是一个小型MLP输入是图像特征加相机位姿编码输出是校正后的空间特征。实验显示加了这个小模块之后模型在参考系转换测试上的准确率提升了将近一倍。但代价是推理速度变慢因为每次都要额外算一次变换。第三个缺陷是空间推理缺乏几何一致性。VLM经常出现自相矛盾的输出——说A在B左边又说B在A左边。这本质上是模型没有建立物体之间的相对位置约束。我尝试在解码阶段加入一个几何一致性约束强制模型输出的空间关系满足传递性。具体做法是在生成回答时同时维护一个物体间相对位置的图结构每次生成新关系时检查是否与已有关系冲突。这个方法能显著减少矛盾输出但实现起来比较繁琐需要修改解码循环。落地到机器人系统时的三个实操建议如果你想把VLM的空间能力用在真实机器人上别指望模型直接输出精确坐标。我的做法是让VLM做高层空间决策底层用传统视觉算法补足精度。比如让VLM判断“目标物体在障碍物的哪一侧”然后把这个语义信息传给路径规划器规划器再结合深度相机数据做精确避障。这种分工能发挥各自优势——VLM擅长语义理解传统算法擅长几何计算。第二个建议是给VLM配一个“空间记忆模块”。VLM本身没有空间记忆每帧图像都是独立处理的。但机器人操作需要跨帧的空间一致性。我在系统里加了一个轻量级的空间状态缓存记录每个物体的历史位置和运动轨迹在每次VLM推理前把缓存信息作为额外输入注入。这样模型就能利用时间信息做更准确的空间预测比如知道物体正在移动就能推断下一秒的位置。第三个建议是别忽视提示词工程对空间推理的影响。我试过用不同的提示词描述同一个空间问题准确率能差二十个百分点。关键是要把参考系和度量单位说清楚。比如“以机械臂基座为原点X轴指向桌子长边描述杯子的位置”就比“杯子在哪里”效果好得多。另外让模型以第一人称视角描述空间关系比第三人称更准确——这可能是因为训练数据里第一人称描述更多。踩坑记录与经验之谈最后分享几个调试过程中踩过的坑。第一个坑是别用纯合成数据微调空间能力。我一开始用程序生成的随机布局数据微调模型结果模型在合成数据上表现很好一到真实场景就崩。后来发现是合成数据的纹理、光照、遮挡分布和真实场景差异太大。解决办法是合成数据加真实数据混合训练比例大概一比一。第二个坑是空间评测不能只看最终答案要看中间推理过程。我遇到过模型答对了问题但推理过程完全错误的情况——它可能是从训练数据里记住了这个特定场景的答案而不是真正理解了空间关系。所以我现在评测时会让模型输出推理步骤或者用注意力可视化检查模型关注了哪些区域。第三个坑是别忽略语言模型本身的先验偏差。VLM在训练时见过大量“左边”“右边”的文字描述这些描述往往和图像无关。结果就是模型有时候不看图也能猜对答案这会给评测带来虚假的高准确率。我处理的办法是在评测时加入对抗样本——把物体位置互换但保持文字描述不变看模型能不能发现矛盾。做空间关系评测这件事本质上是在逼问一个问题VLM是真的理解了空间还是只是学会了空间词汇的统计规律从我的实验来看大部分模型属于后者。但好消息是通过针对性的数据增强和结构改进空间推理能力是可以被显著提升的。这条路还很长但每一步改进都能让机器人离“看得懂空间”更近一点。