AI造字經驗分享

這次的分享,純粹是囫圇吞棗式分享,沒有什麼太難的技術在裡面,只要準備好(1)原作者的字型檔,(2)免費的思源黑體,(3)整理原作者字型裡有的字。然後就可以開始做「筆跡」的學習,進階的用法是倒過來做筆跡的鑑定。

在這裡要推薦一部好看的韓劇,剛好就是在做上面這二件事情,劇名是《啟動了》或《Start-Up》(韓語:스타트업),為韓國tvN於2020年10月17日起播出的週末連續劇,劇中對 AI 的使用,還有商業模式與簡報的展示有非常深入且專業的見解,最後一集我沒看,因為我個人比較喜歡男配角。在Netflix 上翻譯是「我的新創時代」。

這次分享,完全不需要寫程式,而且原作者的程式,我也看不懂他在寫什麼,還好,都用作者放上來的範例參數,只帶入我們收集到的字型檔,就完成了。

針對沒有字型檔的情況,也可以手動先收集筆跡圖片,使用手機拍照或掃描手寫字圖片,先把類比轉數位,手動產生訓練所需要的對應用的paired_images ,就可以讓電腦來學習你的筆跡,用AI造字。

分享重點整理

  • 準備訓練所需資料,先把字型變成圖片。
    font2img.py
  • 一張一張分開的圖片檔案,打包成單一個訓練檔案。
    package.py
  • 在 google colab 上訓練
    train.py
  • 推論出原作者未設計過的字
    infer.py

心得

  • 一定要 GPU 或 TPU
    我曾在自己的筆電上執行過,由於沒有顯示卡的 GPU 支援,跑了 24小時,連 1/40 都沒完成,要執行深度學習,請一定需要在有 GPU 的電腦或伺服器上執行,才能事半功倍。我是多創了一些 google 帳號,依序在不同的帳號裡透過 google colab 來做訓練。
  • 要訓練多久?
    有些字型,才訓練了 12 小時,效果就滿好的,一直重覆還有慢慢餵一些自己精選過,想加強訓練的資料之後,效果會再更好,我 fork 出來的專案,有人在 issue 裡問過這一個問題,上一個作者回答說,這個答案很玄,因為連一開始的原作者都沒有一個答案,最後訓練的結果,可能反而效果會更糟,反正有空就丟著給電腦自己去學,總有一個版本效果會好一點。
  • EuphoriaYan/zi2zi-pytorch 與 xuan-li/zi2zi 的差異
    這個問題有點難懂,原作者的回答是:

zi2zi-pytorch網絡和原版有變動的是在net_D部分倒數第二層加了個1 x 1的卷積,我測試了一下帶或不帶這個1 x 1卷積,感覺和原版差距不大;所以我就沿用了這個帶1 x 1卷積的,可以加快速度減小模型大小,您可以嘗試去掉這個1 x 1卷積試試。
還有一個修改點是我們的數據增強方法是基於Font2Font的,和原版不完全一致,您可以查看一下dataset.py里的DatasetFromObj函數,並嘗試修改回原版的數據增強方法。
此外,我們在測試的時候,確實有時候模型會經歷「學習」->「崩潰」->「重新學習」這種情況,所以我們目前工作的時候是先生成一堆sample然後看哪個checkpoint的sample最好。暫時我們沒時間來修復這個問題,生成效果不佳可能和這個問題也有關係,原作者也說了這網絡相當難以訓練(哭)。您可以嘗試在訓練時不只看last_ckpt_sample,也看看別的ckpt的sample,說不定就有哪個ckpt的sample比較好(玄學)

https://github.com/EuphoriaYan/zi2zi-pytorch/issues/3
  • 免費版colab 的限制
    google colab 號稱可以用 12小時,實際上也許 3.5小時,就把 GPU 可以使用的額度用滿了,這時候就把 checkpoint 資料夾裡產生出來的結果,分享給下一個帳號去使用,就可以使用下一個 google 帳號接著做訓練了。參考看看「免費版colab 的限制」:
    https://stackoverflow.max-everyday.com/2021/05/free-colab-resources-limit/
  • 垃圾進,垃圾出
    要拿去訓練的資料,要慎重選擇,這個有另一個講法叫「資料清洗」(Data Cleansing)。我有試過使用 CJK TC(台標體) 的思源黑體,搭配日系的字型,訓練結果大多是很滿意,但由於文字的部件寫法不同,一開始是使用 CJK JP(日本漢字)的思源黑體去推論時,就可能會省下一些後續處理的時間。例如:日系的草部都是相連的,所以要推論出分開的草部的寫法,就不太可能。
  • checkpoint 中繼檔案的取得
    在 google colab 上訓練的結果,重點就是要取得訓練結果的 checkpoint 檔案,如果資料量有7000筆,使用 batch_size=32 / checkpoint_steps=1000 這2個參數下去訓練,大約每1個小時,可以取得一個 checkpoint 的中續檔案。如果調高 batch_size 為 2倍大,記得降低 checkpoint 的 step 數量為 1/2 ,不然就是 2個小時,才能拿到一個 checkpoint, 萬一在 2個小時內就把 google colab 的 GUP 的額度用完,那就是今天應該是白做工了,會完全無法拿到任何可以產出的檔案,因為只用 CPU 超級的慢,進度幾乎動不了。這時就是改用其他google 帳號,重做一次訓練,並調整參數。心得,這些參數應該都不太需要調整,用預設值就好了。
  • 重覆訓練少量資料的影響
    比如說,有幾個部件在 infer 的結果看起來因為寫法差異太大,所以初期效果很差,會有很明顯的某一筆畫中斷,中間有大面積的白色,剛好上半部是像思源,下半部是要學習的筆跡,如果只取出要加強的學習的某些圖片,重覆地學習,的確就會愈來愈像要學習的筆跡,相對其他沒有去練習的部件,就會明顯被弱化,infer 出來的就會變糊糊的。這個似乎沒有辦法避免,只好再做幾次完整(所有部件)的訓練,在接著使用完整的部件再去訓練個60個epoch,結果剛才加強訓練的成果似乎被稀釋掉,又打回加強訓練前的模樣,有可能是受到其他訓練資料的交互影響,有訓練還是有差別,有些其他部件的小細節有增加的更有連貫性,外型較清晰。
    二個在學習的字跡差異太大,會「大量」增加學習的負擔,所以最好可以選擇在「寫法」或「筆觸」都相近的字體來學習,效率上會好很多,不一定要用思源黑體或思源宋體去學,只是使用思源家族,可以 infer 出來的字集會比較完整。在「選擇要學習的2個字跡」有點難取捨,最佳的情況就是要學習的字跡超級的工整,這是最佳、最省時間的情況,但似乎很難遇到。
  • learning rate decay
    要設多少才開始 decay, decay 的影響是什麼?預設值是 20, 也可以挑戰一直訓練,不要產生 decay, 但這樣就會訓練的較慢,適當的 decay 效果滿好的,尤其是從 1.0 到 0.5, 初期 decay 訓練出來的結果會有大量的波紋與大量的雜訊,但再持續訓練後,線條就會平滑許多,有些多的雜點明顯少掉很多。
    大約訓練到第 30小時之後,每次decay 會很明顯會破壞畫質,會產生大量的雜點或分叉。
