跳转至

Render-in-the-Loop: Vector Graphics Generation via Visual Self-Feedback

会议: ECCV 2026
论文: ECCV 原文
领域: 多模态 VLM / 图像生成
关键词: 矢量图生成、视觉自反馈、路径分解、渲染验证、逐步绘制

一句话总结

Render-in-the-Loop 让 Qwen3-VL-8B 在生成每段 SVG 后观察累计画布,通过专门的多轮监督训练和推理时重复过滤,用 0.85M 训练样本在 MMSVGBench 上超过多种更大数据规模的自回归基线,但增加约 1.50 倍的 VSF 推理时延。

研究背景与动机

SVG 用路径、填充和图层描述图形,能够无损缩放,也比单纯输出像素更便于修改。StarVector、OmniSVG 等方法已经能让模型直接输出 SVG 代码,但“代码合法”与“画出来正确”并不是一回事:一段坐标可能形成错误轮廓,后画的图层可能覆盖先画的细节,多个合法路径组合起来也可能不像目标物体。开环生成时,模型只能从历史代码推测已经画出了什么,视觉编码器无法持续检查实际画布。

一种改进方向是用可渲染性、语义相似度等奖励进行强化学习,例如 SVGen、Reason-SVG 和 RLRF。本文关心的是另一个问题:即使奖励能告诉模型结果好不好,一个标量也没有直接保留“镜头画偏了”“前景挡住了背景”这样的空间信息。既然多模态模型本来就能看图,能否让它每画一步就看一眼?难点在于,预训练模型并不天然知道如何把一幅尚未完成的图像映射为下一段精确的几何代码,单纯增加多轮图片输入并不能稳定改善结果。

因此,论文不是只改推理提示词,而是把静态 SVG 数据转换为密集的绘制轨迹,训练模型利用中间画布预测下一笔,再在推理阶段阻止无效笔画被接受。核心 idea:让渲染结果成为下一步生成的直接视觉条件,并通过专门的轨迹监督学会使用它,而不只是把最终图像压缩成一个奖励分数。

方法详解

整体框架

输入可以是文本描述,也可以是参考图像;输出始终是可渲染的 SVG 代码。训练侧先做“细粒度路径分解”,再用“视觉自反馈训练”学习交替出现的代码与画布;推理侧每次生成候选片段,由“渲染验证”决定是否把它并入已经接受的代码。

画布是全部已接受片段的累计渲染结果,不是单独显示最新路径的小图。这个区别很重要:目标部件是否已经出现、是否被遮挡、整体布局还缺什么,都要从组合后的结果判断,而不能只看当前笔画。模型仍保留完整的历史代码与图像上下文,并没有用最新截图替换全部历史。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    SOURCE["静态 SVG 数据"] --> DECOMP["细粒度路径分解"]
    DECOMP --> VSF["视觉自反馈训练"]
    VSF -.->|训练所得权重| GENERATE["预测下一片段<br/>或结束标记"]
    PROMPT["文本或参考图<br/>与已接受历史"] --> GENERATE
    GENERATE -->|候选片段| VERIFY["渲染验证"]
    VERIFY -->|接受并回传累计画布| GENERATE
    VERIFY -->|拒绝并调整采样| GENERATE
    GENERATE -->|结束标记| OUTPUT["输出 SVG"]
    VERIFY -->|重试达到上限| OUTPUT

虚线表示训练对模型参数的影响,不是推理时额外运行一次训练。渲染验证只在推理阶段使用;训练轨迹来自已有 SVG 的分解与累计渲染,不是模型在线试错得到的强化学习轨迹。

关键设计

1. 细粒度路径分解:增加反馈频率,同时保住填充与透明度语义

原始 SVG 往往为了压缩存储,把多个视觉上分离的部件塞进同一个 <path>,平均每个文件只有约 4 个路径元素。若直接按原始路径逐步生成,模型可能一口气画完机身、镜头和光束,然后才得到反馈;这样既要一次预测很多坐标,又错过了部件之间的中间状态。作者从 d 属性解析绘图命令,以不连续的 M/MoveTo 等命令提取独立子路径,尝试把一个大动作拆成更细的绘制步骤。

