查看原文
其他

TOG 2021|基于双模态学习的高质矢量字体生成方法

论文地址: https://arxiv.org/abs/2110.06688

代码: https://github.com/yizhiwang96/deepvecfont

点击文末【阅读原文】跳转项目主页

【导 读】

本期分享发表于计算机图形学领域顶级期刊ACM TOG(在SIGGRAPH Asia 2021上宣讲)的文章DeepVecFont: Synthesizing High-quality Vector Fonts via Dual-modality Learning。

该论文由北京大学王选所连宙辉课题组完成。本文提出一种基于双模态学习的矢量字体生成模型DeepVecFont。其核心思想是对参考字形的矢量图和位图两种模态分别学习字体的风格特征,并对两种模态的特征进行融合,使用融合后的信息生成目标字形的矢量图和位图。同时,使用可微分栅格化方法,进一步沟通生成的矢量字形和位图字形之间的关系,修正生成的矢量字形中存在位置偏移问题。在公开数据集上的实验结果表明,DeepVecFont是首个能够自动生成紧凑高质矢量字体的方法。

1

背景动机

近年来,基于人工智能的字体生成问题引起了学术界广泛的兴趣,然而,大多数提出的方法仅仅能够生成字形图像(glyph image),并不能够直接生成矢量字体,字形图像在放大倍数较大时会显得非常模糊。传统的文字图像矢量过程较为繁琐,需要较多的规则定义,且人工干预的操作较多,非常耗时耗力。并且,模型生成的字形图像质量成为矢量化结果的瓶颈,即模型生成的字形图像中的瑕疵往往会被保留到矢量化的结果中,影响生成矢量字体的精度。


图1 字形位图和字形矢量图(绘制序列与渲染结果)

参考字形

DeepVectFont根据参考字形生成的矢量字形

DeepVectFont对矢量字体进行插值


图2 DeepVecFont生成矢量字体demo

矢量字体生成任务的一个挑战来自于绘制序列坐标的不确定性。如图3所示,曲线1(Curve 1)和曲线2(Curve 2)从字形上来看是一致的,但是在字体文件的标注中,曲线1被标注为2段,曲线2被标注为1段,这就给机器学习模型带来了极大的困惑。SketchRNN[1],Zhang等人的方法[2],SVG-VAE[3]通过混合密度模型(Mixture Density Network,MDN),对绘制笔画建模多个潜在的高斯分布(高斯混合模型),来尝试解决这个问题。但是,由于引入多个分布,MDN又带来了如下图所示的位置偏移问题,使得生成的字形看起来不是很协调。



图3 字体轮廓标注的不确定性和MDN网络带来的位置偏移问题

矢量字体生成任务的另一个挑战在于如何沟通矢量和图像模态间的信息。使用卷积神经网络(CNN)提取字形图像特征时,CNN善于使用不同层次的感受野抽取信息,对宏观属性学习能力强,如字体的宽度、高度、笔画粗细等。使用递归神经网络(RNN)提取绘制序列特征时,RNN对细节刻画准确(曲线的曲率,直线的角度),但是全局感知能力比较弱(RNN的遗忘特性)。现有工作(SVG-VAE[3],DeepSVG[4],Im2Vec[5]等)仅仅单独编码图像或者矢量模态信息,本模型考虑使用多模态融合来做互补。

2

模型方法

2.1

模型总览



图4 DeepVecFont模型的流程框图

图4对本论文提出的DeepVecFont模型进行一个总览,该模型接收少量参考矢量字形作为输入并输出一个目标矢量字形。输入字形和目标字形是属于同种字体。在训练阶段,参考字形的字符类别和目标字形的字符类别均是随机采样得到的。该模型主要包含以下几个步骤:

(1)将渲染好的参考字形图像送至一个图像编码器,用于学习图像层面的字体风格特征;

(2)将参考字形的绘制指令送至一个序列编码器中,用于学习绘制序列层面的字体风格风格特征;

(3)通过融合这两种风格特征,得到图像空间和序列空间统一的风格表征;

(4)将学习到的统一特征表示送到一个图像解码器中重建目标字形的图像;

(5)将学习到的统一特征送至一个序列解码器。因为在指令预测的过程中使用了混合分布模型,所以序列解码器的输出不是确定性的(determinate)。具体来说,它输出目标矢量字形指令参数潜在的分布。

