在 DeepSVG(2020)奠定了深度学习处理矢量数据的基石后,学术界和工业界沉寂了短暂的时间。然而,随着多模态大模型(MLLM)和扩散模型(Diffusion Models)的崛起,SVG 生成领域迎来了“寒武纪大爆发”。
本章将带你穿越 2023-2024 年的前沿工作。我们将不再局限于简单的“图标重建”,而是探讨如何让模型理解复杂的层级结构、处理图文对齐以及通过代码推理生成矢量。
本章的学习目标:
在 DeepSVG 时代,模型更像是一个“复读机”,记忆坐标的分布。而现代工作致力于让模型拥有“画师的思维”。我们可以将现有工作版图通过以下 ASCII 矩阵来理解:
+-----------------------------------------------------------------------------+
| Modern SVG Generation Taxonomy |
+-----------------------------------------------------------------------------+
| | 输入模态 (Input) |
| 核心机制 (Mechanism) | ------------------------------------------------ |
| | Image (Pixel) | Text (Description) |
+--------------------------+--------------------+-----------------------------+
| | [Im2Vec] | [DeepSVG-Text] |
| 1. 自回归序列生成 | [StarVector] | [IconShop] |
| (Autoregressive/Transformer)| 强结构,依赖大量数据 | 需解决文本-形状对齐难题 |
+--------------------------+--------------------+-----------------------------+
| | | [VectorFusion] |
| 2. 扩散模型生成 | - | [SVG-Diffusion] |
| (Latent/Vector Diffusion)| | 多样性好,但难以保证拓扑合法性 |
+--------------------------+--------------------+-----------------------------+
| | [InternSVG] | [ChatSVG] |
| 3. LLM 代码生成 | (视觉作为 Prompt) | [GPT-4o] |
| (SVG-as-Code) | 极强的语义推理, | 几何精度较差,易产生幻觉 |
| | 拓扑完美 | |
+--------------------------+--------------------+-----------------------------+
| | [CLIPasso] | [LiveSketch] |
| 4. 优化与迭代 | [Vectorization] | (实时笔画优化) |
| (Optimization-based) | 极其贴合原图, | 速度慢,不可编辑(面条代码) |
| | 但生成过程慢 | |
+--------------------------+--------------------+-----------------------------+
StarVector (CVPR 2024) 是目前 Image-to-SVG 任务中的 SOTA(最先进)代表之一。它解决了一个核心痛点:如何让生成的 SVG 既像原图(视觉保真),又具有合理的图层结构(拓扑合理)。
StarVector 并不只看 SVG 文本,它通过一个巧妙的架构同时利用了视觉特征和代码序列:
<x> <y>,而是设计了包含 命令 Token (Command Tokens) 和 坐标 Token (Coordinate Tokens) 的混合词表。之前的模型只能画简单的 Icon。StarVector 引入了动态序列长度处理机制,能够生成包含数百个 Path 的复杂插画。它通过学习“什么时候结束当前 Path”和“什么时候结束整个文档”的 EOS (End of Sequence) Token 来实现层级控制。
InternSVG 代表了 LLM 时代的解决思路。它的核心假设是:SVG 不需要专门的模型,通用 LLM 只要稍加微调(SFT)就能理解。
InternSVG 不像 StarVector 那样从头训练一个 Transformer,而是基于 LLaMA 或 Vicuna 等开源大模型进行指令微调(Instruction Tuning)。
"Human: Draw a red circle suitable for an app icon. <Img>..."LLM 虽然懂 XML 语法,但对空间坐标极其不敏感(例如不知道 (100,100) 是中心还是右下角)。InternSVG 采用的策略:
在构建 MLLM 时,InternSVG 的思路告诉我们:利用预训练 LLM 的文本推理能力是处理复杂 User Prompt 的捷径。我们不需要从头教模型什么是“苹果”,只需要教它“苹果的 SVG 怎么画”。
OmniSVG 试图解决“专用性”问题。大多数模型要么专门生成字体(Glyph),要么专门生成图标。
OmniSVG 提出了一种通用的潜空间(Latent Space)表示。
Vector(粗体 'A') - Vector(细体 'A') + Vector(细体 'B') ≈ Vector(粗体 'B')。它尝试将 SVG 的 几何结构 (Geometry) 和 样式属性 (Fill/Stroke/Color) 解耦。
虽然 DiffVG (Differentiable Vector Graphics) 是 2020 年的工作,但它是现代 SVG 训练不可或缺的组件(Loss 计算器)。
在标准渲染(如 Chrome)中,一个像素颜色的计算包含“判断点是否在三角形内”的硬阈值(Hard Threshold):
DiffVG 引入了抗锯齿的平滑近似:
CLIPasso 不是一个模型,而是一个基于 DiffVG 的优化过程。
1 - CosineSimilarity(Render_CLIP, Text_CLIP)。受到 Stable Diffusion 的启发,研究者尝试将扩散过程应用到矢量数据上。
字体是 SVG 的特殊子集,对拓扑一致性要求极高(必须闭合,不能自交)。相关工作通常引入了骨架引导 (Skeleton Guidance) 和 双轮廓约束,确保生成的字形既美观又符合几何规范。
下表对比了构建 SVG-MLLM 时可选的技术路线:
| 特性 | DeepSVG (Baseline) | StarVector (SOTA) | InternSVG (LLM) | CLIPasso (Optimization) |
|---|---|---|---|---|
| 基础架构 | Transformer (Seq2Seq) | Transformer + ViT | LLaMA / Vicuna | 无 (基于迭代优化) |
| 坐标表示 | 0-255 离散 Token | 0-1024 混合 Token | 纯文本浮点数 | 连续浮点参数 (Tensor) |
| 多模态对齐 | 无 (单模态) | 强 (Visual Encoder) | 极强 (LLM 语义) | 强 (CLIP 语义) |
| 拓扑质量 | 中等 (偶有断裂) | 高 (结构清晰) | 极高 (代码规范) | 极差 (面条式路径) |
| 可编辑性 | 较好 | 好 | 最好 (带语义注释) | 差 |
| 推理速度 | 快 (ms级) | 中 (秒级) | 慢 (LLM Token 生成慢) | 极慢 (分钟级迭代) |
| 适合场景 | 简单图标补全 | 复杂插画矢量化 | 复杂指令交互/修改 | 艺术创作/抽象画 |
Rule of Thumb (经验法则):
<COMMAND> 和 <COORD> 分开的词表,而某些新方法尝试将它们交错(Interleave)。这样做有什么潜在好处?[0, 1],有的到 [-1, 1],有的基于 ViewBox,有的基于 Bounding Box。viewBox 重写为 0 0 256 256(或其他固定值),并相应缩放所有 Path 命令的参数。不要相信原始数据的 ViewBox!NaN。1e-3 (ReLU + epsilon)。xml.etree 解析报错。</svg>。d="..." 属性,自动补全 XML 外壳。fill-rulefill-rule="nonzero",而某些数据集(如字体)需要 evenodd。模型如果没学到这个属性,拓扑就会渲染错误。fill-rule 作为特殊的 Token 加入到词表中进行预测,或者在预处理时统一转换为一种格式。