李 昕,雷雨晴,閆 宇
(1.大連民族大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧 大連 116650;2.大連市計(jì)算機(jī)字庫(kù)設(shè)計(jì)技術(shù)創(chuàng)新中心,遼寧 大連 116605)
漢字字體不僅量大,而且復(fù)雜。一套字體設(shè)計(jì)周期長(zhǎng)、反復(fù)工作量大,想要實(shí)現(xiàn)獨(dú)特性表達(dá)幾乎不能完成。設(shè)計(jì)一款新的字體,首先是對(duì)原始字稿進(jìn)行設(shè)計(jì)。原始字稿中不僅包括設(shè)計(jì)師直接在計(jì)算機(jī)上創(chuàng)作的字稿還包括設(shè)計(jì)師手寫(xiě)的字稿。方正倩體的設(shè)計(jì)草圖如圖1。接著再針對(duì)設(shè)計(jì)師的手寫(xiě)字稿進(jìn)行掃描和數(shù)字化擬合操作,將字稿掃描后的點(diǎn)陣圖形制作成盡可能接近原稿的曲線(xiàn)輪廓信息。最后需要字體設(shè)計(jì)師們對(duì)字形進(jìn)行精細(xì)設(shè)計(jì)、反復(fù)修改,才能產(chǎn)生一款新的字體。

圖1 方正倩體的設(shè)計(jì)草圖
由于漢字字庫(kù)是由矢量化曲線(xiàn)進(jìn)行描述和表達(dá),對(duì)于書(shū)法字體通常由字體圖像進(jìn)行矢量化轉(zhuǎn)換,其中字體圖像轉(zhuǎn)為矢量化曲線(xiàn)是其中重要的環(huán)節(jié)之一。一個(gè)漢字的筆畫(huà)周?chē)妮喞€(xiàn)可以看成曲線(xiàn),曲線(xiàn)可以用一組首尾相接的矢量去近似地表示,字體矢量化如圖2。每個(gè)矢量的起點(diǎn)稱(chēng)為曲線(xiàn)上的一個(gè)結(jié)點(diǎn),于是,曲線(xiàn)就可以近似地用一組有次序結(jié)點(diǎn)的坐標(biāo)來(lái)表示。用這種方法去描述漢字的字形,其信息量比直接用點(diǎn)陣描述一般要小得多。特別對(duì)于筆畫(huà)比較平直的漢字,因?yàn)橛玫降慕Y(jié)點(diǎn)很少,信息壓縮的效果更明顯。用這種方法做成的漢字字模叫做矢量字模,用矢量字模構(gòu)成的字庫(kù)就叫做矢量字庫(kù)。矢量字庫(kù)保存的是對(duì)每一個(gè)漢字的描述信息,比如一個(gè)筆劃的起始、終止坐標(biāo),半徑、弧度等等。在顯示、打印這一類(lèi)字庫(kù)時(shí),要經(jīng)過(guò)一系列的數(shù)學(xué)運(yùn)算才能輸出結(jié)果,但是這一類(lèi)字庫(kù)保存的漢字理論上可以被無(wú)限地放大,筆劃輪廓仍然能保持圓滑。

