【新智元导读】Github 用户 kaonashi-tyc 将字体设计的过程转化为一个“风格迁移”(style transfer)的问题,使用条件 GAN,训练神经网络自动将输入的汉字转化为另一种字体(风格)的汉字,效果相当不错。
今天为大家介绍一个使用 GAN 自动生成中文字体的项目。
创造字体是件很困难的事情,创造中文字体就更难了。
要创造一套符合 GBK(中国政府规定的字符集)的字体,设计师需要为超过 26000 个汉字做设计,有时候需要花好几年的时间才能完成。
为了解决了这个问题,Github 用户 kaonashi-tyc 想到,先手工设计一部分汉字,其余的汉字让计算机自动生成不就行了?——毕竟,汉字是由偏旁部首组合而成的,“任”这个字里的单人旁,在“仁”这个字里看起来也一样。
于是,作者将字体设计的过程转化为一个“风格迁移”(style transfer)的问题。他用两种不同字体作为训练数据,训练了一个神经网络,训练好的神经网络自动将输入的汉字转化为另一种字体(风格)的汉字,概念如下图所示。
kaonashi-tyc 将他的首次尝试命名为“Rewrite:中文字体风格迁移”(Rewrite: Neural Style Transfer For Chinese Fonts)。
但是,这个初步的尝试还有一些缺陷(见下图),作者自己总结认为:
为了解决上述问题,作者进行了新的尝试,也就是我们这次重点介绍的 zi2zi 这个项目。
这一次,作者还是使用风格迁移解决中文字体生成的问题,不过他使用了条件生成对抗网络(GAN)的力量。
zi2zi:使用条件生成对抗网络生成中文字体
zi2zi是基于以下3篇论文的研究成果:
第一篇论文是加州大学伯克利视觉组的研究,也是前段时间很火的“pix2pix”的研究基础。作者也表示,zi2zi 是从 pix2pix 的工作直接衍生而来。
zi2zi 的网络结构如下图所示:
zi2zi 的网络结构由编码器、解码器和判别器组成(直接把 pix2pix 的拿过来用了)。
灵感来源
作者指出,根据人类设计师设计字体的经验,让神经网络同时学会多种字体风格是至关重要的。
同时建模多种风格有两大优点:
同时训练多种字体,迫使模型从每种字体中学习,然后使用学到的经验改善同一种字体的其他汉字。
类别嵌入一对多建模
现在有一个问题,那就是同一个汉字可以出现在多种字体当中。
Vanilla pix2pix 模型并没有解决这种一对多的关系。作者受“谷歌零数据机器翻译”论文(Zero-shot GNMT)的启发,想出来了“类别嵌入”(category embedding)的方法,将不可训练的高斯噪声作为风格嵌入(style embedding)与汉字嵌入(character embedding)串联起来,之后再一并进入解码器。
这样,解码器仍旧将同一个汉字映射为同一个向量,但是,解码器会同时考虑汉字和风格两个嵌入来生成目标汉字(target character)。
Losses,Lots of Losses
有了类别嵌入,现在就有了一个能够同时处理多种风格的 GAN。
但是,作者发现,这样做之后又出现了一个新的问题:模型开始将各种风格弄混淆并且混合在一起,生成的汉字什么也不像了。
于是,他又借鉴了 AC-GAN 模型中的 multi-class category loss,把这个 loss 加到判别器上面,一旦出现混淆或者风格混合,就“惩罚”判别器。
作者介绍,模型当中还有一大要素是 constant loss,这个是 DTN 网络中的概念。这个方法的思路很简单——源汉字和生成的汉字按理说应该十分类似,所以它们在嵌入空间(embedded space)里出现的位置也应该十分接近。作者将这个 loss 命名为“GREATLY”,GREATLY 这个 loss 迫使解码器保留生成汉字的 identity,收窄了可搜索的范围,因而加快了收敛速度。
最后,还有一个 total variation loss(tv loss)。不过作者表示,根据实际经验,这个 loss 对生成图像的质量提升作用并不明显。而且,对于毛笔书法来说,这个 tv loss 反而还有损生成图像的质量。因此,作者将 tv loss 列出作为备选项使用。
下面我们就来看看,zi2zi 生成中文字体的实际效果。下面的图中,一共有5列,左边是源字符,右边是系统自动生成的。
不得不说,效果很不错。首先,生成的汉字不会“花”了,其次,zi2zi 相比 Rewrite 也能处理更多样、更复杂的字体风格。
下面这张图展示了连续的嵌入空间字体的转换,我们可以见证字体是如何从一种风格转换为另一种风格的:
下面这张动图展现了多种字体之间的转换:
接下来,作者还介绍了如何训练 GAN,还公开了代码。不仅如此,还有汉字转化为韩语的案例。此外,作者还分析了训练过程中的一些失误,总结了经验。
这些具体的内容,你就看原文了解更多吧。