Re:ゼロから始めるML生活

ミスよりグズを嫌え

【論文メモ:AttnGAN】AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks

論文

https://arxiv.org/abs/1711.10485

著者

Tao Xu, Pengchuan Zhang, Qiuyuan Huang, Han Zhang, Zhe Gan, Xiaolei Huang, Xiaodong He
Lehigh University, Microsoft Research, Rutgers University, Duke University

背景

自然言語から画像を自動生成することは、多くの芸術や設計におけるコンピュータ支援の分野での大きな課題となっている。 そんな中、近年ではtext-to-imageにGANを用いた生成モデルが活発に研究されている。 text-to-imageには文章全体をベクトルに変換し、そのベクトルを使用して画像を生成するものが一般的である。

このような手法では表現力豊かな画像を得ることができる一方で、入力となる文全体のベクトルからは単語レベルの細かい粒度の情報が抜け落ち、詳細な画像の生成は未だ難しいのが現状である。 この問題はCOCOデータセットのような、複雑なシーンを取り扱うときには顕著に現れてしまう。

目的とアプローチ

目的

細部までの詳細な表現力を持つtext-to-image生成モデルの実現

アプローチ

Attentional Generative Adversarial Network (AttnGAN)

  • 文全体を使用したセンテンスベクトルと単語のワードベクトルの使用することで、細部まで文の意味を反映させるGenerator
  • 入力した文と生成された画像との類似度を文レベル・単語レベルの両方の粒度を組み合わせて評価

提案手法

AttnGAN

AttnGANの概念図を下記に示す。

f:id:nogawanogawa:20181031083220j:plain

AttnGANの概念図における表記について下記に示す。

変数 役割
G Generator
F^{ca} \overline{e}から状態への変換
h 隠れ層の状態
x Generatorによって出力された画像
z ノイズ
\overline{e} センテンスベクトル
e 単語ベクトル
F^{ca}, F^{attn}_i, F_i , G_i ニューラルネットワーク

AttnGANと特徴は下記の2つである。

  • Attentional generative network
  • Deep attentional multimodal similarity model

これら2つによって、文の意味を細部まで反映した高精細な画像の生成を可能にする。

Attentional Generative Network

Attention Model

既存のText-to-ImageのGANでは、文全体を1つのベクトルに変換して、使用している。 提案手法であるAttention Modelでは、画像中の細かく区分けされた領域のうち特定の単語と最も関連性の強い領域を描画する。

隠れ層の状態hと出力画像xの関係は下記の通りになる。

h_0 =F_0(z,F^{ca}(\overline{e}))

h_i = F_i(h_{i-1},F^{attn}_{i-1}(e, h_{I-1}))

\hat{x}_i = G_i(h_i)

文言認識モデルのFの挙動の概念図を下記に示す。

f:id:nogawanogawa:20181031152703j:plain:w600

単語ベクトルは意味空間上に展開され、その後隠れ層の状態hに基づいて小領域ごとの画像が生成される。 hの各列は小領域ごとの特徴ベクトルとなっており、世代ごとの小領域の小領域の特徴ベクトルは下記のようにして算出される。

c_j=\sum^{T-1}_{I=0}\beta_{j,i}e'_{i}

ここで

\beta_{j,i}=\frac{exp(s'_{j,i})}{\sum^{T-1}_{I=0}exp(s'_{j,i})}

s'_{j,i}=h^{T}_{j}e'_{i}

となっている。 \beta_{j,i}はi番目の単語がj番目の小領域に与える影響の重みを示している。 これらによって得られたc_iを使用して、F^{attn}(e,h)を下記のように算出し、次のFの入力の一部として扱う。

F^{attn}(e, h)= (c_0,c_1,...,c_{N-1})

Loss

単語・文等のマルチレベルでの精細な画像生成のため、全体としての目的関数を下記のように定義する。

\mathcal{L} = \mathcal{L}_G + \lambda \mathcal{L}_{DAMSM}

