來源: kaonashi-tyc.github.io
作者:文強
新智元啟動 2017 最新一輪大招聘: COO、總編、主筆、運營總監、視覺總監等8大職位全面開放。
新智元為COO和執行總編提供最高超百萬的年薪激勵;為骨幹員工提供最完整的培訓體系、高於業界平均水平的工資和獎金。加盟新智元,與人工智慧業界領袖攜手改變世界。
簡歷投遞:jobs@aiera.com.cn HR 微信:13552313024
【新智元導讀】Github 用戶 kaonashi-tyc 將字體設計的過程轉化為一個「風格遷移」(style transfer)的問題,使用條件 GAN,訓練神經網絡自動將輸入的漢字轉化為另一種字體(風格)的漢字,效果相當不錯。
今天為大家介紹一個使用 GAN 自動生成中文字體的項目。
創造字體是件很困難的事情,創造中文字體就更難了。
要創造一套符合 GBK(中國政府規定的字符集)的字體,設計師需要為超過 26000 個漢字做設計,有時候需要花好幾年的時間才能完成。
為了解決了這個問題,Github 用戶 kaonashi-tyc 想到,先手工設計一部分漢字,其餘的漢字讓計算機自動生成不就行了?——畢竟,漢字是由偏旁部首組合而成的,「任」這個字裡的單人旁,在「仁」這個字裡看起來也一樣。
於是,作者將字體設計的過程轉化為一個「風格遷移」(style transfer)的問題。他用兩種不同字體作為訓練數據,訓練了一個神經網絡,訓練好的神經網絡自動將輸入的漢字轉化為另一種字體(風格)的漢字,概念如下圖所示。
kaonashi-tyc 將他的首次嘗試命名為「Rewrite:中文字體風格遷移」(Rewrite: Neural Style Transfer For Chinese Fonts)。
但是,這個初步的嘗試還有一些缺陷(見下圖),作者自己總結認為:
為了解決上述問題,作者進行了新的嘗試,也就是我們這次重點介紹的 zi2zi 這個項目。
這一次,作者還是使用風格遷移解決中文字體生成的問題,不過他使用了條件生成對抗網絡(GAN)的力量。
zi2zi是基於以下3篇論文的研究成果:
Image-to-Image Translation with Conditional Adversarial Networks
Conditional Image Synthesis With Auxiliary Classifier GANs
Unsupervised Cross-Domain Image Generation
第一篇論文是加州大學伯克利視覺組的研究,也是前段時間很火的「pix2pix」的研究基礎。作者也表示,zi2zi 是從 pix2pix 的工作直接衍生而來。
zi2zi 的網絡結構如下圖所示:
zi2zi 的網絡結構由編碼器、解碼器和判別器組成(直接把 pix2pix 的拿過來用了)。
作者指出,根據人類設計師設計字體的經驗,讓神經網絡同時學會多種字體風格是至關重要的。
同時建模多種風格有兩大優點:
編碼器能夠接觸到更多的漢字,不僅限於一個目標字體,還包括所有字體的組合
解碼器可以從其他字體中學會同一種偏旁的不同寫法
同時訓練多種字體,迫使模型從每種字體中學習,然後使用學到的經驗改善同一種字體的其他漢字。
現在有一個問題,那就是同一個漢字可以出現在多種字體當中。
Vanilla pix2pix 模型並沒有解決這種一對多的關係。作者受「谷歌零數據機器翻譯」論文(Zero-shot GNMT)的啟發,想出來了「類別嵌入」(category embedding)的方法,將不可訓練的高斯噪聲作為風格嵌入(style embedding)與漢字嵌入(character embedding)串聯起來,之後再一併進入解碼器。
這樣,解碼器仍舊將同一個漢字映射為同一個向量,但是,解碼器會同時考慮漢字和風格兩個嵌入來生成目標漢字(target character)。
有了類別嵌入,現在就有了一個能夠同時處理多種風格的 GAN。
但是,作者發現,這樣做之後又出現了一個新的問題:模型開始將各種風格弄混淆並且混合在一起,生成的漢字什麼也不像了。
於是,他又借鑑了 AC-GAN 模型中的 multi-class category loss,把這個 loss 加到判別器上面,一旦出現混淆或者風格混合,就「懲罰」判別器。
作者介紹,模型當中還有一大要素是 constant loss,這個是 DTN 網絡中的概念。這個方法的思路很簡單——源漢字和生成的漢字按理說應該十分類似,所以它們在嵌入空間(embedded space)裡出現的位置也應該十分接近。作者將這個 loss 命名為「GREATLY」,GREATLY 這個 loss 迫使解碼器保留生成漢字的 identity,收窄了可搜索的範圍,因而加快了收斂速度。
最後,還有一個 total variation loss(tv loss)。不過作者表示,根據實際經驗,這個 loss 對生成圖像的質量提升作用並不明顯。而且,對於毛筆書法來說,這個 tv loss 反而還有損生成圖像的質量。因此,作者將 tv loss 列出作為備選項使用。
下面我們就來看看,zi2zi 生成中文字體的實際效果。下面的圖中,一共有5列,左邊是源字符,右邊是系統自動生成的。
不得不說,效果很不錯。首先,生成的漢字不會「花」了,其次,zi2zi 相比 Rewrite 也能處理更多樣、更複雜的字體風格。
下面這張圖展示了連續的嵌入空間字體的轉換,我們可以見證字體是如何從一種風格轉換為另一種風格的:
下面這張動圖展現了多種字體之間的轉換:
接下來,作者還介紹了如何訓練 GAN,還公開了代碼。不僅如此,還有漢字轉化為韓語的案例。此外,作者還分析了訓練過程中的一些失誤,總結了經驗。
這些具體的內容,你就看原文了解更多吧。