但“拆得越细越好”并不成立。内外轮廓的包含关系可能通过填充规则定义孔洞;有透明度的相交子路径若分开绘制,也可能改变叠色。作者把子路径视作二维多边形,以包含关系或非完全不透明情况下的空间相交关系建立依赖图,再把同一连通分量合并回一个 <path>。这样,必须共同渲染的部分仍保持原子性,真正独立的部分才拆开。平均路径数由 4 增至 6,反馈因此更密集;每个步骤仍可能包含相互依赖的多个子路径,不能把它理解为每条曲线都单独生成。

2. 视觉自反馈训练:把“已经画到哪里”变成下一段代码的条件

处理后的每个样本被组织为“用户条件、代码片段、累计画布、下一代码片段、下一累计画布……”的完整多轮序列,最后接结束标记。文本到 SVG 使用文字目标,图像到 SVG 使用参考图;两种任务的中间状态都由已经绘制的代码渲染而来。预测下一段代码时,模型能同时看到目标、先前代码以及这些代码真正产生的结果,因此不必完全依靠坐标字符串在内部想象几何关系。视觉信息经过多模态模型的视觉编码器,以视觉 token 进入上下文。

这里训练的是“根据部分完成的状态继续画”,而不只是“看完整图像描述它”。同一条轨迹中的前后步骤一起训练,使模型既能利用当前画布,也能保留绘制顺序;结束标记也作为预测目标,让模型学习何时无需继续添加内容。作者将中间画布固定为 224 × 224,每幅只编码成 49 个视觉 token,以免多轮图像迅速耗尽上下文。代价是细节观察能力受到分辨率限制,而且历史不断增长;闭环提供的是可见状态,不是无限精细或无限长度的记忆。

3. 渲染验证:先检查候选动作有没有有效进展,再允许它进入历史

模型生成候选片段后,RaV(Render-and-Verify)先把它与已经接受的代码组合,渲染一幅假设中的下一画布。第一项检查比较新旧画布的像素差异,差异低于阈值就拒绝,针对的是重复覆盖、画到画布外等没有可见贡献的动作。第二项检查比较候选片段与上一已接受片段的字符串相似度,过高也拒绝,防止模型在近乎相同的代码上循环。它既看结果,也看相邻代码结构,但没有使用一个能验证目标语义是否正确的全能评审器。

只要任一检查失败,候选就被丢弃,不进入正式绘制历史;随后调整采样参数,例如稍微提高温度,再尝试生成新的片段。正常结束仍由模型预测结束标记完成,RaV 不是一检测到小变化就立刻终止整张图。只有连续失败达到最大重试次数 \(K_{\max}\) 时,系统才强制结束以避免卡住。正文给出的像素差异阈值为 \(\epsilon=0.001\),字符串相似度阈值为 \(\tau_{\mathrm{sim}}=0.98\),但未在提供的正文中明确差异归一化公式、字符串相似度实现和具体重试上限,不宜自行补成精确算法。

一个完整示例

以论文图 1 的投影仪为例,目标要求白色机身、深色镜头、小型紫色支脚,以及镜头两侧的灰色圆点。以下用这个目标解释执行顺序,不把示意步骤当成论文记录的逐 token 轨迹。

训练数据预处理时,若机身、镜头和光束原来在同一复杂路径里,先拆出子路径,再把因孔洞或透明叠色而相互依赖的部分合并。累计渲染之后,模型会看到“主体已经出现,但镜头或装饰还没完成”的状态,而不是一次性从空白跳到整个投影仪。

推理时,模型根据描述和已接受的画布提出下一段代码。假如它又生成一段几乎完全覆盖原镜头的路径,画布变化太小或代码太相似,就会被 RaV 拒绝;重新采样的片段通过检查后,才写入历史并产生供下一轮使用的累计图像。这个过程能避免无效重复挤占后续部件的生成机会,但并不能保证新片段一定是所需的支脚或圆点。

