CVPR 2026 · SVG Generation

DuetSVG

Unified Multimodal SVG Generation with Internal Visual Guidance
Peiying Zhang · Nanxuan Zhao · Matthew Fisher · Yiran Xu · Jing Liao · Difan Liu
City University of Hong Kong · Adobe Research
Janus Pro 7B Text to SVG Image to SVG Internal Visual Guidance Test Time Scaling SVG Hub
这篇论文最关键的改变,是不再把 SVG 当作“纯文本代码”生成,而是让模型先在内部形成一个视觉目标,再让后续 SVG token 在因果注意力中持续看到这个视觉目标。
01 · One page summary

先把整篇论文压成一张图

DuetSVG 的创新并不是简单串联一个图像模型与一个矢量化模型,而是在一个统一自回归 Transformer 里共同生成 image tokens 与 SVG tokens,并利用前者作为后者的内部视觉锚点。

7B从 Janus Pro 7B 初始化
576每张 384×384 图像的 visual token 数
12KSVG 最大 text token 长度
14 days64×A100 完整训练约耗时
STAGE 1T2I 预训练先让基础模型学会 SVG 风格、扁平色块与干净几何。
STAGE 2多任务 SFTT2I : T2SVG : I2SVG = 1 : 5 : 4。
DECODE先图像后 SVG目标序列中 image tokens 位于 SVG tokens 之前。
TEST TIME视觉候选搜索先以较低成本生成多个图像候选,再由 CLIP 选 \(I^{\ast}\)。
RESAMPLE分块 SVG 重采样用 LPIPS 检查每段 SVG 是否继续靠近 \(I^{\ast}\)。
一句话理解:图像分支承担“我要画成什么样”,SVG 分支承担“我要用什么可编辑几何结构把它写出来”。
02 · Motivation

为什么只把 SVG 当文本不够

SVG 代码在语法空间里是离散 token,但它真正的损失函数应该关心渲染后的几何与视觉。一个看似很小的坐标错误,在代码层面只错几个字符,在像素层面却可能让整个轮廓崩坏。

问题 A:文本监督与视觉目标错位

传统 VLM 直接生成 SVG code,训练主要奖励“下一个 token 对不对”。但 SVG 的真正目标是渲染结果。代码空间近邻不等于视觉空间近邻。

因此复杂布局、曲线控制点和局部遮挡容易累积误差。

问题 B:SVG 数据远少于 raster 数据

纯 SVG 模型只能吃相对有限的矢量数据,而互联网上有海量 text image、image editing 数据。若模型本身没有 image generation 能力,就很难把这些视觉先验迁移进 SVG 生成。

问题 C:长序列的错误会累积

一个复杂 SVG 可以有数千乃至上万 token。纯 best of \(N\) 需要完整采样多次再 rerank,成本与序列长度几乎直接绑定,而且无法中途纠偏。

DuetSVG text-to-SVG qualitative comparison
Figure 4 · Text to SVG qualitative comparison. 论文展示的核心现象是通用 VLM 往往把复杂语义压缩成少量简单 primitive,而 DuetSVG 能维持更完整的布局与结构。
Significance:DuetSVG 把“视觉正确性”从最终渲染后的外部检查,提前搬进了生成序列本身。这个设计同时解决数据利用与推理纠错两个问题。
03 · Method

统一多模态 SVG 生成

核心不是额外加一个独立 raster 模型,而是把视觉 token 与 SVG token 放进同一因果序列,共享一个 autoregressive Transformer。

\[ \mathbf{z}= [\langle\texttt{IMG}\rangle,z^{\mathrm{img}}_{1:I},\langle/\texttt{IMG}\rangle, \langle\texttt{SVG}\rangle,z^{\mathrm{svg}}_{1:S},\langle/\texttt{SVG}\rangle] \]

给定条件输入 \(\mathbf{x}\),其中可以包含文本、raster image、已有 SVG code,模型统一优化 next token likelihood:

\[ P_{\theta}(\mathbf{z}\mid\mathbf{x}) =\prod_{t=1}^{T}p_{\theta}(z_t\mid z_{\lt t},\mathbf{x}) \]
最关键的因果关系:由于 \(z^{\mathrm{img}}\) 在序列中先于 \(z^{\mathrm{svg}}\),所以每一个 SVG token 都能通过 causal attention 读取已经生成的视觉 token。内部视觉引导并没有额外 cross attention 模块,它来自序列顺序本身。
DuetSVG model architecture
Figure 2 · Model architecture. 文本与 SVG 使用 Janus Pro text tokenizer。图像输入同时经过 SigLIP understanding encoder 和 VQ generation encoder。两路特征通过独立 MLP aligner 投到 LLM feature space。图像 token 由 generation head 预测,SVG token 由 LM head 预测。