(6)在训练和推理阶段, 使用可微分栅格化的方法去修正采样得到的矢量字形,使它们看起来更加协调。


2.2

模型结构细节



图5 DeepVecFont模型的数据流

如图5所示,图像编码和解码器采用CNN结构,序列编码和解码器采用LSTM结构。所有的参考字形图像是根据其字符类别放置到对应的通道上再输入到图像编码器中的。每个参考字形的矢量序列并行地送入序列编码器,再通过一个线性映射聚合所有的序列特征。本模型采用最常见的模态融合策略, 即拼接+多层感知机(Concat + MLP), 去学习图像和序列两种模态的联合表示。隐空间被VAE提出的KL(Kullback-Leibler)损失项所优化,使得字体风格向量的每一个维度尽可能服从标准正态分布,从而在隐空间采样得到新的字体更加容易。



图6 神经可微分栅格化器

在训练阶段,使用神经可微分栅格化器(NDR)对生成的绘制指令和对应的ground truth字形图像进行直接的对齐。如图6所示,NDR由一个序列编码器和一个图像解码器组成。给定训练集里的任意一个字形绘制序列, 该栅格化器学习去栅格化得到它对应的字形图像。Li等人的方法[6]不便在训练阶段阶段接入本模型,所以使用神经可微分栅格化器作为替代。通常来说,指令类别的预测和MDN损失函数的优化都是将注意力放在局部,而神经可微分栅格化器将注意力集中在全局。当预训练完成后,将神经可微分栅格化器接入主模型,用来增强预测得到的结果。神经可微分栅格化器的参数在主模型训练的时候是固定的,被设计用来减轻之前提到的位置偏移(location shift)问题。

2.3

测试(推理)阶段字形修正



图7 测试或者推理阶段对矢量字形进行修正

图7展示了在推理阶段如何进一步修正生成的矢量字形:

(1)首先,从得到的高斯分布中采样得到一些候选矢量字形;

(2)使用Li等人[6]提出的可微分栅格化器,去进一步修正之前生成的矢量字形。具体来说, 固定指令类别并调整指令坐标值,去最小化栅格化后的结果与生成的字形图像的L1距离,该优化过程使用梯度下降算法;

(3)然后,得到了所有候选字形修正后的结果,从所有修正后的矢量字形中挑选出最好的结果;

从图7可以看出, 该修正过程是被初始的字形结构显著影响的。如果初始的绘制指令的数量和类别和ground truth较为接近, 该修正过程大概率会得到高质量的矢量字形。


3

实验结果

本论文的实验主要包含以下几个部分,包括:

  • 给定某个字体的少量参考矢量字形,生成完整的矢量字形;

  • 矢量字体插值;

  • 随机生成矢量字体;

  • 和现有方法的对比。

3.1

Few-shot矢量字体生成





图8 根据少量参考字形生成完整矢量字体

图8展示了本模型在给定少量参考字形情况下生成完整字体的能力。输入的参考字形由红色的矩形框标注。在第二个例子中,本模型生成的矢量字形与人工设计的字形(ground truth)几乎完全相同。我们观察到对于第一个例子,有些生成的字形和ground truth有些轻微的不同,尤其是很多大写字符。考虑到本模型仅接受 “A”, “B”, “a”和“b”作为参考输入, 生成的其他字符的字形已经充分地体现了输入字形的风格特点。更重要的是,对于我们生成的结果,同种字体的不同字符的风格一致性是很统一的。


3.2

矢量字体插值



图9 矢量字体插值

得益于对风格隐空间的正则化,本模型通过操纵隐空间特征,可以对不同的字体进行插值。将插值后的特征送到解码器中可以生成得到字形的矢量序列和图像。接着,使用得到的字形图像对矢量序列进行修正。图9展示了本模型可以在不同的字体之间实现平滑的渐变,从而得到更多的视觉效果好的矢量字体。可以从图9中看出, 字体的粗细、斜体、衬线等属性平滑地发生了变化。

3.3

随机生成矢量字体





图10 从隐空间随机生成矢量字体