如果模型早先把支脚画错位置,当前动作空间没有删除或替换操作,只能继续追加路径,在视觉上补偿错误。因而这里的“自反馈”是看见结果后调整后续生成,不等于具备通用的撤销和编辑能力;这一点也是作者提出未来扩展 DOM 编辑动作的原因。

损失函数 / 训练策略

训练采用多轮视觉指令微调,目标是标准自回归语言建模损失。只有模型输出的 SVG 代码 token 和结束标记参与损失,用户提示与插入的画布视觉 token 都被掩码排除;最后按参与监督的 token 数归一化。缓存中的公式 (3) 排版抽取损坏,因此这里保留正文明确描述的监督范围,不把缺损表达式重构为作者的精确公式。

数据取自 OmniSVG 已公开部分:0.9M 图标与 0.25M 插画,经相同代码字符串去重后剩下 0.65M 图标与 0.2M 插画,合计 0.85M。去重针对代码完全相同的样本,不应表述为已经消除了所有视觉近重复;路径分解增加的是单幅图的监督步骤,也不等于新增独立图像。

模型初始化为 Qwen3-VL-8B-Instruct,使用 8 张 NVIDIA H100 训练 3 个 epoch,AdamW 学习率为 \(10^{-5}\),采用余弦衰减,最大序列长度为 10240。本文没有把 VSF 与强化学习联合训练;两者的兼容性是作者提出的后续方向,不能当作已经验证的收益。

实验关键数据

主实验

评测使用官方 MMSVGBench 的 Icon 与 Illustration 子集,分别测试 Text-to-SVG 和 Image-to-SVG。下表摘录原文表 1:FID 衡量生成图像分布差异,越低越好;CLIP 衡量文本语义一致性,越高越好;SSIM 衡量重建结构相似度,越高越好;LPIPS 衡量感知重建距离,越低越好。不同任务的指标不能混为同一个总分。

子集 方法 / 训练图像数 文本到 SVG FID ↓ 文本到 SVG CLIP ↑ 图像到 SVG SSIM ↑ 图像到 SVG LPIPS ↓
Icon OmniSVG-8B / 2M 130.56 0.276 0.893 0.235
Icon InternSVG-8B / 16M 128.80 0.291 0.901 0.182
Icon 本文 VSF+RaV-8B / 0.85M 127.64 0.293 0.914 0.172
Illustration OmniSVG-8B / 2M 138.42 0.231 0.907 0.231
Illustration InternSVG-8B / 16M 138.10 0.229 0.915 0.205
Illustration 本文 VSF+RaV-8B / 0.85M 137.79 0.237 0.928 0.178

这些结果支持对所列自回归基线的优势,不代表本文超过所有重建方法。原文表 1 中,DiffVG 在 Illustration 上的 SSIM 为 0.955、LPIPS 为 0.065,像素重建优于本文;作者强调的另一面是优化式方法会产生很多细碎路径,可编辑性较差,但这部分主要由定性比较支撑。

消融实验

下表同样来自原文表 1,限定为 Illustration 子集、Qwen3-VL-8B 系列配置。SFT only 是标准开环监督微调,VSF 加入专门的视觉轨迹训练,VSF+RaV 再增加推理验证。

配置 文本到 SVG FID ↓ 文本到 SVG CLIP ↑ 图像到 SVG SSIM ↑ 图像到 SVG LPIPS ↓
SFT only 155.84 0.221 0.861 0.318
VSF 137.86 0.235 0.921 0.193
VSF+RaV 137.79 0.237 0.928 0.178

VSF 对 FID 的改善是 17.98,而随后加入 RaV 仅进一步改善 0.07;RaV 对 LPIPS 的改善则为 0.015。主要质量提升来自学会利用轨迹,验证更像抑制生成退化的增量保障,不能把两者贡献等量解释。