a)標(biāo)準(zhǔn)字體圖像 b)寫(xiě)入字庫(kù)后字體輪廓控制點(diǎn)圖2 字體圖像矢量化
隨著人工智能在字體設(shè)計(jì)領(lǐng)域應(yīng)用的不斷深入,深度學(xué)習(xí)的各種方法被廣泛的用于字體設(shè)計(jì)中。尤其是生成式對(duì)抗網(wǎng)絡(luò)方法,如DCGAN、zi2zi等方法可以利用小樣本生成風(fēng)格相近的中文字體圖像再進(jìn)行矢量化。在研究過(guò)程中發(fā)現(xiàn)字體圖像分辨率的高低對(duì)于字體圖像矢量化后的效果影響較大,如果字體圖像分辨率低的話(huà),點(diǎn)與點(diǎn)之間的距離會(huì)加大,矢量字體就會(huì)出現(xiàn)毛刺、冗余點(diǎn)過(guò)多等問(wèn)題如圖3。低分辨率的字體圖像矢量化后字體邊緣的錨點(diǎn)較多導(dǎo)致字體數(shù)據(jù)量更大,而高分辨率字體圖像則可以生成錨點(diǎn)較少、邊緣更為光滑曲線(xiàn)的矢量化字體。但用于字體生成的GAN網(wǎng)絡(luò),如果提高字體訓(xùn)練圖像分辨率,會(huì)使得訓(xùn)練周期和時(shí)間復(fù)雜度急劇增加,因此構(gòu)建一個(gè)能夠提高字體圖像分辨率的方法可以一定程度解決這一問(wèn)題。

a)低分辨率字體圖像矢量化后效果 b)高分辨率字體圖像矢量化后效果圖3 不同分辨率字體圖像矢量化后效果圖
圖像超分辨率(image super-resolution,簡(jiǎn)稱(chēng)SR)是指由一幅低分辨率圖像或圖像序列恢復(fù)出高分辨率圖像,是一種圖像復(fù)原技術(shù)[1]。圖像超分辨率研究可分為3個(gè)主要范疇:基于插值、基于重建和基于學(xué)習(xí)的方法[2]。基于插值的方法,如雙三次插值法,是利用鄰近像素的值來(lái)逼近損失的圖像信息,從而實(shí)現(xiàn)圖像分辨率的放大[3]。雖然該方法能在一定程度上增加圖像分辨率,但是在中文字體圖像中容易丟失邊緣細(xì)節(jié),使得中文字體圖像邊緣模糊。基于重建的方法是重建退化圖像丟失的高頻信息[4],雖然該方法計(jì)算量小,但是無(wú)法處理結(jié)構(gòu)復(fù)雜的中文字體圖像。由于上述兩個(gè)方法存在自身局限性,一般把這兩個(gè)方法用于基于學(xué)習(xí)方法的輔助處理過(guò)程。
隨著機(jī)器學(xué)習(xí)的發(fā)展,基于學(xué)習(xí)的方法被廣泛應(yīng)用到圖像超分辨率中。如Yang等人提出的傳統(tǒng)基于稀疏編碼算法是基于學(xué)習(xí)的圖像超分辨率代表方法之一[5]。此方法是從圖像中密集地提取重疊的斑塊,進(jìn)行預(yù)處理,然后低分辨率字典再對(duì)這些補(bǔ)丁進(jìn)行編碼。但是傳統(tǒng)的機(jī)器學(xué)習(xí)算法生成的字體往往由于網(wǎng)絡(luò)模型參數(shù)等的原因,使得圖像分辨率較低,從而使字體圖像矢量化效果較差。為了進(jìn)一步提高字體圖像的分辨率,基于超分辨率卷積神經(jīng)網(wǎng)絡(luò)(SRCNN)被提出。該方法是低分辨率和高分辨率圖像之間的端到端映射[6],整個(gè)高分辨率圖像(high resolution,HR)的流水線(xiàn)完全是通過(guò)學(xué)習(xí)獲得的,只需要進(jìn)行很少的預(yù)處理。同時(shí)它結(jié)構(gòu)簡(jiǎn)單,可以提供更高的精確度。
為了解決上述中文字體分辨低問(wèn)題,本文以基于學(xué)習(xí)的方法為研究對(duì)象,提出一種針對(duì)生成字體圖像的超分辨率卷積神經(jīng)網(wǎng)絡(luò)(SCRNN)的方法來(lái)提高字體圖像的分辨率,進(jìn)而優(yōu)化矢量化效果。同時(shí)本實(shí)驗(yàn)輔助字體設(shè)計(jì)師在字體生成時(shí)解決了周期長(zhǎng)、設(shè)計(jì)復(fù)雜等流程。
中文字體數(shù)據(jù)集是相關(guān)研究中較為規(guī)范和數(shù)據(jù)較容易獲得的,本文采用設(shè)計(jì)師設(shè)計(jì)的2 477個(gè)中文字體數(shù)據(jù)集如圖4。并通過(guò)Fontforge導(dǎo)出分辨率分別為100像素與256像素的不同大小的字體圖像。
數(shù)據(jù)預(yù)處理在深度學(xué)習(xí)中起著重要作用,在網(wǎng)絡(luò)模型的學(xué)習(xí)訓(xùn)練中,反向傳播時(shí)傳遞到輸入層的梯度會(huì)增大。由于梯度增大,直接影響網(wǎng)絡(luò)學(xué)習(xí)效率。在該情況下,學(xué)習(xí)率的選擇需要參考輸入層數(shù)值大小,而直接將字體圖像數(shù)據(jù)歸一化操作,能很方便的選擇學(xué)習(xí)率。故本文在獲取到字體數(shù)據(jù)集后,對(duì)字體數(shù)據(jù)進(jìn)行歸一化處理。由于字體圖像的像素值只有0與255,將這些像素值除以255,使他們縮放為0與1。 進(jìn)而將每一個(gè)字體圖像減去數(shù)據(jù)的統(tǒng)計(jì)平均值(逐樣本計(jì)算),這種歸一化可以移除字體圖像的平均亮度值。

