- SVG 生成系列论文(一) 和 SVG 生成系列论文(二) 分别介绍了 StarVector 的大致背景和详细的模型细节。
- SVG 生成系列论文(三)和 SVG 生成系列论文(四)则分别介绍实验、数据集和数据增强细节。
- SVG 生成系列论文(五)介绍了从光栅图像(如 PNG、JPG 格式)转换为矢量图形(如 SVG、EPS 格式)的关键技术-像素预过滤(pixel prefiltering), Diffvg 这篇论文也是 SVG 生成与编辑领域中 “基于优化”方法的开创性研究。
- SVG 生成系列论文(六) 和 SVG 生成系列论文(七) 简要介绍了 IconShop 的背景、应用和部分细节。
论文名:IconShop: Text-Guided Vector Icon Synthesis with Autoregressive Transformers (Siggraph Asia 2023)
文章提出的模型输入为文本,模型输出为单色的、相对简单的矢量图 icon。
技术细节主要分为 4 块:
- SVG 表示与 Token 化:介绍用于表示 SVG 图标的数据结构以及将 SVG 脚本转换为离散标记序列的策略。
- 掩码方案:掩码方案的实现细节,该方案使自回归模型能够基于双向上下文进行中间填充(FIM,Fill-In-the-Middle)。
- 模型架构:详细阐述了 IconShop 的主要框架和嵌入策略。
- 训练:介绍整个流程的训练目标。
上篇 介绍了 SVG 表示与 Token 化、掩码方案,本篇则介绍模型架构和具体的训练技巧。
模型架构
架构整体分为 4 个部分:SVG 图标嵌入(SVG Icon Embedding),文本嵌入(Text Embedding),输入准备和输出生成。
- SVG 图标嵌入
每个 SVG 序列包含五类不同的 token:一维坐标,3种命令类型(M, C, L),SVG 结束标记<EOS>
,掩码标记<Mask>
,掩码结束标记<EOM>
。
每个图标在 200×200 的边界框内,因此可能的一维坐标有 200² 个。为了表示不同类型的 token,将它们转换为维度为 40006(计算方式为 200² + 3 + 1 + 1 + 1)的独热向量。
通过一个可学习的嵌入矩阵 W ∈ R d m o d e l × 40006 \mathsf{W} ∈ R ^{d_{model}×40006} W∈Rdmodel×40006 将这些独热向量转换为 d m o d e l d_{model} dmodel 维的向量。并类似 [ 1 ] ^{[1]} [1] 中使用两个额外的可学习矩阵 W x , W y ∈ R d m o d e l × 200 \mathsf{W^{x}}, \mathsf{W^{y}} ∈ R ^{d_{model}×200} Wx,Wy∈Rdmodel×200 来增强坐标信息。
e i ⟵ W 2 + W x + W y h i x + W y h i y + P E i e_{i}\,\longleftarrow\,\mathsf{W}^{2}+\mathsf{W}^{x}+\mathsf{W}^{y}\mathsf{h}_{i}^{x}+\mathsf{W}^{y}\mathsf{h}_{i}^{y}+\mathsf{\mathsf{P}}\mathsf{E}_{i} ei⟵W2+Wx+Wyhix+Wyhiy+PEi
其中 h i ∈ R 40006 h_i ∈ R ^{40006} hi∈R40006 是第 𝑖 个标记的独热向量。 ( h i x , h i y ) ∈ R 200 (h_{i}^{x},h_{i}^{y})∈ R ^{200} (hix,hiy)∈R200 表示其一维坐标的二维表示。然后加入位置编码 P E i PE_i PEi 得到最终的嵌入 e i e_i ei 。
- 文本嵌入
- 大规模语言模型(LLM)在广泛的文本数据上训练,能够捕捉复杂的词语关系,包括同义词和反义词。为了利用这种丰富的知识,从一个预训练的 BERT 模型 [ 2 ] ^{[2]} [2]中提取词嵌入层,并保持其固定以处理文本输入。
- 作者还使用相应的词语分词器 tokenizer将文本描述离散化。分词器在文本开头添加 [CLS] 标记,在结尾添加 [SEP] 标记,分别表示文本序列的开始和结束。
- 输入准备
- 由于文本描述和 SVG 序列长度不同,将文本 token s t e x t g t s_{text}^{gt} stextgt 和 SVG token s i c o n g t s_{icon}^{gt} sicongt 都用 0 填充为固定长度(具体实现上,SVG 为 512,文本为 50)。填充后,将它们连接形成目标序列 (期望的输出) s = [ s t e x t g t : s i c o n g t ] s=[s_{text}^{gt} :s_{icon}^{gt}] s=[stextgt:sicongt]
- 在自回归 Transformer 中,模型根据前面的标记预测下一个标记。为了准备输入序列 𝑡,去掉 𝑠 的最后一个标记(即
<EOS>
),并在开头添加<SOS>
标记。这将 𝑠 向右移动一个位置,得到输入 t = [ < S O S > : t t e x t : t i c o n ] t=[<SOS>:t_{text} :t_{icon}] t=[<SOS>:ttext:ticon] - 由于去掉了 𝑠 的最后一个标记,因此 t i c o n t_{icon} ticon 比 s i c o n g t s_{icon}^{gt} sicongt 少一个标记。
- 输出生成
在任何给定位置 𝑘,自回归 Transformer 根据前 𝑘 − 1 个标记生成一个维度为 d m o d e l d_{model} dmodel 的向量。通过线性变换和 softmax 函数获得在位置 𝑘 发生的所有标记的概率。
训练细节
训练目标是最小化文本和图标 token 的分别交叉熵损失。假设文本和图标的输出概率分别为 s out text s_{\text{out}}^{\text{text}} souttext 和 s out icon s_{\text{out}}^{\text{icon}} souticon,我们计算各自的交叉熵损失,然后通过加权求和的方法将这些损失结合起来,如下所示 [Ramesh 等,2021]:
ℓ
text
=
CE
(
s
out
text
,
s
gt
text
)
\ell^{\text{text}} = \text{CE}(s_{\text{out}}^{\text{text}}, s_{\text{gt}}^{\text{text}})
ℓtext=CE(souttext,sgttext)
ℓ
icon
=
CE
(
s
out
icon
,
s
gt
icon
)
\ell^{\text{icon}} = \text{CE}(s_{\text{out}}^{\text{icon}}, s_{\text{gt}}^{\text{icon}})
ℓicon=CE(souticon,sgticon)
ℓ
total
=
λ
t
ℓ
text
+
λ
i
ℓ
icon
\ell^{\text{total}} = \lambda_t \ell^{\text{text}} + \lambda_i \ell^{\text{icon}}
ℓtotal=λtℓtext+λiℓicon
其中, CE ( ) \text{CE}() CE() 是标准的交叉熵函数, λ t \lambda_t λt 和 λ i \lambda_i λi 是控制文本和图标重建相对重要性的加权参数。通过反复试验,我们在实验中设置 λ t = 1.0 \lambda_t = 1.0 λt=1.0 和 λ i = 7.0 \lambda_i = 7.0 λi=7.0。
参考文献:
[1] SkexGen: Autoregressive Generation of CAD Construction Sequences with Disentangled Codebooks. In International Conference on Machine Learning. 24698–24724.
[2] Well-Read Students Learn Better: On the Importance of Pre-training Compact Models. arXiv preprint arXiv:1908.08962v2.