ここで\lambdaはハイパーパラメータである。 第一項はGANそのもののLossを表しており、下記で定義される。

\mathcal{L}_G = \sum^{m-1}_{I=0}\mathcal{L}_{G_i}

次にGenerator、DiscriminatorそれぞれのLossについて定義する。

GeneratorとDiscriminatorに関するLossを下記に示す。

f:id:nogawanogawa:20181101122708j:plain

f:id:nogawanogawa:20181101122722j:plain

ここで、unconditional lossは画像のreal/fakeに関するLoss、conditional lossは文とあっているかどうかに関するLossとなっている。

Deep Attentional Multimodal Similarity Model (DAMSM)

次に、 \mathcal{L}_{DAMSM}について考える。 DAMSMでは、画像中の小領域と単語の意味とを紐付けるために2つニューラルネットワークを使用し、画像と言葉としての意味の類似度を測定することで損失関数を算出する。 概要を示した図を下記に示す。

f:id:nogawanogawa:20181031152714j:plain:w500

Text Encoder

テキストに対してはBi-Directional LSTMを使用することで、単語レベルと文レベルのベクトルを生成する。

Bi-Directional LSTMでは短期記憶を表すhidden statesは2つあり、それぞれをつなぎ合わせることで単語の意味を表現する。 また、最後のhidden statesがつなぎ合わされることで、文全体の意味を表すセンテンスベクトルを表現する。

Image Encoder

画像に対してはCNNによって、画像の意味を抽出したベクトルを生成する。 中間層では局所的な特徴を抽出し、あとの層では全体の特徴を抽出する。

今回のImage Encoderは、ImageNetで事前学習済みのInception-v3 modelを使用する。 初めに入力画像を299×299のサイズに変換し、Inception-v3の“mixed 6e" layerから局所特徴行列を抽出する。 このとき、各カラムは画像の小領域の特徴ベクトルから構成されている。 特徴ベクトルが768次元、小領域が289個に分けられ合計768×289の行列になる。

文全体の特徴行列は、Inception-v3のaverage pooling layerから局所特徴行列を抽出する。 最後に、下記の式によって、共通の意味空間上に変換する。

v = Wf

\overline{v} = \overline{W}\overline{f}

Matching score

文と生成画像の適合性を評価するために、Matching scoreを算出する。

s = e^{T}v

このsは、T×289の行列になり、s_{i, j}はi番目の単語とj番目の領域の類似度を表す。 この行列を下記の式によって正規化する。

\overline{s_{i, j}} = \frac{exp(s_{i, j})}{\sum^{T-1}_{k=0}exp(s_{k, j})}

小領域に対する意味を表すcは下記で計算される。

c_i = \sum^{288}_{j=0}\alpha_{j}v_{j}

ここで

\alpha_{j} = \frac{\gamma_1 \overline{s}_{i,j}}{ \sum^{288}_{k=0}\gamma_1 \overline{s}_{k,j}}

最後に、

R(Q, D) = log(\sum^{T-1}_{i=1}exp(\gamma_2 R(c_i, e_i)))^{\frac{1}{\gamma_2}}

で画像QとテキストDのMatching scoreを算出する。

DAMSM loss

\mathcal{L}_{DAMSM}は下記の式で算出される。

\mathcal{L}_{DAMSM} = \mathcal{L}^{w}_{1} + \mathcal{L}^{w}_{2} + \mathcal{L}^{s}_{1} + \mathcal{L}^{s}_{2}

ここで、単語レベルのLossは

\mathcal{L}^{w}_{1} = - \sum^{M}_{I=1}log P(D_i|Q_i)

\mathcal{L}^{w}_{2} = - \sum^{M}_{I=1}log P(Q_i|D_i)

で表され、

P(D_i|Q_i) = \frac{exp(\gamma_3 R(Q_i, D_i))}{\sum^{M}_{j=1}exp(\gamma_3 R(Q_i, D_i))}

で表現される。 同様に文レベルのLossについても

