基于生成对抗网络的手写汉字生成方法研究

2022-02-04 04:53杨光锴
河北省科学院学报 2022年6期
关键词:手写字体损失

杨光锴

(河北省科学院,河北 石家庄 050081)

0 引言

汉字作为世界上最古老的文字之一,距今已有数千年的历史。计算机领域关于手写汉字的研究主要集中在识别和生成两个方面。作为模式识别应用的一个重要领域,手写汉字识别技术已有很大的发展。而手写汉字生成的研究还处于不断发展的阶段。相较于英文字母和阿拉伯数字,汉字的手写生成更为复杂和困难。汉字的字符数量巨大,总计数量可能有约十万个,即便中国常用的汉字字符也有数千个之多,获得全部汉字的手写样本是不现实的[1-3]。汉字的构造结构复杂,大部分汉字的笔画数远大于英文字母和数字,会在计算机学习汉字的结构时造成更大困难。因此,如何通过自动学习特定风格的汉字样本,进而扩展应用到全部汉字之中,是研究的主要方向。

近年来,深度学习迅速发展,在诸多领域取得了大量成果和应用。2014年,Goodfellow等人[4]提出生成对抗网络(GAN, Generative Adversarial Networks),这是一种无监督学习方式生成数据的深度学习架构,是目前发展最为迅速的深度学习领域之一,在图像生成等领域具有广泛的适用性。GAN由生成网络和判别网络构成其主要网络结构,生成网络从潜在空间(Latent Space)中生成数据,判别网络对真实数据和生成网络生成的数据进行判别真伪,通过生成网络和判别网络间的多次循环,两个网络在对抗中不断训练和提升。Radford等人[5]在GAN的基础上提出DCGAN架构,可以有效地实现高质量图片生成,且具有很强的稳定性和实用性。Isola 等人[6]提出了Pix2Pix模型,实现了对应图像的迁移转换。Zhu等人[7]提出循环生成对抗网络(Cycle-consistent Generative Adversarial Networks,CycleGAN),其使用条件更为宽泛,不需要像Pix2Pix使用成对的图像,可用于图像风格转换、绘画照片互转等跨领域变换。本文采用CycleGAN模型方法,实现手写汉字的生成。

1 手写汉字生成模型的构建

1.1 CycleGAN总体架构

图1 CycleGAN整体结构示意图

CycleGAN作为基于GAN思想产生的一种变体,由两个GAN合作组成[8-10]。如图1所示,X和Y分别代表不同类别的数据,第一个GAN由生成网络G和判别网络DY组成,G用于从X类别数据生成Y类别数据,DY用于判别Y类别数据真伪;同理,第二个GAN由生成网络F和判别网络DX组成,F用于从Y类别数据生成X类别数据,DX用于判别X类别数据真伪。G和F的目的是生成Y和X类别数据,进而通过DY和DX的判别,达到模仿生成的目的[11-12]。

1.2 模型的损失函数

针对每一个GAN分别设定对应的损失函数。由G和DY组成的GAN的损失函数为:

LGAN(G,DY,X,Y)=Ey~Pdata(y)[logDY(y)]+Ex~Pdata(x)[log(1-DY(G(x)))]

(1)

由F和DX组成的GAN的损失函数为:

LGAN(F,DX,X,Y)=Ex~Pdata(x)[logDX(x)]+Ey~Pdata(y)[log(1-DX(F(y)))]

(2)

以上采取的是传统GAN的对抗损失,为增强手写字体生成时模型训练的稳定性,这里将log似然替换为使用平方差构造对抗损失函数。原对抗损失函数修改为:

LGAN(G,DY,X,Y)=Ey~Pdata(y)[(DY(y)-1)2]+Ex~Pdata(x)[DY(G(x))2]

(3)

LGAN(F,DX,X,Y)=Ex~Pdata(x)[(DX(x)-1)2]+Ey~Pdata(y)[DX(F(y))2]

(4)

图2 循环一致性示意图

x→G(x)→F(G(x))≈x

(5)

反向循环同理:

y→F(y)→G(F(y))≈y

(6)

这里使用L1范数计算循环一致性损失函数,循环一致性损失函数为:

Lcyc(G,F)=Ex~Pdata(x)[‖F(G(x))-x‖1]+Ey~Pdata(y)[‖G(F(y))-y‖1]

(7)

式中右侧两项分别对应X和Y正反两个方向情况。通过使用循环一致性损失函数,能够保证经过G(F(y))和F(G(x))后生成的图像与原图像基本保持一致。

完整的损失函数由对抗损失函数和循环一致性损失函数共同构成:

L(G,F,DX,DY)=LGAN(G,DY,X,Y)+LGAN(F,DX,X,Y)+λLcyc(G,F)

(8)

其中,引入超参数λ来控制循环一致性损失在全部损失中的的权重。最终的优化问题转换为求解损失函数的最小最大值问题:

(9)

1.3 生成网络结构

生成网络是一个自编码网络,以X域或Y域图片为输入,输出生成图片。如图3所示,生成网络基本构成由编码器、解码器和特征转换器构成。设置输入图片大小1通道112×112像素。将图片输入编码器,经特征转换器转换后,进入解码器,返回生成图像。编码器包括3个卷积层(Conv),第一个卷积层步长(Stride)设置为1,其余设置为2,使用reLU作为激活函数,通过卷积层进行下采样,缩小图片尺寸,增加通道数量到256。考虑到汉字生成问题相对于斑马与马互转、卡通和实际场景互换等问题不同,汉字生成问题在色彩空间、结构构成上相对单一,因此减少CycleGAN原始模型的残差块数量,将特征转换器中的残差块调整至4个。解码器为2个转置卷积层(Conv_Transpose)组成,步长(Stride)为2,使用reLU作为激活函数,通过转置卷积层进行上采样,增大图片尺寸,减少通道数量,最后通过1个卷积层,并以tanh为激活函数,将图片转换回原始大小(1×112×112)。

