楊光鍇
(河北省科學(xué)院,河北 石家莊 050081)
漢字作為世界上最古老的文字之一,距今已有數(shù)千年的歷史。計(jì)算機(jī)領(lǐng)域關(guān)于手寫漢字的研究主要集中在識別和生成兩個(gè)方面。作為模式識別應(yīng)用的一個(gè)重要領(lǐng)域,手寫漢字識別技術(shù)已有很大的發(fā)展。而手寫漢字生成的研究還處于不斷發(fā)展的階段。相較于英文字母和阿拉伯?dāng)?shù)字,漢字的手寫生成更為復(fù)雜和困難。漢字的字符數(shù)量巨大,總計(jì)數(shù)量可能有約十萬個(gè),即便中國常用的漢字字符也有數(shù)千個(gè)之多,獲得全部漢字的手寫樣本是不現(xiàn)實(shí)的[1-3]。漢字的構(gòu)造結(jié)構(gòu)復(fù)雜,大部分漢字的筆畫數(shù)遠(yuǎn)大于英文字母和數(shù)字,會在計(jì)算機(jī)學(xué)習(xí)漢字的結(jié)構(gòu)時(shí)造成更大困難。因此,如何通過自動學(xué)習(xí)特定風(fēng)格的漢字樣本,進(jìn)而擴(kuò)展應(yīng)用到全部漢字之中,是研究的主要方向。
近年來,深度學(xué)習(xí)迅速發(fā)展,在諸多領(lǐng)域取得了大量成果和應(yīng)用。2014年,Goodfellow等人[4]提出生成對抗網(wǎng)絡(luò)(GAN, Generative Adversarial Networks),這是一種無監(jiān)督學(xué)習(xí)方式生成數(shù)據(jù)的深度學(xué)習(xí)架構(gòu),是目前發(fā)展最為迅速的深度學(xué)習(xí)領(lǐng)域之一,在圖像生成等領(lǐng)域具有廣泛的適用性。GAN由生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò)構(gòu)成其主要網(wǎng)絡(luò)結(jié)構(gòu),生成網(wǎng)絡(luò)從潛在空間(Latent Space)中生成數(shù)據(jù),判別網(wǎng)絡(luò)對真實(shí)數(shù)據(jù)和生成網(wǎng)絡(luò)生成的數(shù)據(jù)進(jìn)行判別真?zhèn)危ㄟ^生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò)間的多次循環(huán),兩個(gè)網(wǎng)絡(luò)在對抗中不斷訓(xùn)練和提升。Radford等人[5]在GAN的基礎(chǔ)上提出DCGAN架構(gòu),可以有效地實(shí)現(xiàn)高質(zhì)量圖片生成,且具有很強(qiáng)的穩(wěn)定性和實(shí)用性。Isola 等人[6]提出了Pix2Pix模型,實(shí)現(xiàn)了對應(yīng)圖像的遷移轉(zhuǎn)換。Zhu等人[7]提出循環(huán)生成對抗網(wǎng)絡(luò)(Cycle-consistent Generative Adversarial Networks,CycleGAN),其使用條件更為寬泛,不需要像Pix2Pix使用成對的圖像,可用于圖像風(fēng)格轉(zhuǎn)換、繪畫照片互轉(zhuǎn)等跨領(lǐng)域變換。本文采用CycleGAN模型方法,實(shí)現(xiàn)手寫漢字的生成。
1.1 CycleGAN總體架構(gòu)
圖1 CycleGAN整體結(jié)構(gòu)示意圖
CycleGAN作為基于GAN思想產(chǎn)生的一種變體,由兩個(gè)GAN合作組成[8-10]。如圖1所示,X和Y分別代表不同類別的數(shù)據(jù),第一個(gè)GAN由生成網(wǎng)絡(luò)G和判別網(wǎng)絡(luò)DY組成,G用于從X類別數(shù)據(jù)生成Y類別數(shù)據(jù),DY用于判別Y類別數(shù)據(jù)真?zhèn)危?br>同理,第二個(gè)GAN由生成網(wǎng)絡(luò)F和判別網(wǎng)絡(luò)DX組成,F(xiàn)用于從Y類別數(shù)據(jù)生成X類別數(shù)據(jù),DX用于判別X類別數(shù)據(jù)真?zhèn)?。G和F的目的是生成Y和X類別數(shù)據(jù),進(jìn)而通過DY和DX的判別,達(dá)到模仿生成的目的[11-12]。
1.2 模型的損失函數(shù)
針對每一個(gè)GAN分別設(shè)定對應(yīng)的損失函數(shù)。由G和DY組成的GAN的損失函數(shù)為:
LGAN(G,DY,X,Y)=Ey~Pdata(y)[logDY(y)]+Ex~Pdata(x)[log(1-DY(G(x)))]
(1)
由F和DX組成的GAN的損失函數(shù)為:
LGAN(F,DX,X,Y)=Ex~Pdata(x)[logDX(x)]+Ey~Pdata(y)[log(1-DX(F(y)))]
(2)
以上采取的是傳統(tǒng)GAN的對抗損失,為增強(qiáng)手寫字體生成時(shí)模型訓(xùn)練的穩(wěn)定性,這里將log似然替換為使用平方差構(gòu)造對抗損失函數(shù)。原對抗損失函數(shù)修改為:
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 循環(huán)一致性示意圖
x→G(x)→F(G(x))≈x
(5)
反向循環(huán)同理:
y→F(y)→G(F(y))≈y
(6)
這里使用L1范數(shù)計(jì)算循環(huán)一致性損失函數(shù),循環(huán)一致性損失函數(shù)為:
Lcyc(G,F)=Ex~Pdata(x)[‖F(xiàn)(G(x))-x‖1]+Ey~Pdata(y)[‖G(F(y))-y‖1]
(7)
式中右側(cè)兩項(xiàng)分別對應(yīng)X和Y正反兩個(gè)方向情況。通過使用循環(huán)一致性損失函數(shù),能夠保證經(jīng)過G(F(y))和F(G(x))后生成的圖像與原圖像基本保持一致。
完整的損失函數(shù)由對抗損失函數(shù)和循環(huán)一致性損失函數(shù)共同構(gòu)成:
L(G,F,DX,DY)=LGAN(G,DY,X,Y)+LGAN(F,DX,X,Y)+λLcyc(G,F)
(8)
其中,引入超參數(shù)λ來控制循環(huán)一致性損失在全部損失中的的權(quán)重。最終的優(yōu)化問題轉(zhuǎn)換為求解損失函數(shù)的最小最大值問題:
(9)
1.3 生成網(wǎng)絡(luò)結(jié)構(gòu)
生成網(wǎng)絡(luò)是一個(gè)自編碼網(wǎng)絡(luò),以X域或Y域圖片為輸入,輸出生成圖片。如圖3所示,生成網(wǎng)絡(luò)基本構(gòu)成由編碼器、解碼器和特征轉(zhuǎn)換器構(gòu)成。設(shè)置輸入圖片大小1通道112×112像素。將圖片輸入編碼器,經(jīng)特征轉(zhuǎn)換器轉(zhuǎn)換后,進(jìn)入解碼器,返回生成圖像。編碼器包括3個(gè)卷積層(Conv),第一個(gè)卷積層步長(Stride)設(shè)置為1,其余設(shè)置為2,使用reLU作為激活函數(shù),通過卷積層進(jìn)行下采樣,縮小圖片尺寸,增加通道數(shù)量到256。考慮到漢字生成問題相對于斑馬與馬互轉(zhuǎn)、卡通和實(shí)際場景互換等問題不同,漢字生成問題在色彩空間、結(jié)構(gòu)構(gòu)成上相對單一,因此減少CycleGAN原始模型的殘差塊數(shù)量,將特征轉(zhuǎn)換器中的殘差塊調(diào)整至4個(gè)。解碼器為2個(gè)轉(zhuǎn)置卷積層(Conv_Transpose)組成,步長(Stride)為2,使用reLU作為激活函數(shù),通過轉(zhuǎn)置卷積層進(jìn)行上采樣,增大圖片尺寸,減少通道數(shù)量,最后通過1個(gè)卷積層,并以tanh為激活函數(shù),將圖片轉(zhuǎn)換回原始大小(1×112×112)。
圖3 生成網(wǎng)絡(luò)結(jié)構(gòu)圖
1.4 判別網(wǎng)絡(luò)結(jié)構(gòu)
判別網(wǎng)絡(luò)為一個(gè)卷積神經(jīng)網(wǎng)絡(luò),但判別方式不是將圖片輸入最終映射為一個(gè)具體數(shù)值,而是采用PatchGAN設(shè)計(jì),使用卷積將輸入圖片映射為N×N矩陣,使用矩陣來評價(jià)判別圖片,通過PatchGAN的每個(gè)感受野對應(yīng)于輸入中的一塊區(qū)域(原始CycleGAN模型為70×70),再將N×N矩陣的均值作為輸入圖片的最終判別結(jié)果。對于漢字生成這一特定問題,由于漢字結(jié)構(gòu)構(gòu)成上各個(gè)部分的大小一般在整個(gè)圖像的一半以內(nèi),采用的圖片像素也相對較小,因此對原有CycleGAN模型的PatchGAN進(jìn)行調(diào)整,減小其感受野,縮減1個(gè)卷積層,將PatchGAN的判別區(qū)域大小調(diào)整為34×34。如圖4所示,調(diào)整后的CycleGAN模型主要由4個(gè)卷積層組成,接收真實(shí)和生成圖片,經(jīng)卷積層處理,最終返回一個(gè)(26,26,1)的張量,使用該張量判別是否為真實(shí)圖片。
圖4 判別網(wǎng)絡(luò)結(jié)構(gòu)圖
2.1 實(shí)驗(yàn)數(shù)據(jù)集的選擇與處理
實(shí)驗(yàn)的基本思路是以標(biāo)準(zhǔn)漢字作為數(shù)據(jù)集X,以手寫漢字作為數(shù)據(jù)集Y,采用改進(jìn)后的CycleGAN模型對其進(jìn)行訓(xùn)練,達(dá)到生成手寫漢字目的。本文采用生成的仿宋標(biāo)準(zhǔn)字體圖片作為標(biāo)準(zhǔn)漢字?jǐn)?shù)據(jù)集X,采用CASIA-HWDB1.1數(shù)據(jù)集[15]作為手寫漢字?jǐn)?shù)據(jù)集Y。其中,CASIA-HWDB是由中科院自動化研究所在2007—2010年間收集,包含了1 020人書寫的脫機(jī)手寫中文單字樣本和手寫文本。本文使用的CASIA-HWDB1.1為手寫單字?jǐn)?shù)據(jù)庫,由300位作者手寫而成,其中訓(xùn)練集包含240人,測試集包含60人,每位作者書寫我國漢字代碼標(biāo)準(zhǔn)GB2312-80中全部3 755個(gè)一級漢字。如圖5所示,對CASIA-HWDB1.1每名作者的單字圖片進(jìn)行采集,并分析其像素大小,發(fā)現(xiàn)其圖片大小多為100×100像素左右,同時(shí)綜合考量網(wǎng)絡(luò)架構(gòu)、模型建立等因素,將手寫漢字圖片和仿宋標(biāo)準(zhǔn)字體圖片統(tǒng)一調(diào)整至112×112像素大小。在CASIA-HWDB1.1數(shù)據(jù)集中,選擇了原測試集第13位和第26位作者(后文所述作者均為原測試集作者)的手寫字體作為實(shí)驗(yàn)對象。
圖5 CASIA-HWDB1.1部分作者所寫單字像素大小分布
2.2 實(shí)驗(yàn)軟硬件與超參數(shù)設(shè)置
實(shí)驗(yàn)在 Windows 10 操縱系統(tǒng)下進(jìn)行,編程語言Python3.7,編程環(huán)境Anaconda、Pycharm,使用深度學(xué)習(xí)框架Pytorch V1.2,CUDA10.0,采用Wisdom作為交互式可視化工具,硬件設(shè)備為處理器Intel(R)Core(TM)i5-6500CPU @ 3.2GHz,運(yùn)行內(nèi)存4GB (RAM),顯卡NVIDIA GeForce 720。
損失函數(shù)中循環(huán)一致性損失在全部損失中的權(quán)重λ設(shè)置為10。Batchsize設(shè)置為1,總計(jì)訓(xùn)練100 epoch,優(yōu)化器采用Adam算法,其中參數(shù)beta1和beta2分別設(shè)置為0.5和0.999,學(xué)習(xí)率lr設(shè)置為0.0002??紤]到漢字圖像具有具體的內(nèi)涵意義,訓(xùn)練時(shí)不采用圖片旋轉(zhuǎn)、翻轉(zhuǎn)等數(shù)據(jù)增強(qiáng)手段。從每位作者的手寫字體中,隨機(jī)選取200個(gè)圖片,同時(shí)一并挑選相應(yīng)的仿宋字體圖片用于訓(xùn)練。
2.3 實(shí)驗(yàn)結(jié)果評價(jià)
圖6 CycleGAN損失函數(shù)曲線
以訓(xùn)練第13位作者字體過程為例,圖6為其訓(xùn)練時(shí)的總
體損失函數(shù)的變化曲線。可以看出,隨著訓(xùn)練的不斷深入,損失函數(shù)值由開始的較大值,在一定周期后逐漸收斂,函數(shù)值波動幅度逐漸變小,且基本趨于穩(wěn)定。
從實(shí)驗(yàn)結(jié)果看,生成的字體總體情況較好,將生成的漢字與原作者的手寫字體進(jìn)行比對可以發(fā)現(xiàn),生成的字體能夠一定程度上體現(xiàn)出原作者的筆記樣式,如圖7所示。
通過使用訓(xùn)練好的模型進(jìn)行預(yù)測,也可對原3755個(gè)一級漢字之外的漢字進(jìn)行模仿生成,如圖8所示,“鍇”“釗”兩字并不在原CASIA-HWDB1.1數(shù)據(jù)集中,也有較好的生成效果。
圖7 標(biāo)準(zhǔn)仿宋漢字、原手寫漢字和生成漢字對比
圖8 標(biāo)準(zhǔn)仿宋漢字和一級漢字之外的生成漢字對比
本文提出了一種基于生成對抗網(wǎng)絡(luò)的手寫漢字生成方法,通過使用標(biāo)準(zhǔn)漢字和手寫漢字構(gòu)建CycleGAN模型,實(shí)現(xiàn)二者之間的相互轉(zhuǎn)換。經(jīng)過實(shí)驗(yàn)驗(yàn)證,本方法生成的手寫漢字使用的數(shù)據(jù)量相對較少,具有比較高的識別度,但該方法還存在一定局限性。一是訓(xùn)練時(shí)間要求較長,且單次實(shí)驗(yàn)僅能夠訓(xùn)練一個(gè)作者的手寫字體。二是生成的手寫漢字缺乏客觀評判的標(biāo)準(zhǔn),對于生成的漢字,評價(jià)基本依靠感性的肉眼鑒別。三是生成的漢字與原標(biāo)準(zhǔn)漢字(仿宋)還有很多相近之處,如連筆等方面沒有得到很好的體現(xiàn),但如果為了實(shí)現(xiàn)更好的效果而冒然增加訓(xùn)練周期,可能會出現(xiàn)模式崩潰(Mode Collapse)現(xiàn)象。
猜你喜歡手寫字體損失我手寫我心故事作文·低年級(2021年12期)2021-12-21胖胖損失了多少元數(shù)學(xué)小靈通·3-4年級(2021年5期)2021-07-16抓住身邊事吾手寫吾心作文成功之路·小學(xué)版(2020年7期)2020-08-24字體的產(chǎn)生娃娃樂園·綜合智能(2020年2期)2020-03-12玉米抽穗前倒伏怎么辦?怎么減少損失?今日農(nóng)業(yè)(2019年15期)2019-01-03基于集成學(xué)習(xí)的MINIST手寫數(shù)字識別電子制作(2018年18期)2018-11-14深度學(xué)習(xí)在手寫漢字識別中的應(yīng)用綜述自動化學(xué)報(bào)(2016年8期)2016-04-16菜燒好了應(yīng)該盡量馬上吃共產(chǎn)黨員(遼寧)(2015年2期)2015-12-06損失讀者·校園版(2015年19期)2015-05-14組合字體小雪花·成長指南(2014年10期)2014-10-31