Pre
title: CalliGAN: Style and Structure-aware Chinese Calligraphy Character Generator
accepted: AICCW(the AI for content creation workshop) at CVPR 2020
paper: https://arxiv.org/abs/2005.12500
code: https://github.com/JeanWU/CalliGAN
ref: https://blog.csdn.net/m0_51335899/article/details/123141736
關鍵詞: 字型生成, 漢字, 書法,部件拆分,RNN
閱讀理由: 回顧經典
Idea
在zi2zi基礎上做改進,主要加了個部件序列資訊
Motivation&Solution
圖1 本文方法生成的結果,上下字型風格不同
- 部分字型覆蓋的字元數量有限
- 書法作品的載體(紙張、石碑等)由於腐蝕導致字跡不清,限制了名作的使用
Background
影像翻譯
影像到影像的轉換是一種視覺和圖形問題。它的目的是學習輸入影像和輸出影像之間的對映函式。使用這種技術的應用範圍很廣,如風格轉移,物體更換,季節轉移,或照片增強。
漢字生成
Zi2zi是一個開源專案,但從未以論文或技術報告的形式發表。第一篇使用GANs生成中國書法漢字的論文是AEGG[18],同樣基於pix2pix,但增加了一個額外的編解碼器網路,在訓練過程中提供監督資訊。與可以生成多類影像的zi2zi不同,AEGG只支援單類的字元生成。
DCFont[11]和PEGAN[23]都是從zi2zi修改而來,從數百個訓練樣本中生成GB2312字型庫中使用的全部6763個漢字。PEGAN透過引入多尺度影像金字塔來透過細化連線傳遞資訊來改進zi2zi,而DCFont則整合了預先訓練過100種字型的樣式分類器來獲得更好的樣式表示。SCFont[12]透過調整筆畫提取演算法[16]進一步改進了DCFont,以保持從輸入影像到輸出影像的筆畫結構。
與學習給定字型之間的翻譯模型相比,EMD[33]和SA-VAE[22]都將內容和風格分離為兩個不相關的域,並使用兩個獨立的編碼器來為它們建模。然而其技術細節不同,EMD在一個雙線性混合網路(bilinear mixer network)中混合風格和內容的潛在特徵,再使用影像解碼器生成輸出影像。因此,它的訓練樣本非常特殊,一個樣本由兩組訓練影像組成,一組用於內容,另一組用於風格。(這點SA-VAE也是)
與此相反,SA-VAE採用序列方法(sequential approach),首先識別給定影像中的漢字,然後將識別的漢字編碼為特殊的程式碼,這些程式碼代表12個高頻漢字結構和101個高頻字根。SA-VAE表明,漢字的結構知識有助於提高輸出影像質量。
emmm我尋思SA-VAE也不是序列方式吧,而且哪裡需要識別影像的漢字,內容字形的語義是已知的,所謂“特殊的程式碼”還有第三部分是hash碼。
CalliGAN
由於漢字是高度結構化的,早期的一些方法使用採用拆分合並的方法,將一個漢字分解成筆畫,然後將每個筆畫單獨生成再組合為對應的漢字[31,29]。但結構複雜的漢字難以自動分解的缺陷,並且需要手動分解某些字型風格,比如草書[30]。
隨著神經網路和計算機視覺技術的發展,一項名為“風格轉換”的研究取得了顯著的成功,該研究旨在將畫家的藝術風格新增到相機捕捉的照片中。風格轉換逐漸演變為影像到影像的轉換[10,34,32,14,17,24,3],其目的不僅是為目標影像新增風格細節,還包括物件從一個域到另一個域的轉換,如馬到斑馬,反之亦然。由於中國書法家在筆畫形式上各有自己的風格,產生書法漢字可以看作是漢字風格的域間轉化。
一種中文字型可以很容易地渲染許多字元影像。給定兩種字型,可以很容易地獲得無數字符對。因此,透過訓練影像到影像的翻譯模型來生成字元是一種實用的方法,該方法生成的字元質量為最先進的[2]。與字型呈現的字元影像相比,毛筆書寫的字元影像更加不規則。此外,它們需要花費時間和精力來建立。據我們所知,目前還沒有明確定義的毛筆書法影像資料集,只有一篇現有的論文使用毛筆書法字元影像來進行實驗[18]。本文是第二篇來處理這種影像型別。
利用毛筆書寫的影像,提出了一種多風格影像-影像轉換的方法。我們把風格定義為書法家的身份。如果一個書法家在不同的創作時期有不同的風格,我們就為這個書法家定義多個風格標籤。為了驗證所開發的方法,我們將與現有方法進行比較。綜上所述,本文有兩個貢獻:
- 現有的多字型漢字生成方法是為了生成較大差距(highly different)字型的漢字,本文是第一個在細粒度上處理樣式的方法。此外,本文是第二篇毛筆書法影像轉換的論文。我們的程式碼和資料集是公開的,可以幫助研究人員復現我們的結果。
- 該方法採用了一種新穎的元件編碼器。據我們所知,該方法是第一個將漢字分解成部件(component)並透過迴圈神經網路進行編碼的方法。提出的方法生成了很好的影像,從而獲得了良好的數字評價和主觀意見。
提出的CalliGAN方法與現有方法有兩個共同點:
- 首先,CalliGAN是一種基於GAN的方法,就像zi2zi、AEGG、DCFont和PEGAN。
- 其次,利用了漢字結構的先驗知識,像SA-VAE那樣。CalliGAN和SA-VAE的一個明顯區別是利用漢字結構的方式。SA-VAE只使用漢字的結構和部首,這是高層次的結構資訊,而CalliGAN將漢字完全分解成 ·部件· ,提供低層次的結構資訊,包括筆畫的順序。
簡而言之,CalliGAN整合了生成真實影像的GANs和保留字元結構的SA-VAE的優點。
Method(Model)
Overview
圖2 架構和損失。CalliGAN是一個基於編解碼器的影像翻譯網路,有兩個分支分別控制風格和內容。4個基於影像的損失:對抗損失、畫素損失、一致性損失和分類損失
Architecture. 設h是由Unicode等系統編碼的字元程式碼,s是風格標籤,y是在風格s下表示h的影像。根據給定的中文字型渲染一個影像x(內容字形),使用成對的影像集{x}和{y}來訓練我們的網路將內容字形轉換為書法家寫的影像。
透過影像編碼器Ei對x進行編碼,生成一個影像特徵向量vi。同時,我們查閱字典T,獲得h的結構序列c,透過編碼器Ec生成結構特徵向量vc。將參考影像y的樣式標籤s轉換為一個有效編碼向量vs,vc、vi和vs串聯起來作為輸入特徵向量,以生成書法字元影像\(\hat{y}\)。
Image encoder and decoder. 使用U-Net[21]作為編碼器-解碼器架構,中國書法大多是用黑色墨水錶現的,假設影像是灰度圖。修改了U-Net的架構,將輸入和輸出影像的通道數從3個減少到1個。
表1 編解碼器架構。細節略
圖3 部件序列樣例。
Component encoder. 圖3顯示了一些部件的例子。我們使用一個公開的漢字分解系統,即中國標準交換碼,它定義了517個漢字部件。給定一個字元h,我們使用該系統來獲得其部件序列:
圖4 部件編碼器E_c架構
其中n為c的長度,由h決定。為了將可變長度序列c轉換為定長特徵向量vc,我們提出了一個序列編碼器,如圖4所示,該編碼器包含嵌入層和LSTM模型。嵌入層將構件碼轉換為128維的嵌入向量,將其輸入到LSTM模型中,生成結構特徵向量vk。這些嵌入向量在我們的訓練過程中自動最佳化。LSTM模型隨機初始化。
表2 判別器和風格分類器架構
Discriminator and auxiliary style classifier 鑑別器和輔助風格分類器除了輸入層的輸入通道數以外,幾乎與zi2zi的鑑別器和輔助風格分類器相同。它的架構如表2所示。鑑別器和輔助風格分類器共享前三層,並擁有獨立的第四層。
公式2~6 4種損失
Losses. 4種損失如公式2~6所示:對抗損失2、畫素損失3、一致性損失4和風格分類損失5
Experiment
Settings
隨機初始化網路的權值,使用Adam[15]最佳化器訓練模型,引數β1為0.5,β2為0.999,batch size為16。因為我們的鑑別器D學習速度比生成器快,所以我們在更新鑑別器一次之後更新生成器兩次(相當於TTUR?)。
40個epochs,前20個的初始學習率設為0.001,將後20個的衰減率設為0.5。在一臺配備了8核2.1GHz CPU和Nvidia GPU RTX 2080 Ti的機器上訓練我們的模型需要25小時(cpu什麼洋垃圾中的洋垃圾?)。設定λp=100, λc=15和λs=1。使用TensorFlow實現。
Dataset
為了編制一個影像集來進行實驗,從一箇中國書法影像庫中下載影像。所有的影像都是由專家模仿古代的傑作用筆寫成的,或者是由藝術字型呈現的。該資源庫涵蓋了29種書法風格。其中一些屬於定義明確的楷書、半草書和隸書,但其餘的沒有被歸類。我們選擇了屬於楷書的7種風格來進行實驗,它們的名稱是
- 褚遂良。
- 柳公權。
- 歐陽詢《皇甫誕碑》
- 歐陽詢《九成宮醴泉銘》。
- 顏真卿《多寶塔碑》。
- 顏真卿《顏真卿勤禮碑》。
- 虞世南。
圖5 7種風格字型的例子
表3 訓練和測試樣本的統計資料
第3、4種風格是同一古代書法家歐陽詢在其早年和晚年創作的。因為書法家風格的變化,我們把它們當作兩種不同的風格,這也是中國書法界的經驗法則。第5和第6種也屬於同一作家書寫但不同的風格。
每種風格都有幾千張圖片,但同一風格下的一些圖片可能是同一個字。我們總共收集了47552張圖片,涵蓋了6548個不同的字元,但只有5560個字元在所有7種風格中都可用。表3顯示了它們的統計資料。我們從5560個常用字元中隨機抽取1000個字元作為測試字符集。並有7737張測試影像。我們使用剩餘的39815張影像來訓練我們的模型。
影像大小取決於字元的形狀,長邊是固定的140畫素。我們保持它的長寬比,並透過Lanczos重取樣將長邊放大到256畫素。我們將放大後的影像放在中心,並填充兩個短邊,生成一個256×256畫素的正方形影像,作為我們的真實影像y。
影像顏色深度為1位單色。在重新取樣時,不改變深度,將這些單色影像線性地轉換為取值範圍在-1到1之間的張量。使用宋體來渲染輸入的影像x,因為它涵蓋了所有漢字,而且被zi2zi所使用。
Results
表4 效能比較 one-hot表示把zi2zi的標籤嵌入向量替換為了簡單的one-hot向量(這樣也行?)
圖6 消融研究。
表5 與zi2zi的對比。
圖7 zi2zi的失敗樣例
表6 使用者主觀研究
圖8 與AEGG的對比。AEGG的圖片直接拿它們原論文的,因此比例不同
Conclusion
總結完寫了一堆問題,確實啟發了不少後來的工作?
Critique
在zi2zi上改進似乎是當時的熱潮,圖片解析度透過上取樣達到了256,不是會影響生成嗎?事實上放大看gt都有鋸齒了
呃呃,實驗怎麼跟baseline比還有來有回,AEGG也不重跑
貢獻就開源跟部件編碼器,相當於給zi2zi加了個部件序列就發論文了,不過實驗描述得非常詳細,似乎真的想讓別人復現