输入端

Text / SVG:Janus Pro tokenizer。

Image understanding:SigLIP encoder,负责语义特征。

Image generation:VQ tokenizer,将图像转成离散 visual tokens。

Alignment:两套 MLP aligner,将图像表示投影到 Transformer 的 embedding space。

输出端

Generation head:预测 visual codebook 中的 image token。

LM head:预测 text vocabulary 中的 SVG token。

训练冻结:understanding encoder 与 generation encoder 冻结,其余参数可训练。

统一性:同一 Transformer 同时学习 raster appearance 与 vector structure。

训练为什么要分两阶段

Stage 1 · 80K steps

T2I pretraining:先建立“SVG 风格”的视觉先验

Janus Pro 原始 checkpoint 并不擅长生成干净、扁平、几何规整的 SVG 风格图像。作者混合真实 rendered SVG image caption pair 与 FLUX.1 合成数据,专门训练这种视觉域。

这一步并不直接输出 SVG code,但它决定了后续 image tokens 是否能作为有意义的内部 visual plan。

Stage 2 · 300K steps

Multi task SFT:把视觉先验传进 SVG

T2I、T2SVG、I2SVG 混合训练。对 SVG task,目标严格按照 image tokens → SVG tokens 排列。

作者还对 I2SVG target 做 rotation、translation、scaling、color 修改,可随机移除部分 paths,再渲染成 image,逼模型学习“局部结构变化如何反映到图像与代码”。

Text 与 image input 各自以 10% 概率 dropout,从而支持 inference 时 CFG。

Optional Stage 3

下游任务微调

SVG completion 与 semantic editing 并不是基础模型原生完整覆盖的训练目标,论文通过额外 fine tune 展示可扩展性。

04 · Test time scaling

这篇论文最漂亮的推理设计

图像序列只有 576 tokens,而 SVG 最长 12,000 tokens。作者因此把 expensive search 放在短视觉序列上,再用选中的视觉结果约束长 SVG rollout。

DuetSVG test-time scaling
Figure 3 · Test time scaling with image guided SVG resampling. 第一步先做视觉候选选择,第二步将最优 visual candidate 变成 SVG decoding 的内部 reference,并在分块生成时用 LPIPS 做 accept or resample。

Step 1 · Visual candidate selection

先用 classifier free guidance 生成 \(N\) 个 visual candidates:

\[ z_t^{\mathrm{CFG}} =z_t^{\mathrm{uncond}}+ \gamma\left(z_t^{\mathrm{cond}}-z_t^{\mathrm{uncond}}\right) \]

再用 CLIP verifier 选择分数最高的图像 \(I^{\ast}\),对应 visual tokens 为 \(z^{\ast}_{\mathrm{img}}\)。实验中报告 \(N=3\)

Step 2 · Image guided SVG resampling

从 \(z^{\ast}_{\mathrm{img}}\) 继续生成 SVG。每次先采样 \(K\) 个 SVG tokens,拼到当前 script 后渲染 provisional image \(R_t\),然后计算:

\[ d_t=d(R_t,I^{\ast})=\mathrm{LPIPS}(R_t,I^{\ast}) \]

接受条件是:

\[ d(R_t,I^{\ast})\le d(R_{t-1},I^{\ast}) \]

若距离变大,就拒绝这一个 chunk 并 resample。论文设置每个 SVG 最多允许 \(M=3\) 次 rejection。

为什么比 best of N 便宜

best of \(N\) 需要完整生成 \(N\) 条最长可达 12K token 的 SVG。DuetSVG 把多样性搜索主要放在 576 token 的 image sequence。

为什么比最终 rerank 更强

它不是只在终点选最好,而是在 SVG rollout 中间反复检查方向是否偏离视觉目标,因此具备局部纠偏能力。

它隐含的假设

LPIPS 到 \(I^{\ast}\) 的距离应该大体随着 SVG 完成度下降。这个单调性并非总成立,尤其当前 chunk 只是先画背景或被后续路径遮挡时。

