如果想要自己做一套字體,無論是電腦軟體FontCreator還是網站flexifont都為我們帶來了極大的便利。但是最低的國標字體數量近7000個,若採用傳統的方法則需要手寫相同數量的漢字,這個過程費時耗力。本文將介紹開源項目zi2zi,只需要你的部分手寫字體樣本便可生成完整字庫。教你用深度學習的方式打開製作手寫字體的大門。zi2zi是作者Rewrite項目的後續工作,其為處理類似中文字體轉化的問題。Rewrite項目獲得了相當多的關注和興趣,但是項目結果不佳。仍然存在一些嚴重的問題:
限於一次僅學習和輸出一種目標字體樣式
為了解決上述問題,zi2zi誕生了。本項目的論文中是將之前的三篇paper合在一起又加入了作者的構想形成的一個條件生成對抗網絡。
zi2zi模型和其名字一樣,來源於pix2pix模型並有所改進。其網絡結構如下:我們可以知道,現實世界中的設計師需要經過多年的培訓,起碼了解字母/字符的結構和基本原理才能自行設計字體。基於此,其重要的是使模型不僅意識到自己的樣式,而且也能意識到其他字體的樣式。因此,使模型能夠同時學習多種字體樣式是極為重要的。同時對多種樣式建模有兩個主要好處:通過一起訓練多個字體,它可以強制模型從每個字體中學習,然後利用所學的經驗來改善其他字體。現在有一問題是同一個漢字會出現在多種字體當中。作者受《谷歌的多語言神經機器翻譯系統》的啟發,想出了「類別嵌入」,將不可訓練的高斯噪聲作為風格嵌入與漢字嵌入串聯起來,之後再一併進入解碼器。這樣,解碼器仍舊將同一個漢字映射為同一個向量,但是,解碼器會同時考慮漢字和風格兩個嵌入來生成目標漢字。有了類別嵌入,現在就有了一個能夠同時處理多種風格的GAN。但作者發現又出現了一個新的問題:模型開始將各種風格弄混淆並且混合在一起,生成的漢字什麼也不像了。於是,他又借鑑了 AC-GAN模型中的 multi-class category loss,把這個 loss 加到判別器上,一旦出現混淆或者風格混合,就「懲罰」判別器。上圖為zi2zi 生成中文字體的實際效果。共有5列,左邊是源字符,右邊是系統自動生成的。可以看到,生成的漢字不會「花」,對於某些字來說,系統生成的和真實文字幾乎一樣。同時也能處理更多樣、更複雜的字體風格。
此外,通過具有連續的嵌入,我們可以在不同樣式之間進行插值,並得到介於兩個字體之間的狀態:下面是多對字體之間過渡的動畫,這些演示了在更動態的上下文中的插值過程:項目代碼可訪問下面地址或關注公眾號
「IamZLT」,後臺回復
「字體」即可獲取。運行環境可參考連結內給出的條件。Github:github.com/kaonashi-tyc/zi2zi/
為了避免IO瓶頸,必須進行預處理,以將數據轉化為二進位數據並在訓練期間保留在內存中。首先運行以下命令將字體文件轉化為數據集:之後會生成一一對照的圖片,其中左邊為希望系統生成的目標字體,右邊為系統參照字體,可以使用網上字體較全的字體庫。
如果你的目標字體沒有ttf格式文件的話,也可以使用圖片編輯軟體來拼接圖片,以達到以上的效果。然後通過以下命令進行封裝,轉換為二進位格式。運行此命令後,將在save_dir下找到兩個對象train.obj和val.obj,分別用於訓練和驗證。然後便可以開始訓練。需運行以下命令:經過長時間訓練,最後會生成矢量SVG文件,導入FontCreator等軟體中便可生成自己的字庫。
往期推薦
由於微信推送規則的改變,點擊在看或將公眾號設為星標可避免推送的遺漏喲~