左邊是第21 checkpoint, 右邊是第22 checkpoint。
  • 中文/英文/符號要一起訓練嗎?
    如果筆跡的規則簡單,一起訓練滿省事,但是一般的情況下,建議分開訓練會好一些,變數較少,問題會較少。
  • 「一對多」與「多對一」的問題
    這個比較常出現的手寫字型,如果使用思源黑體,比如女部,在工整的思源黑體或宋體,女出現的位置都相同情況下,拿來訓導的資料卻都是不一致的寫法,如此,預測難度變的極高,產生的結果會偏向平均值,且較模糊。
    有曾經遇到一個字型,規則明明就很簡單,應該很容易可以訓練出來,例如「斥」部件,很奇怪,餵了很多「斤」與「斥」部件的資料,訓練了6小時,某一些部件就是訓練不出來,筆畫會中斷,推測應該是先使用思源黑體CJK JP去學習,但對「點」的寫法遇到不一致的情況,然後再改用思源黑體CJK TC去推論,CJK JP與TC 剛好在 刃、斥、凡、丸系列的寫法不剛,造成AI在訓練初期的障礙。
  • 訓練出來的結果比原作者對齊位置更準確,規則更一致
    有些成功訓練出來的字,會比原作者的規則更明確,也可能是因為AI學習到的統計值偏向平均值,所以套用出來的規則沒辦法很多個,以下圖來說,黑色是原作者,套用圓角的時間點很隨意,有時是圓角,有時是直角,AI訓練出來是紅字部份,幾乎都是套出圓角風格。
    另外就是對齊、中宮緊與鬆的配置比例,AI訓練出來結果常常優於對空間感較遲鈍的我們一般人。

Youtube 影片

AI造字經驗分享
https://youtu.be/-2V5H_4kSg4


深度學習崛起,企業擁抱AI

科技大廠們,紛紛押寶AI,也帶動一般企業投資AI,但企業要如何運用科技,促成商業發展?企業在使用AI 要來解決什麼問題?要使用什麼演算法?要套用那一個模型?會遇到什麼資安或相關法規。這些問題,我都沒有答案,但google 一下,似乎很多文章都有回答這類問題。

相關法規最近的新聞報導:麥當勞被指控違反伊利諾伊州的BIPA( Biometric Information Privacy Act,生物識別資訊隱私法),在使用語音識別技術接受訂單、收集聲紋資訊之前,沒有經過他的同意,也未告知這些資訊的處理方式、儲存時間等內容。

反正,AI 是趨勢,有空時多接觸看看。也許,有一天用的到,而且萬一將來真的要去學的話,會比較好理解。


相關文章

苦累蛙圓體 Kurewa Gothic
https://max-everyday.com/2021/06/kurewa-gothic/

github – zi2zi-pytorch
https://github.com/max32002/zi2zi-pytorch

學習字體的筆記
https://codereview.max-everyday.com/font-readme/

Facebook網友回應

您可能也會感興趣的文章...

如何使用iMovie製作移動文字特效

電腦相關應用

iMovie 是蘋果 iOS 系統下載的免費手機 APP,以及蘋果電腦內建的影片剪輯軟體。iMovie 操作方 […]

Read More

自己設計問卷

生活小事

自從科技和網路發達後,古時候的紙本問卷現在也電子化了。現在台灣常見的2個問卷系統是Google表單和Surve […]

Read More

獅尾蝙蝠圓體:思源黑體筆觸長耳朵和拔腳改造免費商用

電腦相關應用

獅尾蝙蝠圓體基於思源黑體筆觸長耳朵和拔腳改造,更加簡明現代化的字體。支援简体中文、繁體中文、韓文與日文;歡迎大 […]

Read More

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *