李 昕,雷雨晴,閆 宇
(1.大連民族大學 計算機科學與工程學院,遼寧 大連 116650;2.大連市計算機字庫設計技術創(chuàng)新中心,遼寧 大連 116605)
漢字字體不僅量大,而且復雜。一套字體設計周期長、反復工作量大,想要實現(xiàn)獨特性表達幾乎不能完成。設計一款新的字體,首先是對原始字稿進行設計。原始字稿中不僅包括設計師直接在計算機上創(chuàng)作的字稿還包括設計師手寫的字稿。方正倩體的設計草圖如圖1。接著再針對設計師的手寫字稿進行掃描和數(shù)字化擬合操作,將字稿掃描后的點陣圖形制作成盡可能接近原稿的曲線輪廓信息。最后需要字體設計師們對字形進行精細設計、反復修改,才能產(chǎn)生一款新的字體。
圖1 方正倩體的設計草圖
由于漢字字庫是由矢量化曲線進行描述和表達,對于書法字體通常由字體圖像進行矢量化轉換,其中字體圖像轉為矢量化曲線是其中重要的環(huán)節(jié)之一。一個漢字的筆畫周圍的輪廓線可以看成曲線,曲線可以用一組首尾相接的矢量去近似地表示,字體矢量化如圖2。每個矢量的起點稱為曲線上的一個結點,于是,曲線就可以近似地用一組有次序結點的坐標來表示。用這種方法去描述漢字的字形,其信息量比直接用點陣描述一般要小得多。特別對于筆畫比較平直的漢字,因為用到的結點很少,信息壓縮的效果更明顯。用這種方法做成的漢字字模叫做矢量字模,用矢量字模構成的字庫就叫做矢量字庫。矢量字庫保存的是對每一個漢字的描述信息,比如一個筆劃的起始、終止坐標,半徑、弧度等等。在顯示、打印這一類字庫時,要經(jīng)過一系列的數(shù)學運算才能輸出結果,但是這一類字庫保存的漢字理論上可以被無限地放大,筆劃輪廓仍然能保持圓滑。
a)標準字體圖像 b)寫入字庫后字體輪廓控制點圖2 字體圖像矢量化
隨著人工智能在字體設計領域應用的不斷深入,深度學習的各種方法被廣泛的用于字體設計中。尤其是生成式對抗網(wǎng)絡方法,如DCGAN、zi2zi等方法可以利用小樣本生成風格相近的中文字體圖像再進行矢量化。在研究過程中發(fā)現(xiàn)字體圖像分辨率的高低對于字體圖像矢量化后的效果影響較大,如果字體圖像分辨率低的話,點與點之間的距離會加大,矢量字體就會出現(xiàn)毛刺、冗余點過多等問題如圖3。低分辨率的字體圖像矢量化后字體邊緣的錨點較多導致字體數(shù)據(jù)量更大,而高分辨率字體圖像則可以生成錨點較少、邊緣更為光滑曲線的矢量化字體。但用于字體生成的GAN網(wǎng)絡,如果提高字體訓練圖像分辨率,會使得訓練周期和時間復雜度急劇增加,因此構建一個能夠提高字體圖像分辨率的方法可以一定程度解決這一問題。
a)低分辨率字體圖像矢量化后效果 b)高分辨率字體圖像矢量化后效果圖3 不同分辨率字體圖像矢量化后效果圖
圖像超分辨率(image super-resolution,簡稱SR)是指由一幅低分辨率圖像或圖像序列恢復出高分辨率圖像,是一種圖像復原技術[1]。圖像超分辨率研究可分為3個主要范疇:基于插值、基于重建和基于學習的方法[2]?;诓逯档姆椒?,如雙三次插值法,是利用鄰近像素的值來逼近損失的圖像信息,從而實現(xiàn)圖像分辨率的放大[3]。雖然該方法能在一定程度上增加圖像分辨率,但是在中文字體圖像中容易丟失邊緣細節(jié),使得中文字體圖像邊緣模糊。基于重建的方法是重建退化圖像丟失的高頻信息[4],雖然該方法計算量小,但是無法處理結構復雜的中文字體圖像。由于上述兩個方法存在自身局限性,一般把這兩個方法用于基于學習方法的輔助處理過程。
隨著機器學習的發(fā)展,基于學習的方法被廣泛應用到圖像超分辨率中。如Yang等人提出的傳統(tǒng)基于稀疏編碼算法是基于學習的圖像超分辨率代表方法之一[5]。此方法是從圖像中密集地提取重疊的斑塊,進行預處理,然后低分辨率字典再對這些補丁進行編碼。但是傳統(tǒng)的機器學習算法生成的字體往往由于網(wǎng)絡模型參數(shù)等的原因,使得圖像分辨率較低,從而使字體圖像矢量化效果較差。為了進一步提高字體圖像的分辨率,基于超分辨率卷積神經(jīng)網(wǎng)絡(SRCNN)被提出。該方法是低分辨率和高分辨率圖像之間的端到端映射[6],整個高分辨率圖像(high resolution,HR)的流水線完全是通過學習獲得的,只需要進行很少的預處理。同時它結構簡單,可以提供更高的精確度。
為了解決上述中文字體分辨低問題,本文以基于學習的方法為研究對象,提出一種針對生成字體圖像的超分辨率卷積神經(jīng)網(wǎng)絡(SCRNN)的方法來提高字體圖像的分辨率,進而優(yōu)化矢量化效果。同時本實驗輔助字體設計師在字體生成時解決了周期長、設計復雜等流程。
中文字體數(shù)據(jù)集是相關研究中較為規(guī)范和數(shù)據(jù)較容易獲得的,本文采用設計師設計的2 477個中文字體數(shù)據(jù)集如圖4。并通過Fontforge導出分辨率分別為100像素與256像素的不同大小的字體圖像。
數(shù)據(jù)預處理在深度學習中起著重要作用,在網(wǎng)絡模型的學習訓練中,反向傳播時傳遞到輸入層的梯度會增大。由于梯度增大,直接影響網(wǎng)絡學習效率。在該情況下,學習率的選擇需要參考輸入層數(shù)值大小,而直接將字體圖像數(shù)據(jù)歸一化操作,能很方便的選擇學習率。故本文在獲取到字體數(shù)據(jù)集后,對字體數(shù)據(jù)進行歸一化處理。由于字體圖像的像素值只有0與255,將這些像素值除以255,使他們縮放為0與1。 進而將每一個字體圖像減去數(shù)據(jù)的統(tǒng)計平均值(逐樣本計算),這種歸一化可以移除字體圖像的平均亮度值。
圖4 設計師設計的中文字體數(shù)據(jù)集
對于網(wǎng)絡模型輸入的字體圖像數(shù)據(jù)集分為兩個部分,一部分為圖像尺寸均為100×100像素的字體圖像,另一部分為圖像尺寸均為256×256像素的字體圖像。超分辨率網(wǎng)絡學習低像素到高像素的映射,以此將低分辨率字體圖像生成為高分辨率字體圖像。
本文提出的超分辨率卷積神經(jīng)網(wǎng)絡(SCRNN)一種針對單幅字體圖像超分辨率的深度學習方法。該方法首先使用雙三次插值將單個低分辨率字體圖像放大到所需的大小,通過卷積神經(jīng)網(wǎng)絡(CNN)擬合非線性映射輸出為較高的分辨率的目標圖片。深度學習在經(jīng)典的超分辨率計算機視覺問題中的應用,能達到很好的質量和速度。
網(wǎng)絡由三個操作組成:面片提取和表示、非線性映射、重建。面片提取和表示是從低分辨率圖像中提取面片,并將每個面片表示為高維向量;非線性映射是將每個高維向量非線性映射到另一個高維向量上,每個映射的矢量在概念上都是高分辨率面片的表示,這些矢量構成了另一組特征圖;重建是聚集上述高分辨率拼接表示,以生成最終的高分辨圖像。SCRNN網(wǎng)絡的結構如圖5。
圖5 SCRNN網(wǎng)絡的結構示意圖
首先,給定一張低分辨字體圖像,SCRNN的第一卷積層提取一組特征映射。第二層將這些要素地圖非線性映射到高分辨率面片表示。最后一層結合空間鄰域內的預測,產(chǎn)生最終的高分辨率圖像。
(1)面片提取和表示。圖像復原中一種流行的策略是密集的提取面片,然后通過用一組預先訓練好的基表示,如PCA、DCT、Haar等。這相當于通過一組濾波器對圖像進行卷積,每個濾波器都是一個基礎。將這些基礎的優(yōu)化納入到網(wǎng)絡的優(yōu)化中,形式上,把第一層表示為一個操作:
F1(Y)=max(0,W1*Y+B1)。
(1)
式中,W1和B1分別表示濾波器和偏置。W1的大小為c×f1×f1×n1;c是輸入圖像中的通道數(shù);f1是濾波器的空間尺寸;n1是濾波器的數(shù)量。W1對圖像進行n1卷積,每個卷積核大小為c×f1×f1。輸出由n1個特征地圖組成。B1是一個n1維向量,它的每個元素都與一個過濾器相關聯(lián)[7]。
(2)非線性映射。把第一層提取到每個面片的n1維向量映射到n2維向量。相當于應用具有1×1平凡空間支撐的n2濾波器。第二層操作為
F2(Y)=max(0,W2*F1(Y)+B2)。(2)
式中,W2的大小為n1×1×1×n2,B2是n2維向量。每個輸出的n2維向量在概念上是將用于重建的高分辨率面片的表示,如圖6。
圖6 從卷積神經(jīng)網(wǎng)絡的角度說明基于稀疏編碼的方法
(3)重建。在傳統(tǒng)方法中,通常將預測的高分辨率重疊斑塊平均生成最終的完整圖像[8]。平均可以被認為是一組特征圖上的一個預定義的過濾器(其中每個位置是一個高分辨率補丁的“扁平”向量形式)。定義了一個卷積層來產(chǎn)生最終的高分辨率圖像為
F(Y)=W3*F2(Y)+B3。
(3)
式中,W3的大小為n2×f3×f3×c;B3為c維向量。如果表示高分辨率的補丁位于字體圖像域,則過濾器的作用類似于平均濾波器;如果位于某些其他域,則W3的行為是將系數(shù)投影到圖像域,然后進行平均。無論哪種方式,W3都是一組線性過濾器。把這三種操作放在一起,就形成了卷積神經(jīng)網(wǎng)絡如圖4,。該模型中所有的濾波權重和偏差都是最優(yōu)化的。
損失函數(shù)(Loss function)是將隨機事件或其有關隨機變量的取值映射為非負實數(shù)以表示該隨機事件的“損失”的函數(shù)。學習端到端映射函數(shù)F需要估計參數(shù)θ={W1,W2,W3,B1,B2,B3}。這是通過最小化重建圖像F(Y;θ)與對應的地面真實高分辨率圖像X之間的損失來實現(xiàn)的。給定一組高分辨率圖像{Xi}及其對應的低分辨率圖像{Yi},本文使用均方誤差(MSE)作為損失函數(shù):
(4)
式中,n是訓練樣本的數(shù)量。損失是最小的使用隨機梯度下降與標準反向傳播[9]。
使用均方誤差作為損失函數(shù)有利于高PSNR。PSNR是用于定量評估圖像恢復質量的廣泛使用的度量,并且至少部分地與感知質量相關[10]。如果損失函數(shù)是可導的,卷積神經(jīng)網(wǎng)絡不排除使用其它類型的損失函數(shù)。如果在訓練過程中給出了一個更好的感知激勵度量,那么網(wǎng)絡可以靈活地適應該度量。
實驗中,本文在字體數(shù)據(jù)集上迭代訓練100個周期,每一個周期迭代訓練2 400次,每一次交替訓練判別器和生成器各一次,采用深卷積網(wǎng)絡進行訓練。將每一個batch的大小設置為16,參數(shù)λ1=10,參數(shù)λ2設置為100。訓練中,網(wǎng)絡的學習速率設置為0.000 1,采用Adam優(yōu)化算法,其中參數(shù)beta1=0.5,beta2設置為0.9。每迭代10個周期保存一次訓練模型。
在網(wǎng)絡模型生成過程中,輸入的字體圖像像素為256×256,經(jīng)過超分辨重構之后的字體圖像為496×496像素,生成的字體圖像細節(jié)更加明顯、清晰。深卷積網(wǎng)絡的結果看出其輸入輸出的字體圖像在整體的內容表達上與原圖是一致的,生成出的字體圖像內容質量更高。輸入輸出端的字體圖像如圖7。
a)輸入端字體圖像 b)輸出端字體圖像圖7 網(wǎng)絡模型生成的字體圖像
在生成過程中,每一個生成字體圖像比輸入的圖像更加清晰,結構更加完整。生成字體圖像如圖6。 圖8a為低分辨率的字體圖像,8b為高分辨率字體圖像字體圖像。
a)輸入端字體圖像256×256像素 b)輸出端字體圖像496×496像素圖8 單個生成的字體圖像
為了測試文本提出的模型對設計師字庫輔助設計的有效性,通過將生成的字體圖像導入矢量字庫,進而驗證文本方法的價值所在,結果如圖9。圖中從左至右分別為256×256像素以及生成的496×496像素的矢量圖。通過本文方法生成的字體矢量字庫錨點更少,字體結構更為清晰,進而達到字體設計師設置字體的要求,也證明了本文方法的有效性。
a)256×256像素字體矢量化效果 b)496×496像素字體矢量化效果圖9 生成矢量字庫效果圖
提出了一種新的關于字體的圖像超分辨率深度學習方法。以往傳統(tǒng)的基于稀疏編碼的圖像超分辨率方法可以轉化為一種深度卷積的神經(jīng)網(wǎng)絡。本文所提出的方法SRCNN學習低分辨率和高分辨率字體圖像之間的端到端映射,生成符合設計師要求的高分辨率字體圖像。通過實驗表明本文的方法更具有魯棒性,對于字體設計行業(yè),大大縮短了設計周期,可輔助字體設計師進行字體導入字庫時的優(yōu)化。