にほんごのれんしゅう

日本語として伝えるための訓練を兼ねたテクログ

StackGANによるフォントの錬金術

StackGANによるフォントの錬金術

f:id:catindog:20170205152727p:plain

図1. 中央が錬金したフォント

近況

f:id:catindog:20170205152954j:plain

図2. 真理の一撃を放とうとするカリオストロさん(公式絵より)
 グランブルーファンタジーというスマホのゲームでカリオストロというキャラクターがいます。もとは天才錬金術師で、自己の性別を錬金術で男から女に変えた天才です。そんな彼(彼女?)が真理の一撃だー!っていうんですよ、かっこよいですね。
 あまりにも今までの不可能を打開し続けるDeep Learning。自分で言うと甚だ科学としての機械学習が零落しそうですが、まだDeep Learningは体系化された知恵の集合体としての正しい科学の段階にはたどり着いていないように思います。どちらかと言うと錬金術に近い技かも。
 Deep Learningは、いつかまだ見ぬ真理へと人類を導いてくれるんでしょうか。各人、期待しております。

モチベーション

  • 日本語のフォントを作成する際に、デザイナは膨大な時間的・肉体的・精神的な労力を払うことになる[1]
  • フォントのデザインを見ているとある一定の法則があることがわかる。それは、大まかなフォントのデザインの土台があってデザインを装飾するように、なんらかの固有な表現が付加されている
  • これはディープラーニングで情報を付加する特徴を覚えさせ、変換させるのに適した好例である
  • 単純な情報付加では、pix2pixでも可能であろうが、StackGANと呼ばれるGANを複数回重ねることでより高度に近づけたい画像に近づける手法を適応する[2]

先行研究

StackGANについて

 StackGANは少ない情報からよりもとの絵に近い情報を復号するのに適しているネットワークである。
 もとの論文ではSkip Thought Vectorsを用いて文章からの画像の生成であるが、Skip Thought Vectorsの代わりに、画像のベクトルを入力する。条件を同じようにするため、DCGANで用いられるノイズも付与する。
 ネットワーク構成図を書き直した。
f:id:catindog:20170205153835p:plain

図3. 今回用いたネットワーク

実験手法

  • 論文を読んでChainerで実装した
  • 何度か実験したところ、二段目のGANにて勾配消失を起こしてしまうのか、一段目のGANの出力結果に強く引っ張られてしまったので、学習レートを大幅に引き下げるという処理を入れた。本当は一定のiterationが回るまで、学習を遅延させたいのだが、今のところ実装に至っていない。
  • フォントを2種類要した。
  • 書道のようなフォントである青柳隷書フォント、windowsで標準でインストールされているHGP創英角ポップ体の2つを検証対象とした
  • フォントの選択条件は、夏目漱石の「坊っちゃん」、「こゝろ」、「吾輩は猫である」で使用されている3313語を用いた。そのうち、800語を別途検証用データとして学習用データとは区別した。[3]
  • 各種パラメータは、一回目のGANはFacadeと同様で、二階目のGANはそれを1/5にしたものである。詳細なパラメータサーチは別途、本格的な生成タスクで行うことにした。

f:id:catindog:20170205154127p:plain

図4. 青柳隷書フォント、人手で書いたデータをスキャンしたらしい


f:id:catindog:20170205154228p:plain

図5. Windowsに入っているあのダサいフォント

結果

  • Inputが入力ベクトル作成に用いた画像
  • Predictが出力結果
  • Ground Truthが人間の職人が作成したフォントである

f:id:catindog:20170205154409p:plain

図6. 青柳隷書フォント学習による出力結果


f:id:catindog:20170205154501p:plain

図7. HGP創英角ポップフォント学習による出力結果

考察

  • Ground Truthに情報量的に近い習字の字ではないけれど、習字っぽい字が表現可能なのはGAN故にだろう。入出力の誤差の最小化が目的でないので、人間が書いた文字は潜在的に大きなノイズや誤差を含む。その点を吸収してくれているように思う。
  • もともとは同人フォント作家の作成コストを下げられるような仕組みがあればと思って、コーディングを開始したものである。今現在、開発が止まってしまっている東亜重工フォントの足りてないフォントの穴埋めや、人間がフォントを作成する際の下書きに用いられたら良いと思う。[3]

Future Work

  • StackGANのパラメータを調整して、下書きから漫画を一気に作成するなどしたい(データない)
  • 音声の問題にも適応できる気がしてて、周波数成分をルールにしたがって上げたり下げたりする作業を、GANにやらせればより人間っぽくなるっしょって思惑があって、男性でも女性のキャラクタを演じたり、その逆ができるように感じる。
  • パラメータサーチや、ネットワーク構造の問題だけでなく、今回は周りの学習の安定度に応じて学習を開始してほしいというニーズが発生したので、その辺を実装していきたい
  • 一応ConditionalStackGANに簡単にする方法があって、その方法を図示すると、こんなふうになる(と思う)

f:id:catindog:20170205155408p:plain

図8. Conditional StackGAN

参考文献

[1] 文字数14000字! 手書き毛筆フォントができるまで http://portal.nifty.com/kiji/151118195086_1.htm
[2] StackGAN: Text to Photo-realistic Image Synthesis
with Stacked Generative Adversarial Networks https://arxiv.org/pdf/1612.03242v1.pdf
[3] 「シドニアの騎士」に出てくるフォントを再現する「東亜重工電子書体化計画」が公開中止に http://gigazine.net/news/20140702-toa-heavy-industries-font/

謝辞

 インフルエンザか風邪だかわからないが熱が下がらない。隣の席の上司がインフルで休んでいるので、多分インフルなんだろう。つらい。
 そんな中、今週は業務では主にAWSとAnsibleとの戦いに時間を割いていたのだが、やはり機械学習やってる方が気が楽...(エンジニアに向いてない疑惑)
進捗なしかとおもいきや、やっぱり音楽とMMDのちからでなんとか乗り切った。MMDでは艦これで山風のモデルが多数のアーティストによって頻繁なアップグレードが行われている。非常にクオリティが高く、尊い
作品中でも、山風は江風と海風と一緒にいじられることが多いのだが、この三人を組み合わせるとヤバい。それぞれの方向性が異なる性格のベクトルが見事に調和していい感じにまとまっている。興味のある人はYouTubeで「山風 MMD」で検索しよう。
MMD職人に感謝である、GPL v3ライセンスとかにしたほうがいいのではと思う。
f:id:catindog:20170205155704p:plain

この三人組すごい好き