跳转至

Vision-as-Inverse-Graphics Agent via Interleaved Multimodal Reasoning

会议: ECCV2026
论文: ECCV 原文
作者: Shaofeng Yin, Jiaxin Ge, Zora Zhiruo Wang, Chenyang Wang, Xiuyu Li, Michael J. Black, Trevor Darrell, Angjoo Kanazawa, Haiwen Feng
项目: VIGA
领域: VLM 推理
关键词: 逆图形学、交错多模态推理、视觉验证、语义技能、滑动窗口记忆

一句话总结

VIGA 让视觉语言模型反复执行“写代码、渲染、主动检查、修改”,用语义技能和有限历史记忆维持可编辑场景的一致性,无需训练便在 BlenderBench 上报告相对单次生成的平均提升 124.70%。

研究背景与动机

从一张图像恢复场景,不只是生成一张相似图片,而是恢复能在图形引擎中执行、修改和再次渲染的程序。相机外参、物体位置、材质与灯光共同决定画面:代码语法正确,不代表桌上的球没有穿进桌面,也不代表灯光照到了正确位置。可微逆图形学能够根据像素误差做局部优化,但初始视角偏差很大时容易陷入局部极小值;单次 VLM 代码生成有语义先验,却缺少检查实际输出的闭环。

真正困难的是把“看到的不对”转成“应该改哪个参数”。目标可能被遮挡,当前视角甚至看不到它;盲改几轮又可能覆盖先前已经完成的部分。因此,智能体既要能主动换视角取得证据,又要记得近期尝试及其后果。本文借鉴局部视觉验证的思想,但并没有把可微渲染器或梯度下降接到 VLM 后面。

核心 idea:把图形引擎作为推理环境,让符号程序和渲染画面相互验证,再用语义技能隔离观察与修改、用滑动窗口记忆连接连续尝试。

方法详解

整体框架

输入是目标规格,例如参考图像;生成任务从空场景开始,编辑任务从已有场景开始。输出是可执行场景程序及其渲染结果,而不是只能观看的像素图。VIGA 的代码执行与视觉反馈闭环负责推进任务,语义技能接口负责安全地观察和操作引擎,滑动窗口记忆把本轮证据传给下一轮。

同一交互模式可用于 Blender 场景,也可通过替换执行环境生成 PowerPoint;4D 示例进一步通过时间轴检查物理运动。这里的“通用”指控制范式可复用,不意味着不同任务无需提供对应的执行工具。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    Target["目标规格与初始场景"] --> Loop["代码执行与视觉反馈闭环"]
    Loop --> Skills["语义技能接口<br/>执行、渲染、主动检查"]
    Skills --> Memory["滑动窗口记忆<br/>保留近期尝试与证据"]
    Memory -->|仍有差异| Loop
    Memory -->|下一轮决定终止| Output["可执行程序与渲染结果"]

关键设计

1. 代码执行与视觉反馈闭环:把程序的实际后果纳入下一次决策

算法 1 的每轮先让智能体结合目标和历史产生计划;若计划调用 end_process,循环终止,否则继续生成程序并执行。渲染后的场景不是最后的交付截图,而是下一阶段必须分析的观测。智能体比较目标与当前结果,形成可执行的自然语言反馈,再据此修改程序。循环也受最大轮数 \(T\) 限制。

视觉检查并非固定地看一张全景图。图 3 中,智能体先聚焦被杂物掩盖的角色,再放大观察,之后才提出减小腹部参数。这把“目标没找到”与“形状不正确”区分开,避免在尚未取得证据时修改错误对象。图 4 则展示口型、眼睛开合和灯光颜色等局部差异如何对应具体代码参数。

与普通代码智能体不同,编译或执行成功只是中间条件。它还必须检查成功运行的程序是否产生正确的几何关系。论文式 (1)、(2) 分别表示条件程序生成和反馈生成,并不是新的可微目标函数;这里的修正来自 VLM 判断与工具交互,而非对像素损失反向传播。

2. 语义技能接口:允许反复观察,但把持久修改留给明确的执行动作

表 1 将接口分成状态观察与状态修改。观察侧包括 set_camera、investigate 的空间导航,set_keyframe 的时间检查,get_scene_info、set_visibility 的结构查询,以及 initialize_view 的规范视图和目标包围框诊断。它们按框架约定用于检查,不提交对目标场景的持久编辑;观察相机和可见性可以改变,因此不宜把“只读”理解为显示状态完全不变。