Reviewer 关键问题:论文没有报告 chunk size \(K\)、实际使用的 CFG scale \(\gamma\)、resampling 的 sampling temperature / top p / top k,也没有给出“LPIPS 非单调时是否会误拒绝正确结构”的系统分析。这些都是复现 TTS 的关键缺口。
05 · SVG Hub

数据不仅是规模,更是表示规范

作者认为现有 SVG 数据的两大问题是自动矢量化导致结构脏,以及 caption 太短。SVG Hub 同时清理 vector structure 与 text semantics。

SVG Hub 1M

来源包括 MMSVG、SVGX、Iconfont。去除 duplicate、auto vectorized SVG 与 blank rendering 样本。

作者承诺公开 1M 数据集。

SVG Hub 5M

论文主实验使用内部 5M 规模数据,test split 为 9,000 samples。

复现限制:5M 数据是 internal dataset,因此论文最强结果并不能仅凭公开 1M 数据完全复现。

SVG captioning pipeline

01Rasterize SVG先将矢量图渲染成图像。
02InternVL3 / Qwen2.5 VL生成 short、medium、detailed 三种粒度描述。
03Cross model verification一个模型生成,另一个模型核对图像并指出不准确处。
04Refinement采用修订后的 caption。
05Multi granularity pair同一 SVG 拥有从核心语义到细粒度颜色与 stroke 的多层描述。

SVG tokenization

Canvas normalization

统一到 \(800\times800\) viewBox。

Command vocabulary

M L C Q A Z Ellipse Circle Polygon Rect

Structure cleanup

移除 redundant / invisible elements,保留 <defs> gradient 与 <g> group transforms。

之后所有坐标 \((x,y)\) 被 quantize,再将 command、attribute、coordinate 序列化为 discrete tokens。

论文声称:这套标准化在 rendering 上保持 lossless,同时减少脚本体积。不过量化 bins、数值 tokenizer 的具体设计、属性 vocab 与 serialization grammar 并未在正文给全。
06 · Experiments

训练、benchmark 与结果

论文同时从 raster quality、semantic alignment、vector code similarity 与 path semantics 四个层面评估,避免只比较“看起来像不像”。

384²image resolution
16,384visual codebook size
1e-5learning rate, all stages
64×A100约 14 天

训练配置

Stage 1:80K steps,batch size 512。

Stage 2:300K steps,batch size 128。

Task sampling:T2I : T2SVG : I2SVG = 1 : 5 : 4。

Optimizer:AdamW。

Betas:\(\beta_1=0.9,\ \beta_2=0.95\)

Learning rate:\(1\times10^{-5}\)

Benchmarks 与 metrics

SVG Hub 5M test

9,000 samples。

T2SVG:FID, CLIP, Aesthetic, Path Semantics。

I2SVG:DINO, SSIM, LPIPS, PSNR, SVG Code Similarity, Path Semantics。

SArena Icon

6,000 samples。

用于额外检验 icon domain 上的 T2SVG / I2SVG generalization。

Path Semantics 到底测什么

随机删除 30% SVG paths,比较删除前后 rendering 的 CLIP score drop。若删除 paths 后语义几乎不变,说明那些 paths 很可能是冗余或没有承载显著语义。

因此这个指标某种程度上在衡量“每一条 path 是否值得存在”,比单纯像素重建更接近可编辑 SVG 的结构质量。

SVG Code Similarity 到底测什么

将 generated SVG code 与 ground truth SVG code 用 Qwen3 Embedding 8B 编码,计算 cosine similarity。它更像高层语法与结构相似度,而不是严格 AST equivalence。

它仍然不是“代码简洁性”或“拓扑正确性”的直接测量,因此不能完全替代 path count、node count、editability 或 DOM complexity 指标。

Table 1 · SVG Hub 5M 关键结果

MethodT2SVG FID ↓CLIP ↑Aesthetic ↑Path Sem ↑I2SVG DINO ↑SSIM ↑LPIPS ↓PSNR ↑Code Sim ↑
FLUX.1 dev + VTracer46.99025.3265.521.216
GPT 5 Thinking50.12224.9505.392.2950.9040.8060.21211.4850.916
Gemini 3 Pro48.76525.1465.462.4120.9210.8800.11613.8580.908
LLM4SVG 7B FT49.31823.3045.242.3150.9380.8820.09919.8430.944
Qwen3 VL 8B FT43.72023.9355.352.5250.9470.9100.09020.9150.950
DuetSVG 7B, w/o TTS35.06625.5845.522.7720.9550.9200.08222.0240.959
DuetSVG 7B, TTS33.57426.1065.562.9100.9620.9280.07523.5900.964

FID

35.066 → 33.574TTS 继续改善分布质量。

CLIP

25.584 → 26.106视觉候选搜索显著服务于语义对齐。

LPIPS

0.082 → 0.075I2SVG 更接近输入图像。
DuetSVG image-to-SVG qualitative comparison
Figure 5 · Image to SVG. VTracer 的像素拟合能力很强,但代码通常更冗余。VLM baseline 结构更简洁,却容易丢失局部细节。DuetSVG 试图在视觉 fidelity 与 vector structure 之间取得更好的平衡。

Ablation · 内部视觉引导到底有没有用

VariantT2SVG FID ↓CLIP ↑I2SVG DINO ↑SSIM ↑LPIPS ↓
w/o Internal Visual Guidance51.48223.2600.9390.8780.096
w/o T2I Pretraining36.95325.122
w/o Test time Scaling35.06625.5840.9550.9200.082
Full33.57426.1060.9620.9280.075
DuetSVG ablation
Figure 6 · Ablation. 最大的退化来自移除 visual outputs,而不是移除 TTS。这个结果非常重要,因为它说明论文的主要收益来自统一多模态生成本身,TTS 是额外增益。
一个非常有说服力的 ablation:作者指出纯 SVG variant 甚至弱于 fine tuned Qwen3 VL 8B,说明 Janus Pro backbone 作为纯语言模型并没有架构优势。加上 image modality 后反而超过 Qwen3 VL 8B,因此提升很难简单归因于 backbone。

Generalization

作者随机选 500 个 text prompts,每个 prompt 用 3 个 seed,得到 1,500 个 SVG。若 CLIP image embedding cosine similarity ≥ 0.98,则视作相同样本。结果为:

99.5%Novelty

生成结果在 SVG Hub 5M training corpus 中找不到 ≥0.98 similarity 的近邻。

99.8%Uniqueness

生成集合内部几乎没有重复样本。

DuetSVG nearest training samples
Figure 9 · Generated SVG 与 training nearest neighbor. 这是作者对 memorization 风险的一项定量与定性补充。
07 · Applications

统一模型带来的下游任务

论文强调 multimodal interface 的价值在于它不仅做 text to SVG,也能把 image、partial SVG、text instruction 混合成不同条件组合。

DuetSVG completion and editing
Figure 8 · SVG completion 与 semantic editing.

SVG completion

随机 mask 一部分 SVG paths,将 partial SVG 与其 rendered image 一起输入,目标是恢复完整 image 与完整 SVG script。

这一设计利用图像保留“整体视觉意图”,再让模型补齐缺失 vector structure。

Semantic SVG editing

由于缺少大规模 paired SVG editing data,作者用 Gemini 2.5 Flash 生成 edited image \(I_e\)。训练时输入 \(I_e\) 与 inverse editing instruction,要求模型重建 original image \(I_a\) 与其 SVG。

这是一种 synthetic inverse editing supervision。

08 · Reproducibility

复现需要知道什么,论文又漏了什么

下面把“明确报告的参数”和“真正落地仍缺失的参数”分开。后者不做猜测。

Base model
Janus Pro 7B
Image resolution
384×384
Visual sequence length
576 tokens
Visual codebook
16,384
SVG max length
12,000 text tokens
Stage 1
80K steps, BS 512
Stage 2
300K steps, BS 128
Task ratio
1 : 5 : 4
AdamW
β1 0.9, β2 0.95, LR 1e-5
TTS
N=3, M=3
TTS chunk size \(K\)
论文未报告
CFG scale \(\gamma\)
公式给出但 implementation 未报告最终值
SVG coordinate quantization bins
论文未报告
Sampling temperature / top p / top k
论文未报告
Weight decay / LR schedule / warmup
正文未报告
Stage 1 real vs synthetic mixing ratio
论文未报告
Stage 1 exact corpus size
论文未报告
5M dataset
内部数据,无法完全公开复现最强结果

建议的最小复现路径