图3 生成网络结构图

1.4 判别网络结构

判别网络为一个卷积神经网络,但判别方式不是将图片输入最终映射为一个具体数值,而是采用PatchGAN设计,使用卷积将输入图片映射为N×N矩阵,使用矩阵来评价判别图片,通过PatchGAN的每个感受野对应于输入中的一块区域(原始CycleGAN模型为70×70),再将N×N矩阵的均值作为输入图片的最终判别结果。对于汉字生成这一特定问题,由于汉字结构构成上各个部分的大小一般在整个图像的一半以内,采用的图片像素也相对较小,因此对原有CycleGAN模型的PatchGAN进行调整,减小其感受野,缩减1个卷积层,将PatchGAN的判别区域大小调整为34×34。如图4所示,调整后的CycleGAN模型主要由4个卷积层组成,接收真实和生成图片,经卷积层处理,最终返回一个(26,26,1)的张量,使用该张量判别是否为真实图片。

图4 判别网络结构图

2 实验与结果

2.1 实验数据集的选择与处理

实验的基本思路是以标准汉字作为数据集X,以手写汉字作为数据集Y,采用改进后的CycleGAN模型对其进行训练,达到生成手写汉字目的。本文采用生成的仿宋标准字体图片作为标准汉字数据集X,采用CASIA-HWDB1.1数据集[15]作为手写汉字数据集Y。其中,CASIA-HWDB是由中科院自动化研究所在2007—2010年间收集,包含了1 020人书写的脱机手写中文单字样本和手写文本。本文使用的CASIA-HWDB1.1为手写单字数据库,由300位作者手写而成,其中训练集包含240人,测试集包含60人,每位作者书写我国汉字代码标准GB2312-80中全部3 755个一级汉字。如图5所示,对CASIA-HWDB1.1每名作者的单字图片进行采集,并分析其像素大小,发现其图片大小多为100×100像素左右,同时综合考量网络架构、模型建立等因素,将手写汉字图片和仿宋标准字体图片统一调整至112×112像素大小。在CASIA-HWDB1.1数据集中,选择了原测试集第13位和第26位作者(后文所述作者均为原测试集作者)的手写字体作为实验对象。

图5 CASIA-HWDB1.1部分作者所写单字像素大小分布

2.2 实验软硬件与超参数设置

实验在 Windows 10 操纵系统下进行,编程语言Python3.7,编程环境Anaconda、Pycharm,使用深度学习框架Pytorch V1.2,CUDA10.0,采用Wisdom作为交互式可视化工具,硬件设备为处理器Intel(R)Core(TM)i5-6500CPU @ 3.2GHz,运行内存4GB (RAM),显卡NVIDIA GeForce 720。

损失函数中循环一致性损失在全部损失中的权重λ设置为10。Batchsize设置为1,总计训练100 epoch,优化器采用Adam算法,其中参数beta1和beta2分别设置为0.5和0.999,学习率lr设置为0.0002。考虑到汉字图像具有具体的内涵意义,训练时不采用图片旋转、翻转等数据增强手段。从每位作者的手写字体中,随机选取200个图片,同时一并挑选相应的仿宋字体图片用于训练。

2.3 实验结果评价

图6 CycleGAN损失函数曲线

以训练第13位作者字体过程为例,图6为其训练时的总

体损失函数的变化曲线。可以看出,随着训练的不断深入,损失函数值由开始的较大值,在一定周期后逐渐收敛,函数值波动幅度逐渐变小,且基本趋于稳定。

从实验结果看,生成的字体总体情况较好,将生成的汉字与原作者的手写字体进行比对可以发现,生成的字体能够一定程度上体现出原作者的笔记样式,如图7所示。

通过使用训练好的模型进行预测,也可对原3755个一级汉字之外的汉字进行模仿生成,如图8所示,“锴”“钊”两字并不在原CASIA-HWDB1.1数据集中,也有较好的生成效果。

图7 标准仿宋汉字、原手写汉字和生成汉字对比

图8 标准仿宋汉字和一级汉字之外的生成汉字对比

3 结语

本文提出了一种基于生成对抗网络的手写汉字生成方法,通过使用标准汉字和手写汉字构建CycleGAN模型,实现二者之间的相互转换。经过实验验证,本方法生成的手写汉字使用的数据量相对较少,具有比较高的识别度,但该方法还存在一定局限性。一是训练时间要求较长,且单次实验仅能够训练一个作者的手写字体。二是生成的手写汉字缺乏客观评判的标准,对于生成的汉字,评价基本依靠感性的肉眼鉴别。三是生成的汉字与原标准汉字(仿宋)还有很多相近之处,如连笔等方面没有得到很好的体现,但如果为了实现更好的效果而冒然增加训练周期,可能会出现模式崩溃(Mode Collapse)现象。

猜你喜欢
手写字体损失
我手写我心
胖胖损失了多少元
抓住身边事吾手写吾心
字体的产生
玉米抽穗前倒伏怎么办?怎么减少损失?
基于集成学习的MINIST手写数字识别
深度学习在手写汉字识别中的应用综述
菜烧好了应该尽量马上吃
损失
组合字体