王江江,黃星宇,戰(zhàn)國(guó)棟
(大連民族大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧 大連 116650)
文字是一個(gè)國(guó)家和民族文化的重要象征,也是一種文化傳播和交流的重要載體,文字在文明的傳承和傳播過程中起著至關(guān)重要的作用。但由于漢字?jǐn)?shù)量較多,而且字形多樣,結(jié)構(gòu)復(fù)雜,所以設(shè)計(jì)一套具有個(gè)人風(fēng)格的字體并不是一件容易的事情,現(xiàn)在電子設(shè)備上可用的字體主要由商業(yè)公司的專業(yè)字體設(shè)計(jì)師制作。在20世紀(jì)80年代Strassmann[1]提出了一個(gè)二維毛筆模型來模擬毛筆。龐云階等人[2]提出了一種計(jì)算機(jī)控制的筆式繪圖儀繪圖系統(tǒng),利用毛筆和墨水來實(shí)現(xiàn)毛筆書法的模擬。Lee等人[3]構(gòu)建了一個(gè)三維筆刷模型。Xu等人[4]提出了一個(gè)六層的字符拆分和合成模型, Zhang等人[5]提出了一種將手寫體漢字轉(zhuǎn)換成手寫體漢字的方法。 2015年,Gatys等人[6]首次提出了一種基于神經(jīng)網(wǎng)絡(luò)的風(fēng)格遷移算法。自從Gatys提出了風(fēng)格遷移網(wǎng)絡(luò)之后,Yu等人[7]試圖將圖畫的風(fēng)格賦予字符,并將字符變成任何形式的藝術(shù)形式。2017年,Tian[8]提出了基于CNN風(fēng)格遷移模型的“Rewrite”模型。Lian等人[9]提出了使用循環(huán)神經(jīng)網(wǎng)絡(luò)[10]的一種基于字符筆畫提取的風(fēng)格轉(zhuǎn)換方法。Tian在Pix2pix[11]模型的基礎(chǔ)上提出了一種新的方法“Zi2Zi2”[12]模型。
上述研究的漢字字體生成算法可以分為兩類:基于計(jì)算機(jī)圖像學(xué)的方法和基于深度學(xué)習(xí)的方法。基于計(jì)算機(jī)圖形學(xué)的方法主要是基于筆畫提取的方法,字體生成過程分為筆畫提取和孤立筆畫的重組,但是由于漢字字體的復(fù)雜性和多樣性,筆畫提取的準(zhǔn)確性很難保證,使得基于計(jì)算機(jī)圖形學(xué)的字體生成方法效果不佳。基于深度學(xué)習(xí)的主要采用基于CNN風(fēng)格遷移模型和基于RNN字符筆畫提取的風(fēng)格轉(zhuǎn)換方法,基于CNN神經(jīng)網(wǎng)絡(luò)的風(fēng)格遷移方法缺乏對(duì)特定字體或手寫風(fēng)格的準(zhǔn)確描述,基于RNN字符筆畫提取的風(fēng)格轉(zhuǎn)換方法雖然對(duì)每種字體建立了非剛性的定位配準(zhǔn),準(zhǔn)確分析了每個(gè)漢字各部分筆畫的位置,但是該方法的數(shù)據(jù)準(zhǔn)備過程十分復(fù)雜,大大制約了其推廣應(yīng)用。
本文主要針對(duì)現(xiàn)有漢字字體生成模型存在的問題進(jìn)行了研究,提出了基于改進(jìn)條件生成對(duì)抗網(wǎng)絡(luò)的漢字字體生成算法FontToFont,通過引入U(xiǎn)-Net網(wǎng)絡(luò)結(jié)構(gòu),可以使生成器保存更詳細(xì)的信息,并有利于模型性能。同時(shí),在訓(xùn)練過程中使用了四個(gè)損失函數(shù):對(duì)抗損失、像素?fù)p失、類別損失和感知損失。對(duì)抗損失有利于生成細(xì)節(jié)清晰的圖像。像素?fù)p失表示真實(shí)圖像和生成圖像之間的像素空間距離,而感知損失從感知方面衡量它們之間的差異。類別損失對(duì)預(yù)訓(xùn)練很重要,它使模型能夠同時(shí)從多種風(fēng)格中學(xué)習(xí)。通過定量和定性的實(shí)驗(yàn)結(jié)果表明,本文提出的模型性能更好,能夠生成結(jié)構(gòu)層次更加鮮明、細(xì)節(jié)更加豐富、輪廓更加清晰的漢字。
本文從字體設(shè)計(jì)網(wǎng)站上選擇了江南手書、刻石錄顏體、刻石錄鋼筆鶴體三種字體構(gòu)建本文多風(fēng)格漢字字體數(shù)據(jù)集。每種字體使用ImageFont模塊轉(zhuǎn)為圖像,每種字體的包含大約4000張漢字圖像,同時(shí)本文將圖像大小統(tǒng)一為256×256×3。數(shù)據(jù)集中部分漢字字體圖像如圖2所。采用源字體為黑體。訓(xùn)練集分別由2 000個(gè)源字符圖像和2 000個(gè)對(duì)應(yīng)的來自其他風(fēng)格的目標(biāo)字符圖像組成。源字體中剩余的字符圖像用于測(cè)試。漢字字體圖像均為灰度圖像,同時(shí)本文也對(duì)不同風(fēng)格的漢字字體圖像進(jìn)行了中心對(duì)齊。
(1)數(shù)據(jù)集的大小。實(shí)驗(yàn)采用3種不同風(fēng)格字體進(jìn)行對(duì)比實(shí)驗(yàn),字體數(shù)量選擇500、1 000、1 500、2 000、2 500、3 000。采用RMSE定性指標(biāo)進(jìn)行評(píng)價(jià)。從圖1的實(shí)驗(yàn)結(jié)果可以看出,隨著字體數(shù)量的增大,RMSE的值逐漸降低,說明數(shù)據(jù)集與生成效果直接呈正比。但是當(dāng)字體數(shù)量達(dá)到2 000時(shí),生成的字體質(zhì)量的效果提升并 不明顯,所以本文考慮到設(shè)計(jì)師設(shè)計(jì)字體的勞動(dòng)復(fù)雜度,本文選擇2 000。
圖1 字體生成質(zhì)量與數(shù)據(jù)集大小的關(guān)系
(2)模型介紹。本文提出的網(wǎng)絡(luò)結(jié)構(gòu)如圖2。由一個(gè)生成器和一個(gè)判別器組成,生成器主要有內(nèi)容編碼器、風(fēng)格遷移模塊、結(jié)果解碼器組成。內(nèi)容編碼器第一層使用卷積神經(jīng)網(wǎng)絡(luò),其余層均采用Conv-InstanceNorm[13]-ReLU結(jié)構(gòu);結(jié)果解碼器最后一層采用tanh激活函數(shù),與其他層對(duì)應(yīng)的層采用Deconv-InstanceNorm-ReLU結(jié)構(gòu);風(fēng)格遷移模塊采用6個(gè)ResNet[14]中提出的殘差網(wǎng)絡(luò)模塊構(gòu)成。本文也采用了U-Net網(wǎng)絡(luò)結(jié)構(gòu),考慮到參考字體和生成的字體應(yīng)該具有相似的結(jié)構(gòu)來表示相同的內(nèi)容,本文將內(nèi)容編碼器中細(xì)節(jié)豐富的低層直接連接到相應(yīng)的解碼器層。在內(nèi)容編碼器和結(jié)果解碼器之間添加層間跳躍鏈接,這樣可以盡可能的保留字體圖像的底層信息,避免字體圖像在下采樣過程中丟失形成和結(jié)構(gòu)信息。
圖2 網(wǎng)絡(luò)模型
網(wǎng)絡(luò)模型詳細(xì)見表1。
表1 網(wǎng)絡(luò)詳細(xì)參數(shù)
(1)對(duì)抗損失函數(shù)。從最初的生成性對(duì)抗損失開始。通過一個(gè)帶有判別器D的最小最大值游戲,訓(xùn) 練生成器G將樣本從噪聲x映射到真實(shí)分布y。在訓(xùn)練階段,生成器G試圖生成具有真實(shí) 外觀的假圖像以混淆判別器D。同時(shí),D旨在區(qū)分真實(shí)樣本和生成的樣本。對(duì)于圖像到 圖像的轉(zhuǎn)換任務(wù),本文關(guān)注的是將真實(shí)圖像從一種風(fēng)格轉(zhuǎn)換為另一種風(fēng)格,而不是從 隨機(jī)噪聲轉(zhuǎn)換為真實(shí)圖像,因此判別器D需要最小化下面定義的對(duì)抗損失函數(shù):
(1)
此外,G試圖生成具有真實(shí)外觀的假圖像以混淆判別器D,所示生成器G最小化下面定義的對(duì)抗損失函數(shù):
(2)
本文為了提高生成對(duì)抗網(wǎng)絡(luò)的訓(xùn)練穩(wěn)定性以及提高生成對(duì)抗網(wǎng)絡(luò)的圖像生成質(zhì)量,采用WGAN[15]提出的對(duì)抗損失來優(yōu)化本文提出的漢字字體生成網(wǎng)絡(luò)模型參數(shù)。并且在判別器D中使用梯度懲罰項(xiàng),使得判別器D滿足連續(xù)性條件。
(3)
其中‖‖采用L2范數(shù),表示0到1之間的均勻分布,
(4)
(2)像素?fù)p失函數(shù)。像素級(jí)損失在圖像的像素級(jí)別進(jìn)行懲罰,常見的像素級(jí)損失有歐氏距離、均方誤差(Mean Square Error,MSE)、交叉熵?fù)p失(Cross Entropy Loss)等。本文采用了L1距離作為像素級(jí)別損失,因?yàn)槠鋬?yōu)化過程相比交叉熵?fù)p失穩(wěn)定,比均方誤差、L2距離的約束結(jié)果更銳利。
δL1=Ex∈pdata,z∈pinput||x-G(z)||1。
(5)
像素級(jí)損失一般只能約束生成圖像的低頻部分,也就是圖像的輪廓、顏色等信息;像素級(jí)損失只能約束每個(gè)單獨(dú)像素對(duì)比度的呈現(xiàn),沒有考慮到與周圍像素的關(guān)系,因此需要進(jìn)一步使用其他損失約束生成圖像。
(3)字體風(fēng)格類損失函數(shù)。為了生成高質(zhì)量的字體圖像,重要的是使模型不僅知道它自己的樣式,還知道其他字體樣式。因此,使模型能夠同時(shí)學(xué)習(xí)多種字體樣式是非常重要的[16],因此,在字符嵌入進(jìn)入解碼器之前,通過將不可訓(xùn)練的高斯噪聲作為樣式嵌入連接到字符嵌入來使用類別嵌入。為了防止模型將樣式混合在一起并生成看起來不像任何提供的目標(biāo)的字符,添加了多類類別損失來監(jiān)督鑒別器預(yù)測(cè)生成的字符的樣式[17]。其中表示經(jīng)過判別器D得出的字體種類的概率分布,t表示目標(biāo)字體真實(shí)圖像,c表示目標(biāo)字體的標(biāo)簽。字體風(fēng)格類損失函數(shù)的定義為
(6)
將上述公式中的真實(shí)樣本圖像t替換為生成器生成的圖像,就可以得到生成器的字體風(fēng)格類損失函數(shù)。損失函數(shù)的定義如
(7)
生成器 G通過最小化這個(gè)損失函數(shù),以此來保證生成的假圖的風(fēng)格種類能夠被鑒別器正確的分類。
(4)感知損失函數(shù)。對(duì)抗損失和像素?fù)p失都是圖像生成任務(wù)中常見的度量。此外,本文使用另一個(gè)更 接近感知相似性的損失函數(shù)。感知損失探索了從訓(xùn)練有素的CNN提取的圖像的高維表示之間的差異[18]。本文根據(jù)預(yù)先訓(xùn)練的VGG16網(wǎng)絡(luò)的ReLU激活層來定義感知損失。不同深度的層可以代表不同抽象級(jí)別的圖像特征:從邊緣、顏色到對(duì)象模式。感知網(wǎng)絡(luò)中較低級(jí)和較高級(jí)激活的匹配指導(dǎo)合成網(wǎng)絡(luò)學(xué)習(xí)細(xì)粒度細(xì)節(jié)以及全局排列[19]。本文在漢字字體生成中,要求生成的漢字字體圖像與目標(biāo)字體圖像在漢字的形狀結(jié)構(gòu)方面保持一致性,這樣的一致性可以用感知損失函數(shù)來進(jìn)行權(quán)衡,來保證生成字體圖像與目標(biāo)字體圖像在形狀和結(jié)構(gòu)方面保證一致。
(8)
本文使用CRN網(wǎng) 絡(luò)[19]的參數(shù)配置。其中,代表VGG16的第l層網(wǎng)絡(luò) 。采用conv1_2,conv2_2,conv3_2,conv4_2,conv5_2層來計(jì)算感知損失。對(duì)應(yīng)層權(quán)重,在本文的實(shí)驗(yàn)中,本文設(shè)置λ1=λ2=λ3=λ4=1,λ5=10
(5)最終優(yōu)化目標(biāo)。通過上述損失函數(shù)的介紹,本文提出的漢字字體生成網(wǎng)絡(luò)模型的損失函數(shù)為這四種損失函數(shù)的加權(quán)之和,最終得到本文網(wǎng)絡(luò)訓(xùn)練需要優(yōu)化的損失函數(shù)。
(9)
(10)
(11)
本文為了更客觀的進(jìn)行漢字字體生成模型性能的評(píng)價(jià),根據(jù)論文[20-21]中提出的評(píng)價(jià)方法,從定性和定量?jī)蓚€(gè)方面對(duì)提出的漢字字體生成模型性能的評(píng)價(jià),評(píng)估生成圖像的效果。除了直接對(duì)比較實(shí)驗(yàn)的定性結(jié)果外,還采用了均方根誤差 (Root Mean Square Error, RMSE)和像素差異率 (Pixel Disagreement Ratio, APDR)這兩個(gè)定量值作為評(píng)價(jià)標(biāo)準(zhǔn)。
為了驗(yàn)證本文提出的模型的性能。本文構(gòu)建了多風(fēng)格的漢字字體的數(shù)據(jù)集,并且使用均方根誤差(RMSE),像素差異率(APDR)兩個(gè)定性評(píng)價(jià)指標(biāo),從圖像的像素差異性以及像素差異率兩個(gè)方面對(duì)生成的漢字字體圖像進(jìn)行評(píng)價(jià),并且設(shè)計(jì)了四個(gè)實(shí)驗(yàn)。本文提出的漢字字體生成模型FontToFont與現(xiàn)有的三種字體生成算法進(jìn)行對(duì)比實(shí)驗(yàn),模型的消融實(shí)驗(yàn),驗(yàn)證各部分的有效性,不同訓(xùn)練數(shù)據(jù)集對(duì)于模型性能的影響,以及不同源字體對(duì)于模型性能的影響。
通過使用python類庫中的ImageFont 模塊[22]將字庫文件TrueType轉(zhuǎn)為漢字字體圖像。從字體設(shè)計(jì)網(wǎng)站上選擇江南手書、刻石錄顏體、刻石錄鋼筆鶴體三種字體構(gòu)建本文多風(fēng)格漢字字體數(shù)據(jù)集。每種字體使用ImageFont 模塊轉(zhuǎn)為圖像,每種字體包含大約4 000張漢字圖像,同時(shí)本文將圖像大小統(tǒng)一為256×256×3。數(shù)據(jù)集中部分漢字字體圖像如圖3,采用源字體為黑體。訓(xùn)練集分別由2 000個(gè)源字符圖像和2 000個(gè)對(duì)應(yīng)的來自其他風(fēng)格的目標(biāo)字符圖像組成。源字體中剩 余的字符圖像用于測(cè)試。本文也討論了不同訓(xùn)練數(shù)據(jù)集規(guī)模對(duì)于模型性能的影響,訓(xùn)練數(shù)據(jù)樣本依次為500,1 000,1 500,2 000,2 500,3 000個(gè)。漢字字體圖像均為灰度圖像,同時(shí)本文也對(duì)不同風(fēng)格的漢字字體圖像進(jìn)行了中心對(duì)齊。
圖3 多風(fēng)格字體漢字圖像示例
使用Pytorch框架搭建本文的漢字字體生成網(wǎng)絡(luò)。采用Adam[23]優(yōu)化方法對(duì)所提模型進(jìn)行訓(xùn)練,并將學(xué)習(xí)率設(shè)置為0.000 1,判別器D先訓(xùn)練,生成器G次之,交替進(jìn)行訓(xùn)練。在本文構(gòu)建的多風(fēng)格漢字字體數(shù)據(jù)集上訓(xùn)練40輪,每輪次10 000次,批次大小設(shè)置為1。學(xué)習(xí)率遵循StepLR策略,每50次迭代降 低一次。本文所有的實(shí)驗(yàn)都是在Ubuntu18.04系統(tǒng),Intel(R) Core(TM) i7-7700K CPU, 英偉達(dá)GeForce GTX TITAN XP GPU上進(jìn)行的。算法1如圖4,詳細(xì)討論了本文模型的訓(xùn)練流程。
圖4 算法1詳細(xì)過程
為了在整體上展示本文提出的漢字字體生成
模型的效果,將《早春呈水部張十八員外》為內(nèi)容進(jìn)行生成如圖5,分別使用三種目標(biāo)字體進(jìn)行生成。為了增強(qiáng)可讀性,可對(duì)比性,本文將真實(shí)的字體文字變成了風(fēng)格一至三的第二列和第六列。
圖5 《早春呈水部張十八員外》生成結(jié)果
圖5展示了《早春呈水部張十八員外》三種字體的生成效果。其中圖5a展示的是黑體表示的需要生成的文字內(nèi)容,圖5b~5d展示的是三種不同風(fēng)格字體對(duì)應(yīng)的生成結(jié)果。從圖5b~d中可以看出,本文的模型生成效果較好,生成的字體與真實(shí)字體直接沒有差別。此外,從圖中也可以看出,模型對(duì)于漢字的結(jié)構(gòu)和形狀的特征把握比較好。能夠當(dāng)?shù)乇A糁匾墓P畫細(xì)節(jié),如筆畫的開始、轉(zhuǎn)折和結(jié)束區(qū)域。同時(shí)從圖5c的筆畫連接情況可以看出,本文提出的U-Net網(wǎng)絡(luò)結(jié)構(gòu)以及感知損失函數(shù),能夠保留筆畫的重要信息特征,做到了一致性。
接下來本文選取三種字體進(jìn)行漢字字體生成對(duì)比實(shí)驗(yàn),分別選擇Pix2pix、Zi2zi、HGAN三種漢字字體生成模型進(jìn)行對(duì)比實(shí)驗(yàn)。本文對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行定量和定性的評(píng)價(jià)。定性評(píng)價(jià)的圖如圖6,定量評(píng)價(jià)結(jié)果見表2。
圖6 風(fēng)格一部分生成結(jié)果示例
Pix2pix、Zi2zi、HGAN模型生成效果如圖6所示,在三種風(fēng)格的漢字字體生成任務(wù)中,在Zi2zi、HGAN,Pix2pix中出現(xiàn)的一些不完整的筆畫現(xiàn)象以及筆畫模糊的現(xiàn)象。Pix2pix只能產(chǎn)生模糊的圖像,很難識(shí)別字符的內(nèi)容,無法捕捉相似手寫風(fēng)格之間的細(xì)微差異。相反,本文提出的漢字字體生成模型能夠產(chǎn)生逼真的合成結(jié)果,并適當(dāng)?shù)乇A糁匾臐h字筆畫結(jié)構(gòu)和形狀細(xì)節(jié),如筆畫的開始、轉(zhuǎn)折和結(jié)束區(qū)域。但是在字體風(fēng)格形狀結(jié)構(gòu)復(fù)雜時(shí)候,本文的模型也有一些不完整的筆畫問題。
從上面的分析結(jié)果可以看出,相比較與Pix2pix、Zi2zi、HGAN三種模型,本文的模型能夠生成質(zhì)量較高的漢字字體圖像。此外從圖6中可以看出,在漢字字體形狀結(jié)構(gòu)相對(duì)復(fù)雜的時(shí)候,本文的模型還是取得了比較好的生成效果,能夠較好的捕捉到字體的形狀和結(jié)構(gòu)的信息,但是Pix2pix網(wǎng)絡(luò)模型卻產(chǎn)生了筆畫缺失,整體模糊的現(xiàn)象。這也在一定程度上證明了本文模型的泛化能力比較強(qiáng)。而Pix2pix、Zi2zi、HGAN這三種模型,雖然在模型訓(xùn)練的過程中產(chǎn)生比較好的效果,但是測(cè)試時(shí)生成結(jié)果卻很差。
從表2分析出,從黑體生成字體一,模型的像素差異率最低,均方根誤差比HGAN稍高,比Pix2Pix和Zi2Zi低很多;從黑體生成字體二,模型的像素差異率和均方根誤差比HGAN稍高,比Pix2Pix高很多;從黑體生成字體三,模型的像素差異率和均方根誤差比Pix2Pix、Zi2Zi和HGAN都低很多。所以從定量分析的角度看,文中所建立的模型生成效果較優(yōu)。
表2 定量分析
為了驗(yàn)證本文提出的感知損失函數(shù)的有效性,設(shè)計(jì)了對(duì)比實(shí)驗(yàn),在本文提出的模型中加入感知損失函數(shù)以及不加感知損失函數(shù)進(jìn)行對(duì)比實(shí)驗(yàn),生成效果如圖7。使用感知損失函數(shù),可以看出模型生成的字體輪廓更加清晰,也保證了源字體和目標(biāo)字體必須保持一致的文字拓?fù)?,生成字體的局部信息丟失較少。但是去除感知函數(shù)之后可以發(fā)現(xiàn),生成的字體出現(xiàn)局部信息丟失,字體輪廓模糊的現(xiàn)象,因此也驗(yàn)證了本文提出的感知損失函數(shù)的有效性。
圖7 使用/不使用感知損失的生成結(jié)果示例
在上述的實(shí)驗(yàn)對(duì)比以及模型消融實(shí)驗(yàn)中,采用黑體作為參考字體來進(jìn)行實(shí)驗(yàn)。為了求證不同參考字體對(duì)漢字字體生成模型生成效果的影響,本文的實(shí)驗(yàn)采用宋體、楷體作為參考字體分別進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)對(duì)比結(jié)果如圖8~9。
圖8 源字體為楷體的部分實(shí)驗(yàn)結(jié)果
圖9 源字體為宋體的部分實(shí)驗(yàn)結(jié)果
從這兩幅實(shí)驗(yàn)對(duì)比圖8和圖9可以看出,不管是楷體還是宋體,漢字字體生成模型的生成效果都沒有受到影響。這也進(jìn)一步證明了本文的漢字字體生成模型比現(xiàn)有的漢字字體生成模型的性能更好,能夠生成結(jié)構(gòu)層次更加鮮明、細(xì)節(jié)更加豐富、輪廓更加清晰的漢字。
本文研究了利用生成對(duì)抗網(wǎng)絡(luò)來實(shí)現(xiàn)漢字字體生成。通過在不同風(fēng)格下字體生成效果分析,可以看出本文模型的整體性和一致性均有保證;通過與Pix2pix、Zi2zi、HGAN三種經(jīng)典模型在同一風(fēng)格生成效果分析,可以看出本文模型無論在簡(jiǎn)單還是復(fù)雜的字體結(jié)構(gòu)中均取得比較好的生成效果;通過分析不同源字體的生成效果,本文模型的生成效果均沒有收到影響。從以上三方面的分析中可以看出本文提出的算法FontToFont與MSAFont均有效地提升了生成字體的質(zhì)量,在一定程度上滿足了實(shí)際應(yīng)用的需求。