1. 初始化 Janus-Pro-7B
2. 构建公开 SVG-Hub-1M 等价数据
3. 标准化 SVG 到 800×800 viewBox
4. 清理 invisible / redundant nodes
5. 约束 command vocabulary
6. 对 coordinates 做离散化
7. 生成 short / medium / detailed captions,并交叉验证
8. Stage 1: T2I SVG-style pretraining
9. Stage 2: T2I + T2SVG + I2SVG multi-task SFT
10. 输出序列固定为 [IMG tokens] → [SVG tokens]
11. I2SVG 训练加入 geometry / color augmentation 与 path dropout
12. 推理先采样 N 个 image candidates,再 CLIP 选 I*
13. SVG 按 chunk 生成,render 后用 LPIPS 与 I* 比较
14. 若 LPIPS 变差则 resample,最多 M 次 rejection
建议复现实验优先级:如果计算资源有限,最值得先验证的是“SVG only vs image then SVG”的 ablation,而不是直接复现 64×A100 的完整训练。它最直接回答内部视觉引导是否真的带来因果收益。
09 · Reviewer mode

作为 reviewer,我会怎么评

这不是“又一个 SVG LLM”。它提出了一个相当自然但之前没有被系统做好的统一建模视角,而且实验确实证明视觉分支不是装饰。

7.8/10

倾向:Strong Accept / Accept 边界,取决于 venue 对数据可复现性的权重。

我的核心判断

最强贡献是 把 visual plan 变成 autoregressive context,而不是只在 loss 外部加 raster supervision。这个结构非常简洁,且和统一多模态模型的发展方向一致。

优点

1. Problem formulation 很准。 抓住 SVG 作为 code 与 image 双重对象的本质。

2. Internal guidance 很干净。 不需要外接独立 T2I 模型,也没有跨模型 feature mismatch。

3. Ablation 有说服力。 去掉 image output 后显著退化,且 backbone 本身并不占优。

4. TTS 具有计算意识。 把 search 放在短 image sequence,再约束长 SVG rollout,是非常合理的 cost allocation。

5. Evaluation 不只看像素。 加入 Path Semantics 与 Code Similarity,至少正面承认 SVG 质量包含结构维度。

不足

1. 最强数据不可得。 主结果依赖 internal SVG Hub 5M,公开 1M 的结果明显较弱。

2. TTS 复现参数不完整。 \(K\)、\(\gamma\)、sampling 参数缺失。

3. LPIPS accept rule 过于局部。 SVG 是分层绘制,当前距离暂时变差不代表最终结果一定变差。

4. Editability 指标仍不足。 没有系统统计 path count、DOM depth、control point efficiency、layer semantics、human edit time。

5. 视觉 token 是 raster bottleneck。 384×384 与 576 tokens 对高频细节天然有限,appendix 的 failure case 已经暴露这一点。

我最希望作者补的 6 个实验

① Oracle visual guidance

用 ground truth rendered image tokens 作为 guidance,测量当前生成 visual plan 与理想上限之间的 gap。

② Guidance ordering

对比 image→SVG、SVG→image、interleaved chunks,确认收益是否主要来自 prefix conditioning。

③ TTS accept criterion

LPIPS 单调、CLIP、DINO、多指标组合以及 learned verifier 的系统比较。

④ Chunk size sweep

不同 \(K\) 对质量、rejection rate、latency 的 tradeoff。

⑤ Real editability study

让设计师完成指定编辑任务,比较 path cleanliness 与 edit time。

⑥ Scaling law

1M → 5M、7B → 更大 backbone 时,visual guidance gain 是否持续,还是主要来自数据规模。

一个值得继续发展的方向

当前方法把 raster image 作为内部 plan,但 SVG 的真正优势来自 vector structure。更进一步可以构造层次化中间表示,例如 scene graph、layer plan、primitive layout、path topology,再生成坐标级 token。也就是说,把现在的“image plan → SVG code”升级成“semantic layout → vector topology → geometry parameters → rendering”。这可能显著改善遮挡、层组织与可编辑性。

DuetSVG failure cases
Figure 11 · Failure cases. 细小结构与丰富颜色变化仍然容易丢失或偏色。作者建议未来使用 dynamic high resolution strategy。
10 · Final takeaway

读完后最应该记住的三件事

如果只记住三个概念,应该是下面这三个。

01

SVG 不是纯代码

对 SVG 只做 token likelihood,会忽略代码错误在视觉空间里的巨大非线性后果。

02

视觉 plan 可以是 token prefix

把 image tokens 放在 SVG tokens 前面,就能用最普通的 causal Transformer 实现内部视觉引导。

03

TTS 应该匹配序列成本

先在短视觉序列上搜索,再对长 SVG 序列局部纠偏,比完整 best of \(N\) 更经济。