得益于风格隐空间的统一表示和正则化,本模型可以较为容易地从隐空间中进行采样生成新的风格。具体来说,从标准正态分布中随机采样128维向量,作为本模型的字体风格特征,去生成字形图像和矢量字形。图10展示了一些随机生成的字体 (修正后的),并且通过T-SNE方法将其呈现在二维坐标系中。红色的点表示随机生成的字体(由红色矩形框标注),绿色的点表示与这些字体风格最相近的训练集中的字体,黑色的点表示其他训练字体。可以观察到,本模型生成的字体是视觉上让人愉悦的,并且和最相近的训练字体有着风格上的差异。


3.4

与现有模型对比



图11 与其他方法对比 

图11将DeepVecFont与其他现有模型进行对比,包括SVG-VAE[3], DeepSVG[4]和Im2Vec[5]。Im2Vec方法采用本模型生成的字形图像进行矢量化。因为SVG-VAE和DeepSVG都是从单个字符中学习字体风格特征,这里将参考字形分别送入它们的风格编码器再取平均,作为最终使用的字体风格特征用于后续的重建。从图11可以看出,DeepSVG和SVG-VAE倾向于生成带有严重扭曲和瑕疵的矢量字形。Im2Vec主要存在三个问题:

(1)它倾向于首先拟合大的轮廓而忽略了小的轮廓,如“B”,“a”和“d”。

(2)对于具有连续多个凹区域的字形,如“m”,“M”和“k”, 它倾向于陷入局部极值。

(3)字形中的直线并没有被很好地拟合,拟合后的曲线也不如DeepVecFont的结果平滑。

因此我们可以得到结论:如果只使用图像模态作为监督,矢量字体的细节不可能被重建得非常好。借助于本论文提出的双模态学习策略, 在没有修正的情况下,DeepVecFont生成的字体已经显著好于现有的方法,并且在修正之后,质量是和人类设计的结果可比的。


图12 与Adobe Image Trace的对比

图12将DeepVecFont和常用的矢量化工具Adobe Image Trace (AIT)进行对比。DeepVecFont生成的高分辨率(256*256)字形图像输入到AIT中得到矢量化结果。如图12所示, AIT的矢量化结果主要存在两个问题:

(1) AIT对于每段曲线甚至直线都倾向于用高阶的贝塞尔曲线去拟合;

(2) 生成图像上的很多瑕疵会被保留下来,因为AIT的设计原则是要尽可能的拟合曲线形状。

与之不同的是, DeepVectFont在进行修正之前就可以生成平滑且指令类别准确的矢量字形。因此,生成的字形图像上的很多瑕疵可以在DeepVecFont的修正过程中被避免掉,但是在AIT中被保留了。这主要是因为在DeepVecFont的修正过程,指令的类别是固定的,被调整的仅仅是指令的坐标参数。当指令类别的预测比较准确时,矢量字形的修正不会受到生成图像中瑕疵的影响。

4

总结

本论文提出了一种基于双模态(栅格化图像和矢量轮廓)学习的高质矢量字体生成方法。该工作首次实现媲美于人类设计师制作的矢量字体的自动生成。在公开数据集上的定性与定量的实验,证明了本论文所提出的DeepVecFont模型的有效性。未来计划通过改进图像和序列生成的基础网络结构,来提升本模型的生成效果。并且, 如何将本论文的方法应用于其他的书写系统(例如中文)也是一个有趣的研究方向。


5

参考文献

[1] Ha and Douglas. "A neural representation of sketch drawings." arXiv preprint arXiv:1704.03477 (2017).

[2] Zhang et al. "Drawing and recognizing chinese characters with recurrent neural network." TPAMI (2017).

[3] Lopes et al. "A learned representation for scalable vector graphics." ICCV (2019).

[4] Carlier et al. "Deepsvg: A hierarchical generative network for vector graphics animation." NeurIPS (2020).

[5] Reddy et al. "Im2vec: Synthesizing vector graphics without vector supervision." CVPR (2021).

[6] Li et al. "Differentiable vector graphics rasterization for editing and learning." TOG (2020).

北大王选所

2021年度优秀成果推介

近期发布

release

—   版权声明  —

本微信公众号刊载的所有内容,由北京大学王选计算机研究所微信自身创作、收集的文字、图片和音视频资料,版权属北京大学王选计算机研究所所有;从公开渠道收集、整理及授权转载的文字、图片及音视频资料,版权属原作者。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存