いちろう’s blog

すーぱーえんじにあ

【論文】Attribute2Font: Creating Fonts You Want From Attributes

基本情報

論文へのリンクは以下の通り。

arxiv.org

ユーザが指定した、任意の属性を持つフォントを生成できるようにしたもの。今まで不確定要素が多かったGANの生成を、属性情報(Attribute)をコントロールしながら任意の画像を生成できるようになるのは、今後GANの可能性が広がりそうな話ではあるので、読んでみました。

どんなもの?

新しいフォントの作成は、専門のデザイナーの知識に依存する部分が多く、ユーザが指定した任意の属性を持つフォントを自動的に生成することは難しい。そこでAttribute2Fontでは、属性情報とフォントのデザインを同時に学習することで、ユーザが指定した任意の属性のデザインを持つフォントを生成可能となった。
また、Attribute2FontのキーアイデアであるAttribute Attention Modelは、フォント生成以外のタスクでも利用可能な汎用性を持つことが確認できた。

先行研究と比べてどこが凄い?

関連研究

フォント生成のアプローチには、ベクターフォントの生成(Vectot Font Generation)とグリフ画像の生成(Glyph Image Systhesis)の2種類がある。本研究はグリフ画像の生成に分類される。

ベクターフォントの生成(Vectot Font Generation)

フォントのベクターデータを生成することを目的として学習を進めるもの。 過去に様々な方法が用いられているが、生成されたフォントと実際のフォントの、人間が見た時の視覚的な矛盾が起きやすいという問題点がある。

グリフ画像の生成(Glyph Image Systhesis)

フォントの変換を画像-to-画像の変換問題と捉え、学習を行うもの。以下のような研究がある。

上記の手法は全てフォントAからフォントB、C、Dへのマッピングを学習し、入力したフォントの特徴を他の文字に適応する手法である。しかし、これらの手法のマッピング関数は抽象的なものであり、ユーザが任意の特徴を持つフォントへのマッピングを指定してフォントを生成することができない。

本研究では、ユーザがフォントのスタイル変換のマッピングを自由に操作できるようにする点で優位性がある。

技術や手法のキモはどこ?

以下の2つの手法を導入することで、複数のタスクで既存の手法を超える性能を発揮した。

  1. Attribute Attention Model
  2. 教師あり学習のスキームの導入

f:id:sey323:20210212001315p:plain
Attribute2Fontのネットワークの全体像

1. Attribute Attention Model

Attribute Attention Modelは、入力画像と正解画像の属性値の差分を学習するものである。構成は以下の通り。

f:id:sey323:20210212001359p:plain
Attribute Attention Modelの構造

属性値 $N_{a}$ は属性の種類$N_e$ をその属性の値とし、属性値を以下の式を用いて変換する。 入力画像の属性値を$a$、正解画像の属性値を$b$とすると、以下の式で表現される。

$$ a*(a, b) = F_{CA}(\gamma(a,b)) $$

$\gamma(a,b)$ は2つの属性値の差分を計算するものである。 $F_{CA}$は属性値を計算するもので、Attention Blockを利用している。Attention Blockはチャンネル間の圧縮を用いた2つの畳み込みを利用するため、モデルがチャンネル間の関係性を把握するのに有効と考えられている。
具体的には複数のフォントを同時に学習する際に、異なるフォントの属性間の相関を学習することができるようになり、結果として生成により重要な属性にのみ注目できることが期待される。

2. 半教師あり学習のスキームの導入

学習データのうち、ほとんどのフォントのデータセットには属性値のラベルがついていない。そこで学習のはじめには、ラベルがついていないデータに擬似的なラベルを与え、学習の最中に擬似ラベルを調整するように学習を進めている。

$N_{sf}$はラベル付きデータ、$N_{uf}$はラベルなしデータを示す。その場合、source fontでラベル付きデータが選択される確率$p$は $p=\frac{N_{sf}}{N_{sf}+N_{uf}}$ であり、target fontがラベル付きデータが選ばれる確率も$p=\frac{N_{sf}}{N_{sf}+N_{uf}}$となる。一般的にデータセットの比率は、ラベル付きデータ<ラベルなしデータであることが多く、sourceとtargetでラベル付きデータが選ばれる確率は$p<0.5$となる。 しかし本研究では、target fontでラベル付きデータが選ばれる確率$p$を$p=0.5$とするように設定し、target fontでラベル付きデータが選ばれる確率を上げた(下図参照)。

f:id:sey323:20210212014412p:plain
学習の際の教師ありデータと教師なしデータの選択

target fontのみラベル付きデータの比率を$p=0.5$にする理由として、source fontよりtarget fontの方がPixelLossやCXLossの計算で損失関数に大きな影響を与えるため、target fontでより強力な教師ありデータを選択する確率をあげるためである。

3. その他

損失関数

損失関数は以下の5つを利用している。

Ganの損失関数

一般的なGanの損失関数。

PixelLoss

生成された画像と正解画像の1ピクセル毎の画素値の誤差を計算する。

$$ l_{pixel} = ||\hat{x}(b,k) - x(b,k)|| $$

Charactoer Regognition Loss

生成された文字が、大文字小文字の52種類のアルファベットのうち、どのアルファベットかを識別する際の損失誤差。$y_c$は正解の文字。

$$ l_{char} = -\log{p(y_c=k|x(a,k))} $$

