SVG 图形的 AI 生成技术,本质上是让模型学会输出带有几何约束的矢量语言。不同于生成像素阵列,生成 SVG 需要同时解决 **拓扑结构、连续坐标的精确性、颜色填充规则和可读的代码语法** 等问题。目前主流实现可以归为两大技术路线,以及它们的混合变体。
路线一:把 SVG 当作"代码语言"来生成
这种方法将 SVG 视为一种特殊的标记语言(XML 文本或绘图命令序列),直接使用序列模型进行建模,就像让 AI 写代码一样。
1. 序列化表示
一个 SVG 图形的所有元素都可以被展平成一条 token 序列。比如路径 `<path d="M10 20 C30 40..."/>` 可以被拆解为:
-
**命令字母**:`M`(移动到)、`C`(三次贝塞尔)、`L`(直线)、`Z`(闭合)等
-
**坐标数值**:`10 20`、`30 40` 等
-
**样式属性**:`fill="#FF0000"`、`stroke-width="2"` 等
更高级的表示会对结构做分层处理(如 DeepSVG),将整个图分解为多个形状,每个形状再分解为命令序列,这样模型先决定全局布局,再生成局部细节。
2. 模型训练
基于 Transformer 的自回归模型(如 GPT 风格的解码器)在大量 SVG 数据上训练:
-
**输入/输出**:都是上述 token 序列,从前一个 token 预测下一个 token。
-
**嵌入**:命令字母和坐标数字分别编码,坐标通常做归一化处理。
-
**约束解码**:在推理时,可以强制模型只生成合法 SVG 语法的 token(例如 `M` 后面必须跟两个数字),从而 100% 避免语法错误。
-
**典型工作**:StarVector 基于 LLM 微调,能根据文本描述生成图标级 SVG;DeepSVG 使用分层 VAE,可以在潜空间内插值生成新图标。
**优点**:速度快,一次前向传播即可得完整 SVG,结构清晰易编辑。
**局限**:生成的细节丰富度受限于训练数据,很难跳出数据集的风格画出一幅复杂艺术插画。
路线二:把 SVG 当作"可优化画布"进行迭代
这种方法不直接生成文本,而是将 SVG 定义为一组**可微分的几何参数**(贝塞尔曲线控制点、颜色值、透明度等),然后利用强大的视觉模型作为"评鉴师",反复修改这些参数,直到渲染结果符合描述。
1. 核心组件:可微渲染器
传统的 SVG 渲染(如浏览器)是把矢量参数变成像素的不可微黑盒。为此,研究者开发了**可微渲染器**(如 `diffvg`),它能输出抗锯齿的栅格图像,同时支持对控制点坐标、颜色等参数计算梯度。这意味着你可以像训练神经网络一样,用梯度下降来更新一个圆的圆心位置或贝塞尔曲线的手柄。
2. 优化目标:分数蒸馏采样
这是让矢量图"听懂"自然语言的关键。流程如下:
-
**初始化**:随机生成一组简单的 SVG 参数,比如一个圆形和几个随机路径。
-
**渲染**:用可微渲染器将当前参数渲染成一张像素图 \( x \)。
-
**加噪 & 预测**:给 \( x \) 添加噪声,然后送入一个预训练的**文生图扩散模型**(如 Stable Diffusion)。该模型会根据你的文本提示(如"一只坐在月亮上的猫"),预测当前步应该去除的噪声。
-
**计算 SDS 损失**:扩散模型预测的去噪方向,实际就是"如何修改这幅图才能让它更符合文本描述"。这个方向被转化为一个损失函数(即 SDS 损失),对渲染图 \( x \) 的梯度是可以求出的。
-
**反向传播更新参数**:梯度通过可微渲染器流回 SVG 参数,参数被微调,比如让某个控制点向右移动一点,或者把填充色变暖一点。
-
**重复 2-5**:经过数千次迭代,一个由简单图形开始的矢量画会逐渐长成复杂的、符合提示词的精致插画。
**代表工作**:VectorFusion、DiffSketcher、CLIPasso(使用 CLIP 而非扩散模型)。它们能生成光影丰富、笔触感强的矢量艺术。
**优点**:艺术表现力极强,可处理复杂构图和抽象概念,完全不需要成对的文字-SVG 数据。
**局限**:**生成极慢**(每次需要几百到上千次迭代优化),且生成的 SVG 往往包含成千上万个细小路径,不易直接手动编辑。
其他混合方法与关键挑战
混合路线:图像生成 + 自动矢量化
先用文生图模型(如 Midjourney、DALL·E)生成一张高质量的像素图,再用深度学习矢量化工具(如 DeepVecFont、LIVE、VTracer)将其转换为 SVG。这避开了直接生成矢量的困难,但矢量化后路径可能很繁琐,且丧失了矢量固有的编辑独立性。
潜空间扩散模型
也有工作试图结合两者优势,如 IconShop:先用 Transformer 把 SVG 压缩成离散的潜空间编码(类似 VQ-VAE),然后在这个潜空间中训练扩散模型。生成时在潜空间快速去噪,再解码回 SVG,兼顾了速度和一定多样性。
主要技术挑战
-
**拓扑可微性**:形状的突然出现/消失、遮挡关系的改变,在数学上不可微。现有方案使用软化版近似,但这会引入误差和伪影。
-
**层次和复用**:人类设计的 SVG 善用 `<g>` 组、`<defs>` 和复用,而 AI 生成的往往是一大堆扁平路径,缺乏语义结构。
-
**数值精度与简洁性**:AI 容易产生大量冗余、非平滑的节点,需要后处理简化,但可能破坏渲染效果。
-
**长程一致性**:生成一个包含 200 个形状的 SVG 时,序列模型容易遗忘开头,而优化法难以维持元素间的统一风格。
总结:两种哲学的碰撞
| 维度 | 语言模型式 (SVG as Code) | 扩散优化式 (SVG as Canvas) |
|------|---------------------------|-----------------------------|
| **生成原理** | 自回归预测下一个 token | 基于视觉模型梯度迭代优化参数 |
| **速度** | 秒级出图 | 分钟级(数百次梯度更新) |
| **结构质量** | 语法正确,逻辑清晰,易编辑 | 艺术感强,但路径堆砌,难编辑 |
| **创意自由度** | 受限于训练数据分布 | 可以表现任意复杂的光影和笔触 |
| **数据依赖** | 需要海量高质量 SVG-文本对 | 只需预训练文生图模型,无需矢量数据 |
目前,这两种路线正在相互融合:利用大语言模型先规划图层级结构,再用优化法生成每层的细节;或者用优化法生成大量矢量数据来反哺训练语言模型。AI 生成 SVG 正在从"能用"向"好看且好用"快速演进。