圖4 設(shè)計(jì)師設(shè)計(jì)的中文字體數(shù)據(jù)集
對(duì)于網(wǎng)絡(luò)模型輸入的字體圖像數(shù)據(jù)集分為兩個(gè)部分,一部分為圖像尺寸均為100×100像素的字體圖像,另一部分為圖像尺寸均為256×256像素的字體圖像。超分辨率網(wǎng)絡(luò)學(xué)習(xí)低像素到高像素的映射,以此將低分辨率字體圖像生成為高分辨率字體圖像。
本文提出的超分辨率卷積神經(jīng)網(wǎng)絡(luò)(SCRNN)一種針對(duì)單幅字體圖像超分辨率的深度學(xué)習(xí)方法。該方法首先使用雙三次插值將單個(gè)低分辨率字體圖像放大到所需的大小,通過(guò)卷積神經(jīng)網(wǎng)絡(luò)(CNN)擬合非線(xiàn)性映射輸出為較高的分辨率的目標(biāo)圖片。深度學(xué)習(xí)在經(jīng)典的超分辨率計(jì)算機(jī)視覺(jué)問(wèn)題中的應(yīng)用,能達(dá)到很好的質(zhì)量和速度。
網(wǎng)絡(luò)由三個(gè)操作組成:面片提取和表示、非線(xiàn)性映射、重建。面片提取和表示是從低分辨率圖像中提取面片,并將每個(gè)面片表示為高維向量;非線(xiàn)性映射是將每個(gè)高維向量非線(xiàn)性映射到另一個(gè)高維向量上,每個(gè)映射的矢量在概念上都是高分辨率面片的表示,這些矢量構(gòu)成了另一組特征圖;重建是聚集上述高分辨率拼接表示,以生成最終的高分辨圖像。SCRNN網(wǎng)絡(luò)的結(jié)構(gòu)如圖5。

圖5 SCRNN網(wǎng)絡(luò)的結(jié)構(gòu)示意圖
首先,給定一張低分辨字體圖像,SCRNN的第一卷積層提取一組特征映射。第二層將這些要素地圖非線(xiàn)性映射到高分辨率面片表示。最后一層結(jié)合空間鄰域內(nèi)的預(yù)測(cè),產(chǎn)生最終的高分辨率圖像。
(1)面片提取和表示。圖像復(fù)原中一種流行的策略是密集的提取面片,然后通過(guò)用一組預(yù)先訓(xùn)練好的基表示,如PCA、DCT、Haar等。這相當(dāng)于通過(guò)一組濾波器對(duì)圖像進(jìn)行卷積,每個(gè)濾波器都是一個(gè)基礎(chǔ)。將這些基礎(chǔ)的優(yōu)化納入到網(wǎng)絡(luò)的優(yōu)化中,形式上,把第一層表示為一個(gè)操作:
F1(Y)=max(0,W1*Y+B1)。
(1)
式中,W1和B1分別表示濾波器和偏置。W1的大小為c×f1×f1×n1;c是輸入圖像中的通道數(shù);f1是濾波器的空間尺寸;n1是濾波器的數(shù)量。W1對(duì)圖像進(jìn)行n1卷積,每個(gè)卷積核大小為c×f1×f1。輸出由n1個(gè)特征地圖組成。B1是一個(gè)n1維向量,它的每個(gè)元素都與一個(gè)過(guò)濾器相關(guān)聯(lián)[7]。
(2)非線(xiàn)性映射。把第一層提取到每個(gè)面片的n1維向量映射到n2維向量。相當(dāng)于應(yīng)用具有1×1平凡空間支撐的n2濾波器。第二層操作為
F2(Y)=max(0,W2*F1(Y)+B2)。(2)
式中,W2的大小為n1×1×1×n2,B2是n2維向量。每個(gè)輸出的n2維向量在概念上是將用于重建的高分辨率面片的表示,如圖6。

圖6 從卷積神經(jīng)網(wǎng)絡(luò)的角度說(shuō)明基于稀疏編碼的方法
(3)重建。在傳統(tǒng)方法中,通常將預(yù)測(cè)的高分辨率重疊斑塊平均生成最終的完整圖像[8]。平均可以被認(rèn)為是一組特征圖上的一個(gè)預(yù)定義的過(guò)濾器(其中每個(gè)位置是一個(gè)高分辨率補(bǔ)丁的“扁平”向量形式)。定義了一個(gè)卷積層來(lái)產(chǎn)生最終的高分辨率圖像為
F(Y)=W3*F2(Y)+B3。
(3)
式中,W3的大小為n2×f3×f3×c;B3為c維向量。如果表示高分辨率的補(bǔ)丁位于字體圖像域,則過(guò)濾器的作用類(lèi)似于平均濾波器;如果位于某些其他域,則W3的行為是將系數(shù)投影到圖像域,然后進(jìn)行平均。無(wú)論哪種方式,W3都是一組線(xiàn)性過(guò)濾器。把這三種操作放在一起,就形成了卷積神經(jīng)網(wǎng)絡(luò)如圖4,。該模型中所有的濾波權(quán)重和偏差都是最優(yōu)化的。
損失函數(shù)(Loss function)是將隨機(jī)事件或其有關(guān)隨機(jī)變量的取值映射為非負(fù)實(shí)數(shù)以表示該隨機(jī)事件的“損失”的函數(shù)。學(xué)習(xí)端到端映射函數(shù)F需要估計(jì)參數(shù)θ={W1,W2,W3,B1,B2,B3}。這是通過(guò)最小化重建圖像F(Y;θ)與對(duì)應(yīng)的地面真實(shí)高分辨率圖像X之間的損失來(lái)實(shí)現(xiàn)的。給定一組高分辨率圖像{Xi}及其對(duì)應(yīng)的低分辨率圖像{Yi},本文使用均方誤差(MSE)作為損失函數(shù):
(4)
式中,n是訓(xùn)練樣本的數(shù)量。損失是最小的使用隨機(jī)梯度下降與標(biāo)準(zhǔn)反向傳播[9]。
使用均方誤差作為損失函數(shù)有利于高PSNR。PSNR是用于定量評(píng)估圖像恢復(fù)質(zhì)量的廣泛使用的度量,并且至少部分地與感知質(zhì)量相關(guān)[10]。如果損失函數(shù)是可導(dǎo)的,卷積神經(jīng)網(wǎng)絡(luò)不排除使用其它類(lèi)型的損失函數(shù)。如果在訓(xùn)練過(guò)程中給出了一個(gè)更好的感知激勵(lì)度量,那么網(wǎng)絡(luò)可以靈活地適應(yīng)該度量。
實(shí)驗(yàn)中,本文在字體數(shù)據(jù)集上迭代訓(xùn)練100個(gè)周期,每一個(gè)周期迭代訓(xùn)練2 400次,每一次交替訓(xùn)練判別器和生成器各一次,采用深卷積網(wǎng)絡(luò)進(jìn)行訓(xùn)練。將每一個(gè)batch的大小設(shè)置為16,參數(shù)λ1=10,參數(shù)λ2設(shè)置為100。訓(xùn)練中,網(wǎng)絡(luò)的學(xué)習(xí)速率設(shè)置為0.000 1,采用Adam優(yōu)化算法,其中參數(shù)beta1=0.5,beta2設(shè)置為0.9。每迭代10個(gè)周期保存一次訓(xùn)練模型。
在網(wǎng)絡(luò)模型生成過(guò)程中,輸入的字體圖像像素為256×256,經(jīng)過(guò)超分辨重構(gòu)之后的字體圖像為496×496像素,生成的字體圖像細(xì)節(jié)更加明顯、清晰。深卷積網(wǎng)絡(luò)的結(jié)果看出其輸入輸出的字體圖像在整體的內(nèi)容表達(dá)上與原圖是一致的,生成出的字體圖像內(nèi)容質(zhì)量更高。輸入輸出端的字體圖像如圖7。