修改侧用 init_scene、get_better_assets 实例化、检索或生成资产,用 execute_code 提交程序,用 undo_action 回退错误,用 end_process 结束轨迹。这样,智能体仍能写精确参数,但不必为每次空间检查重复组织脆弱的底层图形 API。技能压缩的是工具使用复杂度,并不取消模型判断、资产来源或引擎配置的依赖。

在 3D 重建中,资产工具提供外部网格,随后由闭环调整位置、材质与光照;图 8 的动态示例通过 init_scene 获取 SAM-3D 资产,或直接用基础几何体构造物体。质量、碰撞形状等物理参数由程序设置,模拟的一致性来自引擎,而不是额外训练的物理预测网络。

3. 滑动窗口记忆:保留近期失败的证据,不把全部历史塞进上下文

只保留当前截图,模型可能在两个错误参数间来回摆动;保留无限历史,又会增加多模态上下文成本和干扰。第 3.2 节描述的记忆包含计划、反馈、程序和渲染状态,并保留最近 \(L\) 轮。算法 1 用下面的简写表达更新,式中的集合写法沿用原算法,应理解为追加后截取轨迹尾部,而非无序集合操作:

\[ M_{t+1}=\operatorname{Tail}_{L}\left(M_t\cup\{p_t,f_t\}\right). \]

这里 \(p_t\) 是本轮程序,\(f_t\) 是视觉反馈;算法简写只显式列出这两项,正文则说明记忆是多模态轨迹,不能据此误读成系统不保存图像。最新完整程序承载此前已经完成的几何编辑,所以删除早期推理并不必然删除场景对象。图 5 中,无窗口限制的轨迹后期丢失已有物体和空间关系,有窗口的轨迹则持续构建一致场景。

作者把这种截断称为“无损”,但它成立的前提是最新程序确实完整保存成功编辑。代码能保存物体,却不一定保存此前为何放弃某个方案,因此这不是对任意历史信息无损的证明。

一个完整示例

图 2 与第 3.2 节以篮球和桌面说明记忆的作用:先前高度参数 0.8 和 0.7 分别产生不同的视觉偏差,智能体对照这些尝试及渲染结果,再提出 0.75。缓存没有注明这些参数的物理单位,因此不能将其写成米,也不能将此例说成算法保证执行二分搜索。

完成高度修正后,还可以根据目标调整球的水平位置;观察工具用于确认空间关系,执行工具才更新参数。下一轮看到的是修改后的场景加近期证据,而不是从头猜测。这个例子展示的是历史如何帮助连续校正,不是三次迭代内必然收敛的定量结论。

损失函数 / 训练策略

VIGA 是零样本、免训练框架,没有本文新增的训练损失、微调数据或优化器。PL、N-CLIP 和 VLM Score 是实验评价量,不能写成智能体训练时联合最小化的损失。

迭代比较采用 best-of-\(N\):每步生成 \(N\) 个候选编辑,选择一个进入下一轮,表 2、3 比较 \(N=1\) 与 \(N=4\)。这不同于只在最终结果中选四个独立运行的最好一个。缓存正文未给出窗口长度 \(L\)、最大轮数 \(T\) 的具体设置,也未完整说明候选选择器和 VLM 评分提示词,复现时需进一步核对实现。

实验关键数据

主实验

BlenderBench 共 27 个任务,分为相机调整、固定视角编辑、探索式编辑三条轨道。PL 是光度误差,N-CLIP 是论文称为 Negative-CLIP Score 的指标,两者越低越好;VLM Score 越高越好,旨在减少风格域差异对结构判断的干扰。缓存未提供这些量的完整计算式、缩放方式或 VLM Score 分值范围,以下保留表中原始分数,不标成百分比或物理单位。

下表摘录原文表 2 的 GPT-4o、best-of-4 比较;单次生成本身不使用 best-of-4。

轨道与指标 One-Shot BlenderAlchemy best-of-4 VIGA best-of-4
相机调整 PL,越低越好 48.16 14.50 5.47
相机调整 N-CLIP,越低越好 64.17 19.57 6.10
相机调整 VLM Score,越高越好 0.58 1.75 3.25
固定视角编辑 PL,越低越好 7.36 1.95 2.94
固定视角编辑 VLM Score,越高越好 2.75 3.53 3.83
探索式编辑 VLM Score,越高越好 0.25 0.56 1.61