Attribute Loss

学習の際に、Discriminatorで入力したフォントの属性値を予測する。Attribute Lossは、予測された属性値と正解データの属性値を比較した時の識別誤差により計算される。

$$ l_{attr} = \mbox{smoooth}{L_1}(\hat{a}(\hat{x}(b)-a(b)) $$

$$ \mbox{smoooth}{L_1}(x) = \begin{cases} 0.5x^{2}, & |x| \leq 1 \\ |x|-0.5, & otherwise \end{cases} $$

Contexual Loss(CXLoss)

CXLossは、近年生成系の手法で広く利用されている損失関数である。vgg19のような画像分類を学習したニューラルネットワークを用いて、画像の特徴量(DeepFeature)を抽出し、正解画像と生成された画像のDeepFeatureにより計算される。

$$ l_{CX} = CX(\hat{x}(b,k), x(b,k)) $$

L1Lossのような画像のPixel単位の比較ではなく、DeepFeatureを用いることで、高次元の特徴量ベースでの画像の比較が可能となり、L1Lossの弱さを補完できたと言われている。 以下のリンクにPytorch実装があるので、こちらをも合わせて確認するとわかりやすい。
GitHub - roimehrez/contextualLoss: The Contextual Loss

Visual Style Transfer(VST)

属性情報とスタイル情報を結合し、スタイル特徴を作成するモジュールである。VSTについて以下の2点について検証している。

  • 文字数(m)が少ないとスタイル特徴が抽出できないが、どこまで少なくできるか
  • スタイル特徴を作成する際にResidualBlockを用いたネットワークを利用しているが、何層利用するのが効果的か

フォントの選択

学習に用いたフォントの種類が、モデルの性能に依存することは直感的に理解できる。しかし、実験の結果Attribute2Fontでは、データセットから規則的にばらつくようにデータを選択すれば、どのフォントを選択したかどうかで大きな性能の差は生まれなかった。

f:id:sey323:20210212002637p:plain
選択されたデータセットごとの生成される画像の比較

どうやって有効だと検証した?

以下の5つの評価手法でモデルの評価を行い、各手法と比較を行う。

学習結果

Attribute2Fontによる生成されたフォントの、定性評価の結果を以下に示す。前の章で述べたAttribute2Fontの構成用そのうち、各要素を取り除いているものはw/oが記載されている。

f:id:sey323:20210212003703p:plain

生成された画像を以下に示す。

f:id:sey323:20210212003825p:plain
Attribute2Fontにより生成された画像(再掲)

学習させるフォントの文字数はどれくらい必要か

学習させるフォントの内、各フォントが最低何枚の文字画像が必要かを検証する。$N_{rb}=16$として、mの変更のみで検証する。

f:id:sey323:20210212004033p:plain
学習するフォントの文字数による違い

学習する文字の種類は多ければ多いほど良いが、$m=1$でも品質が大きくおちくことはない。

ネットワークの深さによる検証

ネットワークが深ければ深いほど品質が向上することは知られているが、どこまでネットワークを浅くしても性能が保たれるかを検証する。$m=4$で$N_{rb}$の変更のみで検証する。

152960b3.png

f:id:sey323:20210212013951p:plain
ネットワークの深さによる違い

こちらも多ければ多いほど良さそう。

他の手法と比較

  • 定性評価

    f:id:sey323:20210212005928p:plain
    定性評価による各手法との比較

  • 定量評価

    f:id:sey323:20210212005835p:plain
    定量評価による各手法との比較

文字のかすれや大幅なデザインの違いも起きておらず、全体的のAttrGanの性能が高いことが確認できる。

議論はある?

1. 大文字小文字の形状の違い

形状を大きく制限するEncoder-Decoder構造では、入力する画像と生成する画像の形状の変化を大幅に制限するという特徴がある。そのため、例えばaやgの単語は、大文字と小文字の形状が幾何学的に大きく異なるため、学習データに大文字か小文字の片方しか含まれなかった場合に、含まれなかった方の文字の生成が失敗する可能性が高い。実際に小文字しか学習しておらず、そのフォントのスタイル変換を大文字に適応した場合に、「A」や「G」といった文字に関してはほとんどのフォントで生成に失敗している。

f:id:sey323:20210212005005p:plain
大文字小文字のデザインの違いによる生成の失敗

2. フォントの属性値の正確性

教師データのフォントの属性値は人間により付与されたラベルであり、それが正確にフォントの属性を表現しているとはいえない。例えば斬新なフォントの場合は、定義済みの属性値以外の暗黙的な属性値を持っている可能性が高く、学習の中でフォントの持つ属性値のマッピングを正確に学習することが難しい。

3. AAMを他の手法で試す

AAMは、様々なネットワークに適応可能である汎用性を持っている。そこで、StarGanの人間の顔生成のタスクに適応し、AAMを適応しなかった場合との違いを検証した。

f:id:sey323:20210212004543p:plain
AAMをStarGan

StarGanよりも品質のいい画像を生成できているので、フォント以外にもAAMは様々なタスクに応用できそうな可能性があることが確認できた。

次に読むべき論文は?

比較対象となっているAgisNetやTeTGanの論文読みたいですね。

[1910.04987] Artistic Glyph Image Synthesis via One-Stage Few-Shot Learningarxiv.org

arxiv.org