a)輸入端字體圖像 b)輸出端字體圖像圖7 網(wǎng)絡(luò)模型生成的字體圖像
在生成過(guò)程中,每一個(gè)生成字體圖像比輸入的圖像更加清晰,結(jié)構(gòu)更加完整。生成字體圖像如圖6。 圖8a為低分辨率的字體圖像,8b為高分辨率字體圖像字體圖像。

a)輸入端字體圖像256×256像素 b)輸出端字體圖像496×496像素圖8 單個(gè)生成的字體圖像
為了測(cè)試文本提出的模型對(duì)設(shè)計(jì)師字庫(kù)輔助設(shè)計(jì)的有效性,通過(guò)將生成的字體圖像導(dǎo)入矢量字庫(kù),進(jìn)而驗(yàn)證文本方法的價(jià)值所在,結(jié)果如圖9。圖中從左至右分別為256×256像素以及生成的496×496像素的矢量圖。通過(guò)本文方法生成的字體矢量字庫(kù)錨點(diǎn)更少,字體結(jié)構(gòu)更為清晰,進(jìn)而達(dá)到字體設(shè)計(jì)師設(shè)置字體的要求,也證明了本文方法的有效性。

a)256×256像素字體矢量化效果 b)496×496像素字體矢量化效果圖9 生成矢量字庫(kù)效果圖
提出了一種新的關(guān)于字體的圖像超分辨率深度學(xué)習(xí)方法。以往傳統(tǒng)的基于稀疏編碼的圖像超分辨率方法可以轉(zhuǎn)化為一種深度卷積的神經(jīng)網(wǎng)絡(luò)。本文所提出的方法SRCNN學(xué)習(xí)低分辨率和高分辨率字體圖像之間的端到端映射,生成符合設(shè)計(jì)師要求的高分辨率字體圖像。通過(guò)實(shí)驗(yàn)表明本文的方法更具有魯棒性,對(duì)于字體設(shè)計(jì)行業(yè),大大縮短了設(shè)計(jì)周期,可輔助字體設(shè)計(jì)師進(jìn)行字體導(dǎo)入字庫(kù)時(shí)的優(yōu)化。