原文表 3 在相同 Qwen3-VL 骨干、vLLM 服务栈和 NVIDIA V100 条件下报告以下 MMSVGBench 推理成本。该表比较的是 VSF 与开环 SFT,没有单列完整 VSF+RaV 的重试成本。

配置 时间 / 秒 生成 token 数 时延倍数 渲染时间 / 秒
Open-loop SFT 28.77 550.94 1.00 0.000
VSF 43.19 804.31 1.50 0.038

关键发现

  • 更多训练图像不是唯一决定因素:0.85M 样本约为 InternSVG 的 5.31%,但这不是控制总训练 token、算力和数据分布后的因果实验。
  • “看见画布”需要配套训练。原文 §3.3 明确举出 GPT-5 在 Illustration 上的 LPIPS 从单次生成的 0.345 升至朴素多轮提示的 0.388,反馈输入本身并不保证改善。
  • 额外成本主要来自逐步自回归解码,生成 token 数增至约 1.46 倍,而不是渲染器本身很慢;这也限定了闭环方案的实际效率收益。

亮点与洞察

  • 渲染器不仅可以提供训练奖励,也能提供模型下一步真正可读的状态。这个设计把空间关系留在图像里,不要求模型完全从代码字符串推断遮挡。
  • 路径分解尊重 SVG 语义,而非只按长度切块。用依赖图保留孔洞和透明叠色关系,是让更密集反馈不破坏原图的关键。
  • 把候选动作先渲染再接受,提供了一种低成本的退化过滤方式。不过“产生可见变化”只是必要的局部进展信号,不等于目标语义已经正确。

局限与展望

  • 作者承认:推理更慢,中间画布固定为 224 × 224;更高分辨率的细节收益与上下文、计算成本之间的关系尚未系统研究。
  • 作者承认:动作只能追加,不能撤销、删除或替换已接受的图元。可进一步引入 DOM 级 DELETE、REPLACE 和 MODIFY,让反馈真正驱动纠错。
  • 作者展示的失败包括重复绘制导致遗漏主体、把“融化的钟”画成普通钟,以及复杂场景过度简化。更好的几何反馈尚未解决抽象状态理解与完整规划。
  • 本笔记的评估提醒:表 2 声称涉及 Qwen3-VL 与 GPT-5,但正文表格未逐行标出骨干,不能把其中全部数字分别归给两种模型;此外,未见独立量化路径分解收益的消融表,数据效率和可编辑性的论证仍有加强空间。

相关工作与启发

  • vs OmniSVG / InternSVG:这些方法代表直接生成 SVG 代码的强基线;本文的关键变化是预测条件中持续加入实际画布,而不只是扩大静态代码数据量。
  • vs SVGen / Reason-SVG / RLRF:强化学习主要改变政策优化信号,VSF 则改变可观察状态和轨迹监督。两者可以互补,当前实验不能证明视觉反馈普遍优于强化学习。
  • vs DiffVG / LIVE:优化式矢量化能取得很强的像素重建指标,本文则追求语义生成与较紧凑路径结构。评估设计工作流时,应同时测视觉质量、可编辑性和时间,不能只依据单项 LPIPS 排名。
  • 可迁移方向:作者提出 HTML/CSS、LaTeX/TikZ、3D 与 CAD 程序生成;共同前提是能够执行中间代码并把结果反馈给模型,这些任务上的有效性尚未由本文实验验证。

评分

  • 新颖性: 4/5,贡献在于语义保持的轨迹构造、视觉条件训练与推理验证形成完整方案。
  • 实验充分度: 3/5,双任务、双子集与成本分析较完整,但仍缺少更细的受控消融及完整验证成本。
  • 写作质量: 4/5,方法主线清楚,个别表格的骨干标识和验证实现细节有待补全。
  • 价值: 4/5,为结构化视觉代码生成提供可复用的闭环思路,实际部署仍需权衡延迟与编辑能力。