探索式编辑的 1.61 相对 BlenderAlchemy 的 0.56 提升 187.50%;固定视角编辑却出现 PL 更差、VLM Score 更好的情况。因此“更好”依赖所选指标,不能说 VIGA 在每个单项上都胜出。正文报告 BlenderBench 跨设置平均相对提升 124.70%,BlenderGym 为 35.32%,均不是成功率或提升的百分点。

消融实验

原文图 5 提供滑动窗口的定性消融,没有给出独立数值表。下面使用表 2 的搜索预算分析,不把候选数变化误称为只移除记忆的受控消融。

模型与指标 VIGA best-of-1 VIGA best-of-4 分析
GPT-4o,相机调整 VLM Score 1.44 3.25 更多候选显著帮助视角搜索
GPT-4o,固定视角编辑 VLM Score 3.58 3.83 增益较小
GPT-4o,探索式编辑 VLM Score 1.53 1.61 更多搜索只有有限增益
Qwen3-VL-8B,探索式编辑 VLM Score 2.25 2.02 候选数增加并不保证更好

为核对跨任务泛化,原文表 4 中清晰可辨的两组 SlideBench 结果如下。Exec. 按原表小数记录,Quality 与 Overall 保留原表分数尺度。

模型与设置 Exec. Quality Overall
GPT-4o One-Shot 0.92 60.7 55.8
GPT-4o VIGA 0.95 61.4 58.3
Gemini-2.5 One-Shot 0.61 67.9 41.4
Gemini-2.5 VIGA 0.69 70.9 48.9

关键发现

  • 执行可靠性与视觉质量是不同维度:SlideBench 的 GPT-4o 执行率由 0.92 到 0.95,而质量分数只由 60.7 到 61.4,不能把执行改善全部解释为设计能力提升。
  • 搜索预算的收益依赖模型和任务;Qwen3-VL-8B 的探索式编辑结果提示候选选择与状态维护仍可能成为瓶颈。
  • 表 4 将一个基线写为 Claude-3.5,正文却称 Claude-Sonnet-4;Qwen 标签也在 Qwen3-8B 与 Qwen3-VL-8B 间变化。本笔记不擅自统一这些版本,也不使用这些有命名歧义的行作精确模型比较。

亮点与洞察

  • 代码同时充当操作手段和场景状态载体。它让局部修改可精确表达,也让滑动窗口截断后仍能保留已经生成的几何结构。
  • 主动观察解决的是“证据不足”,而不仅是增加推理长度。先确认目标的位置和形状,再编辑对应参数,比对同一错误截图反复解释更有针对性。
  • 观察与持久修改分离的接口可以迁移到图表、文档或 CAD 编辑。迁移时需要建立相应的渲染和回退能力,不能仅替换提示词。

局限与展望

  • 作者明确承认底层 VLM 的空间感知和极长序列的上下文容量仍限制性能;迭代机制本身不能补足所有几何判断错误。
  • 27 个任务的 BlenderBench 规模有限;4D 物理交互主要是定性展示。引擎保证按设定参数模拟,不等于从单张图正确恢复真实质量、碰撞属性或动力学。
  • 缓存未完整给出评分公式、评分器提示词、窗口与轮数设置、运行成本,也没有数值化的独立技能消融,因此模块因果贡献和计算性价比仍难精确分离。
  • 后续可验证程序状态的完整性、保留少量长期约束,并报告等工具调用预算的比较。这些是本笔记提出的改进方向,不是论文已经实现的模块。

相关工作与启发

  • 对比 BlenderAlchemy:本文将其作为无记忆迭代基线,并在相同 best-of-\(N\) 条件下比较。VIGA 强调跨步状态和主动验证,但完整系统比较不能单独证明收益全部来自记忆。
  • 对比可微逆图形学:后者用可微渲染和梯度细化参数,VIGA 则以视觉反馈驱动离散程序编辑。两者共享分析合成思想,但本文没有实际引入混合梯度优化器。
  • 对比视觉程序问答与单次场景生成:前者通常执行程序获得答案,后者生成代码后结束;VIGA 将渲染结果重新作为下一轮输入,使生成过程具有纠错能力。

评分

  • 新颖性: 4/5,贡献在于视觉验证、语义技能与有限记忆的统一,而非新的基础模型。
  • 实验充分度: 3/5,覆盖多个任务和模型,但复现细节、独立消融与成本分析不足。
  • 写作质量: 4/5,闭环机制与实例清楚,模型命名和部分评价定义需要澄清。
  • 价值: 4/5,对可编辑内容生成和图形工具智能体具有直接启发。