想了解更多AIGC的内容,请访问:
51CTO AI.x社区
https://www.51cto.com/aigc/
可缩放矢量图形(Scalable Vector Graphics,SVG)是用于描述二维图型和图型应用程序的基本元素;与传统的像素图形不同,SVG 使用数学描述来定义图形,因此可以在任何大小下无损地缩放而不失真。这使得 SVG 成为网站设计领域的理想选择,特别是在需要适应不同分辨率和设备的情况下。但是创作者手工设计 SVG 是高成本并具有挑战的。
最近,随着 CLIP 和生成式模型的快速发展,文本引导的矢量图合成(Text-to-SVG)在抽象像素风格 [1,2] 和矢量手绘草图 [3,4] 等领域都取得了不错的进展。通过可微分渲染器 [5] 驱动矢量路径基元自动合成对应的矢量图形,成为一个热门的研究方向。
相比于人类设计师,Text-to-SVG 方法可以快速并大量的创建矢量内容,用于扩充矢量资产。 然而,现有的 Text-to-SVG 方法还存在两个限制:1.生成的矢量图缺少编辑性;2. 难以生成高质量和多样性的结果。为了解决这些限制,作者提出了一种新的文本引导矢量图形合成方法:SVGDreamer。
论文题目:
SVGDreamer: Text Guided SVG Generation with Diffusion Model
论文地址:
https://arxiv.org/abs/2312.16476
代码地址:
https://github.com/ximinng/SVGDreamer
项目地址:
https://ximinng.github.io/SVGDreamer-project/
01 实现思路
▲ 图1:SVGDreamer流程图
SVGDreamer 由两部分构成:语义驱动的图像矢量化(Semantic-driven Image Vectorization,SIVE)和基于矢量例子的分数蒸馏(Vectorized Particle-based Score Distillation,VPSD)构成。
其中 SIVE 根据文本提示矢量化图像,VPSD 则通过分数蒸馏从预训练的扩散模型中合成高质量、多样化并具有审美吸引力的矢量图。
1.1 语义驱动的图像矢量化 (SIVE)
SIVE 根据文本提示合成语义层次解耦的矢量图。它包括两个部分:
- 矢量基元初始化(Primitive Initialization)
- 基于语义级优化(Semantic-aware Optimization)
如图 1 上半部分所示,文本提示中不同的词语对应不同的注意力图,这使得作者可以借助注意力图初始化矢量图控制点(control points)。具体来说,作者对注意力图进行归一化,将它视为一个概率分布图,根据概率加权采样画布上的点作为贝塞尔曲线的控制点。
然后,作者将初始化阶段获得的注意力图转换为可重复使用的掩码,大于等于阈值的部分设为 1,代表目标区域,小于阈值为 0。作者利用掩码定义 SIVE 损失函数从而精确地优化不同的对象。
SIVE 确保了控制点保持在各自的语义对象区域中,从而实现不同对象的解构,最终结果如图 1 右上部分所示。
1.2 基于矢量粒子的分数蒸馏 (VPSD)
之前基于扩散模型的 SVG 生成工作 [2,4],已经探索了使用分数蒸馏采样(SDS)优化 SVG 参数的方式,但这种优化方式往往会带来颜色过饱和、优化得到的 SVG 过于平滑的结果。
受变分分数蒸馏采样的启发,作者提出了基于向量化粒子的分数蒸馏采样(Vectorized Particle-based Score Distillation,VPSD)损失来解决以上问题。相对于 SDS,这种采样方式将 SVG 建模为控制点和色彩的一个分布,VPSD 通过优化这个分布来实现对 SVG 参数的优化:
由于直接优化另一个模型 的成本过大,所以引入 Lora 来减少被优化的参数量:
最后,为了改善合成矢量图的美观评价,作者引入了一种奖励反馈学习方法(ReFL),将采样得到的样本输入到使用预训练的 Reward 模型中,共同进行对 LoRA 参数的优化:
最后完整的目标函数即为上述三个函数的加权组合:
通过反向传播更新 SVG 路径参数,经过循环迭代完成优化,得到最终结果。
02 实验结果
2.1 定性结果
下图展示了 SVGDreamer 生成的 6 种风格类型的 SVG 结果,包括肖像图风格(Iconography)、像素风格(Pixel-Art)、水墨(Ink and Wash)、多边形(Low-poly)、手绘(Sketch)和线条绘画(Painting)风格等。不同颜色的后缀表示不同的 SVG 风格类型,这些风格类型也并不需要在 Prompt 中给出,只需要通过控制矢量图基元实现。
▲ 图2. SVGDreamer结果可视化
SVGDreamer 能够根据文本提示合成语义层次解耦的矢量图,这使得其可以被用于创建大量矢量数据资产,同时这些矢量元素可以被自由地组合,如下图所示:
▲ 图3:SVGDreamer合成的矢量资产示意图
2.2 应用展示
除此之外,作者展示了 SVGDreamer 的应用:制作矢量海报。通过将制定字形转为矢量表示,并且与生成的矢量图结合,即可得到美观的矢量海报。与基于扩散模型的生成式位图海报相比,矢量海报的文字与内容部分同样具有良好的编辑性,并且不会产生错误的文字:
▲ 图4:SVGDreamer制作的矢量海报与位图海报合成方法的比较
03 总结
在这项工作中,作者介绍了 SVGDreamer,一个用于文本引导矢量图形合成的创新模型。SVGDreamer 结合了两个关键的技术设计: 语义驱动的图像矢量化 (SIVE) 和基于矢量粒子的分数蒸馏 (VPSD),这使得模型能够生成具有高可编辑性、卓越的视觉质量和显著的多样性的矢量图形。
由于SVGDreamer能够生成具有可编辑性的复杂矢量图形,因此,SVGDreamer 有望显著推进文本到 SVG 模型在设计领域的应用。它已经被证实可以用来创建矢量图形资产库,设计师可以根据不同的需求,很容易地将库中的元素重新排列组合,用于创建独特的矢量海报或 Logo,以及其他矢量艺术形式。
04 矢量图可微渲染库PyTorch-SVGRender介绍
项目地址:
https://qianyu-lab.github.io/PyTorch-SVGRender-project/
代码地址:
https://github.com/QianYu-Lab/PyTorch-SVGRender
文档地址:
https://pytorch-svgrender.readthedocs.io/en/latest/index.html
Pytorch-SVGRender 是作者团队在 2023.12 发布的一个用于 SVG 生成的可微分渲染方法的 Python 库,使研究人员和开发者们可以通过一个统一的、简化的接口来访问不同的 SVG 生成技术。
Pytorch-SVGRender 包含两大功能:位图到 SVG 的渲染(Img-to-SVG),以及文本到 SVG(Text-to-SVG)的渲染。并且整合了与这些功能有关的研究成果,例如 DiffVG、LIVE、CLIPasso、CLIPDraw、VectorFusion、Word-As-Image、DiffSketcher 和 SVGDreamer 等。
Pytorch-SVGRender 的设计理念是基于模块化和可扩展性的原则,让用户能够无缝集成最新的 SVG 创作技术。通过提供一套清晰的、统一的 API,该库允许开发者轻松地调用底层绘图算法,无需深入了解其底层原理。此外,库中的每一种方法的相关参数都经过精心优化,以确保生成的 SVG 文件在性能和质量上都能满足高标准的要求。
最后,Pytorch-SVGRender 还提供了丰富的文档和示例代码,帮助用户快速入门上手。作者希望这个库可以提高 SVG 研究人员和开发者的工作效率,为未来 SVG 相关技术的创新与实践提供帮助。
想了解更多AIGC的内容,请访问:
51CTO AI.x社区
https://www.51cto.com/aigc/