R(Q, D) = \overline{v}^T \overline{e} / (||v||||e||)

とすることで算出可能である。

評価

評価条件

データセット

  • CUB
  • COCO

評価指標

  • Inception score(定量的指標)
  • R-precision(再現率)

内部評価

DAMSM loss

DAMSM Lossを使用する妥当性について検証する。

ハイパーパラメータ\lambdaを変化させたときの提案手法によるinception scoreとR-precisionに関して下記に示す。

f:id:nogawanogawa:20181101195710j:plain

f:id:nogawanogawa:20181101195727j:plain:w600

グラフの上段がCUB、下段がCOCOでの結果を表す。

CUBについては。\lambdaを0.1→5に変化させた時、inception scoreについては4.19 → 4.35、R-precisionについては16.55% → 58.65% へと向上している。 COCOについては、inception score・R-precisionともに向上している。 この結果から、DAMSM lossが細部まで正しく描画するGeneratorに対して有効であることがわかる。

Attentional generative network

階層的Generatorに対してAttention modelが有効であることを評価する。 前述のinception scoreとR-precisionの図より、階層的にattention modelを導入したほうが高いInception scoreにつながることがわかる。

さらに中間生成物について考察する。中間生成物を下記に示す。

f:id:nogawanogawa:20181101195740j:plain

一番上段がgeneratorが単純に出力したもので、文単位のベクトルを使用して作成されたものである。 単語レベルのベクトルを使用した場合が右で、徐々に精細な画像になっていることがわかる。

また、小領域について着目すると、単語の意味と該当する箇所が紐付けられていることも確認できる。(下段、スポットライト)

そのため、細部の小領域に焦点を絞って画像を生成することが可能になり、より文意を反映した画像生成が可能になっている。

Generalizationability

初見のテキストからの画像生成について評価する。 生成した画像について、下記に示す。

f:id:nogawanogawa:20181101195912j:plain

生成された画像から、かすかな意味の違いを正しく反映できていることがわかる。

さらに、現実世界ではめったに起こりえないようなシチュエーションについても正しく反映できているように見受けられる。

f:id:nogawanogawa:20181101195921j:plain

一方で、現実的でない画像も生成されている。 下の図では、2つの頭をもつ鳥の画像が生成されてしまっている。

f:id:nogawanogawa:20181101195931j:plain

先行研究との比較

先行研究とCUBとCOCOにおけるInception scoreの値について下記に示す。

f:id:nogawanogawa:20181101195956j:plain

CUBにおいては、先行研究では3.82だったInception scoreが、提案手法によって4.36まで向上する事がわかる。 さらにCOCOにおいては、先行研究が9.58だったものが、提案手法によって25.89まで、170%以上の向上が見られた。

結論

本論文では細かい粒度でのText-to-Imageの生成モデルとしてAttnGANを提案した。AttnGANでは、attentional generative networkによってマルチステージでの高解像度の画像生成を可能にし、DAMSMによって画像とテキストの類似度を判定した。

結果として、Inception socre はCUBで14.14%、COCOデータセットで170.25%を記録し、複雑な画像生成において本手法が非常に有効な手法であることが判明した。

疑問

ネットワーク全体としての目的関数がこう書いてあるのですが、

\mathcal{L}_G = \sum^{m-1}_{I=0}\mathcal{L}_{G_i}

これだとDiscriminatorを全く考慮しない気がしてます。。。 実はこうなのでは?とか思ったりして。。。

\mathcal{L}_G = \sum^{m-1}_{I=0}\mathcal{L}_{G_i} + \mathcal{L}_{D_i}

まあ、現実問題としてはGeneratorとDiscriminatorのLossの式が正しければ実装は変わんないんで別に良いんですけど。

感想

ポイントは入力するテキストの粒度を変えて複数回入力する点ですかね。 人間の画家もそうですが、まずは全体をぼんやりイメージして、そこに対して細部を仕上げていくと、細部までうまく描かれた写実的画像の生成モデルが可能なようですね。