- SVG 生成系列论文(一) 和 SVG 生成系列论文(二) 分别介绍了 StarVector 的大致背景和详细的模型细节。
- SVG 生成系列论文(三)则重点介绍实验以及数据集部分。
本篇则详细介绍 StarVector 如何制作数据集的,以及文章提到的两个 SVG 相关工具。
不过截止2024-05-10,https://github.com/joanrod/star-vector 还并没有开源任何代码和数据集,估计是因为论文没中的缘故😂
SVG 的数据增强
作者引入了几种增强操作来对SVG进行处理,以便对图像进行轻微的修改,从而帮助模型学习生成更精确的结果。
- 为了使模型能够从图像中准确捕获颜色,并将其编码为十六进制代码,然后将其引入SVG元素的
填充 (fill)
属性中。例如这段 svg 代码中的 fill 就是十六进制,
<path d="M0,0 L27,0 L25,37 L23,69 L21,72 L0,72 L-1,42 L-9,65 L-19,65 L-24,48 L-25,69 L-26,70 L-48,70 L-48,7 L-47,3 L-22,2 L-14,26 L-12,30 Z " fill="#292B59" transform="translate(215,213)"/>
- 对曲线的控制点进行旋转或添加噪声有助于模型学习准确捕捉边缘的位置或画笔 (Stroke) 的粗细:
- 旋转:在一个角度范围内进行随机旋转。通过首先解析元素的颜色,然后在 RGB 值上添加小的高斯白噪声来进行颜色变化。
高斯白噪声是一种常用的随机信号,具有以下特征:(1) 高斯分布:其取值服从正态分布,即平均值为0,标准差为1的正态分布。(2)白噪声:在频域上,它具有平均功率相等的频率分布,即在所有频率上的能量相等。
在颜色中添加高斯白噪声意味着在RGB(红绿蓝)通道中加入具有高斯分布的随机值。这种噪声通常被用来模拟真实世界中的随机变化,例如摄像机传感器噪声或其他环境噪声。 - 噪声:作者提出了曲线噪声,通过向贝塞尔曲线的控制点注入一小部分Perlin
[
1
]
^{[1]}
[1]噪声来实现。作者也尝试了添加高斯噪声,但结果不太自然。作者通过均匀地从0.01到0.05的区间中采样一个标量,并将其用于缩放噪声。
Perlin noise 是一种用于生成自然、随机和连续的噪声的算法,由Ken Perlin在1985年设计。它最初被用于创建逼真的纹理和地形,但现在在计算机图形学、动画和游戏开发中被广泛应用。
可以用 https://pypi.org/project/perlin-noise/ 库直接生成
直接将这些增强应用于 SVG 代码,这涉及解析 XML 代码并访问所定义的基元的属性和参数。作者使用 BeautifulSoup [ 2 ] ^{[2]} [2] 和SvgPathTools [ 3 ] ^{[3]} [3]库。一些基元使用以上增强方式进行了简化。
BeautifulSoup
Beautiful Soup 是一个用于从HTML和XML文档中提取数据的Python库。它提供了一种简单而灵活的方式来解析复杂的网页,并使得提取所需信息变得容易。以下是Beautiful Soup的一些主要特点:
-
解析HTML和XML:Beautiful Soup可以解析HTML和XML文档,使得您可以从网页中提取所需的数据。
-
简单易用:Beautiful Soup提供了简单而直观的API,使得从网页中提取数据变得容易。您可以使用类似于浏览器的选择器语法来查找和操作文档中的元素。
-
灵活性:Beautiful Soup可以处理各种不同类型的HTML和XML文档,并且在解析过程中能够处理不规范的标记和结构。
-
支持多种解析器:Beautiful Soup支持多种解析器,包括Python的内置解析器以及第三方解析器(如lxml和html5lib),使得您可以根据需求选择最适合您的解析器。
-
Unicode支持:Beautiful Soup能够正确处理Unicode编码,使得您可以处理来自不同语言和地区的文档。
总之,Beautiful Soup是一个功能强大且易于使用的库,适用于从网页中提取数据的各种应用场景,包括网络爬虫、数据抓取、数据挖掘等。
因为 SVG 是一种基于 XML 的矢量图形格式,因此在 HTML 或 XML 文档中嵌入的 SVG 代码可以被 Beautiful Soup 正确解析和处理。
SvgPathTools
svgpathtools
是一组用于操作和分析 SVG 路径对象和贝塞尔曲线的工具集。其包含了一系列函数,旨在轻松读取、写入和显示 SVG 文件,以及大量几何导向的工具来转换和分析路径元素。
此外,子模块 bezier.py 包含了用于处理通用的 n 次贝塞尔曲线的工具,这些曲线存储为 n 元组。
一些包含的工具:
- 读取、写入和显示包含路径(以及其他)SVG 元素的 SVG 文件
- 将贝塞尔路径段转换为 numpy.poly1d(多项式)对象
- 将多项式(标准形式)转换为它们的贝塞尔形式
- 计算切线向量和(右手规则)法向量
- 计算曲率
- 将不连续的路径分割成连续的子路径
- 高效地计算路径和/或路径段之间的交点
- 找到路径或路径段的边界框
- 颠倒路径段/路径的方向
- 裁剪和分割路径和路径段
- 平滑路径(即,平滑掉凹点,使路径可微分)
- 从路径域到段域的过渡映射,以及反过来(T2t 和 t2T)
- 计算封闭路径围成的面积
- 计算弧长
- 计算弧长的反函数
- 将 RGB 颜色元组转换为十六进制颜色字符串,以及反向转换
[1] Perlin noise improve adversarial robustness. arXiv preprint arXiv:2112.13408, 2021
[2] https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
[3] https://github.com/mathandy/svgpathtools