テキストから画像を生成するGANまとめ

この記事は,テキストから画像を生成するGANについて横断的にまとめることを目指しました.

"text-to-image"と呼ばれるタスクであり,テキスト(キャプション)を条件として,そのテキストにあう画像を生成することを目指します.

有名な研究では,StackGANがあります.

f:id:akmtn:20180325155750p:plain

 

 

 

以下目次です.

 

References

[1] GAN-INT-CLS: Generative Adversarial Text to Image Synthesis, ICML 2016 (link)

[2] GAWWN: Learning What and Where to Draw, NIPS 2016 (link)

[3] StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks, ICCV 2017 (link)

[4] TAC-GAN: Text Conditioned Auxiliary Classifier Generative Adversarial Network, arXiv 2017 (link)

[5] StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks, arXiv 2017 (link)

[6] AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks, CVPR 2018 (link)

[7] FusedGAN: Semi-supervised FusedGAN for Conditional Image Generation, arXiv 2018 (link)

[8] HDGAN: Photographic Text-to-Image Synthesis with a Hierarchically-nested Adversarial Network, arXiv 2018 (link)

 

 

 

なぜテキストから画像を生成するのか?

[6]には,次のような応用先が挙げられています.

 ・アート生成

 ・コンピュータ補助でのデザイン

 ・マルチモーダル学習の発展

 ・ビジョンと言語の関連づけ

 

さらに,ITmedia記事ではさらに具体的に,

 ・音声で写真修正

 ・脚本からアニメ映画の生成

 

なども挙げられています.

 

f:id:akmtn:20180325154051p:plain

 

 

 

どういう生成モデルが優れているのか?

"text-to-image"のタスクに限定した場合です.どのような画像が生成できるのが望ましいかは,[7]などそれぞれの論文中に記述されていますが,それらの性質をまとめると

 

 ・fidelity:キャプションに忠実な画像が生成できる 

 ・diversity:多様な画像を生成できる

 ・discriminable:生成画像を(人が)識別できる

 ・high resolution:高解像で生成できる

 ・realistic:自然画像に近い生成ができる

 ・contollable:どのような画像が生成されるかコントロールできる

 

となるでしょう.

discriminableとhigh resolutionが合わさってrealisticと言えるかもしれません.GANの生成画像の評価方法が確立されていないように,何がリアルか,何が自然かは曖昧なままです.

上記の性質全てを兼ね備えた素晴らしいモデルはまだ提案されていません.各手法それぞれがいくつかの性質を達成しており,論文中では達成した性質のみこのタスクで必要な性質なんだぞと言った顔をしています.

 

 

 

このタスクを困難にしている要因は?

テキスト(キャプション)から画像を生成するタスクを難しくしている点についてまとめると,

 

 ・自然画像の高次元空間

 ・テキスト空間と画像空間の違い

 ・データの用意

 

となるでしょう.

 それぞれ順を追って説明します.

 

 

自然画像の高次元空間

GANを扱うと必ずといって出てくる話ですが,自然画像はピクセル空間という高次元の空間のある一部分にのみ存在しています(多様体の話).なので,ランダムにピクセルを選んで物体が映ったような画像を生成するのは限りなく無理です.サイズが256x256でRGBの画像だと,0~255をとる256*256*3次元の空間から意味あるピクセルの組み合わせを引き当てることになります.

このような問題がある中で,GANによって高次元の分布をモデル化することができるようになり,よりシャープでリアルな画像が作られるようになりました.しかしながら,生成したい解像度が上がるにつれさらに高次元になるため,さらなる工夫が必要になります.

その工夫が,条件も入力するということや,損失関数,ダイバージェンスの工夫,さらには,生成を2段階にしたり,層をprogressiveに増やしていくことでした.

"text-to-image"のタスクはGAN(特にConditional GAN)によって大きく前進しました. 

もちろんGANを利用することによって,訓練の不安定性の問題も付随してきます.

 

 

テキスト空間と画像空間の違い

言葉と画像を同時に扱うという multi-modalなタスクになるため,textの特徴とimageの特徴をうまく扱わなければなりません.

写真に映っているものを,文章を使って完璧に表現することは人でもできません.テキストに忠実に画像を生成できるとしても背景に何が映っているか,より細部はどうなっているかなどがテキストに含まれていない場合,生成される画像に制約がかからず,ぐちゃぐちゃになってしまうかもしれません.

現在では,テキストで指定できない部分は,(例えば背景やスタイル様々な要素をまとめて)ノイズベクトルに担当させ,画像を生成させることが行われています.

 

 

データの用意

キャプションつきデータを大量に用意することが難しいということです.

少ないデータで学習を行う工夫がされています.

テキストの埋め込み空間は高次元であるので,それに対してデータ数が少ないと,Generatorが非連続の多様体を学習してしまうという問題があります.そこで[3]では,学習する多様体を滑らかにし,過学習を避ける工夫(Conditioning Augumentation)が取り入れられています.

また,[7]では,unsupervisedで学習できるネットワークと,supervisedで学習するネットワークの2つに分離することで,大量に存在するキャプションを持たない画像でunsupervisedのネットワークを学習し,結果としてsupervised側のネットワークの向上に作用するように工夫しています.このように正解ラベルを持たない画像も使えるところで学習に利用するという方法は,線画化の研究でも見られる注目すべき方法だと思います.

 

 

 

 

 

以下では,それぞれの手法について整理していきたいと思います.

 

text-to-image synthesisの研究の流れは? 

まず,text-to-imageのタスクにGANを用いた研究の流れについて,[8]のRelated Workを参考にして説明します.

GAN-INT_CLS [1]は,text-to-imageのタスクにGANを利用し,64x64の画像を生成できた最初の手法でした.この手法ではimage-text matching aware adversarial traingという新しい戦略も提案しました.GAWWN [2]は text-to-image synthesisのタスクで,何のコンテンツがどの位置にあるかを指定することのできるネットワークを提案しました.StackGAN [3]は256x256の圧倒的な画像を生成できる2ステージ訓練を提案しました.TAC-GAN [4]は text-to-image用GANの訓練をアシストするためにauxiliary classifiersを用いました.StackGAN++ [5]はStackGANの発展形としてStackGAN-v2と呼ばれ,tree-like ネットワークを提案しました.AttnGAN [6]はアテンションドリブンな方法がより細部を生成できることを示しました.FusedGAN [7]は2ステージ訓練をend-to-endで学習できるように1ステージに溶け込ませた(fused)手法を提案しました.そして,HDGAN [8]はこれまでにないネットワーク構造(hierarchical-nested)で高解像画像をend-to-endの訓練で生成できることを示しました.

 

 

 

 

どういう画像を生成するか?

各手法でどのような結果が得られているか,どのような強みがあるか見ていきましょう.

 

・GAN-INT-CLS

text-to-imageでGANを利用した初めての手法.画像サイズは64x64でした.

f:id:akmtn:20180325160024p:plain

 

 

・GAWWN

バウンディングボックスやキーポイントを利用して,どこに何があるかを指定できます.追加の結果では,バウンディングボックスを縦長にすることで,鳥も縦長になることが示されたりなどしていました.生成される画像をコントロールできること(controllable)が売りです.

f:id:akmtn:20180325160059p:plain

 

 

・StackGAN

ステージ2で256x256の高解像画像が生成されるというインパクトがありました.上と比べてより整合性の取れた画像になっています.ステージ1ではGAN特有のモヤモヤっとした質感が出ていますが,ステージ2でスムーズな質感になっていることが見て取れます.

f:id:akmtn:20180325160140p:plain

 

 

・TAC-GAN

どれも生成結果です.StackGANほどのクオリティーは出ていませんが,同じテキストから様々なタイプの画像を生成できるという多様性(diversity)を売りとした手法です.

f:id:akmtn:20180325160153p:plain

 

 

・StackGAN++

StackGANを改良した StackGAN-v2です.人の目で見ても本物なんじゃないかと思えるクオリティーの鳥の画像を生成しています.

f:id:akmtn:20180325163313p:plain

 

 

・AttnGAN

 AttnGANはStackGANの著者との共著です.1段目が左から順に画像を高解像度化していくことを示しています.そして下2段は,単語ベクトルが細部をアテンションする働きを持つことを示しています.

f:id:akmtn:20180325160454p:plain

 

 

・FusedGAN

同じポーズのままで色を変えたり,背景を変えたりできること(B)やテキストを変えることでポーズを維持しながら変化を加えたり(C),連続的に変化させたり(D)できるという,多様性(diversity)とコントロール性(controllable)をアピールした結果画像です.

f:id:akmtn:20180325160535p:plain

 

・HDGAN

対応する細部の記述には忠実ながらも,高解像の画像を生成できています.

f:id:akmtn:20180325160624p:plain

 

 

 

 

使われているデータセットは?

以下の表がまとめになります.

f:id:akmtn:20180324233042p:plain

 

 ・CUB datasets

Caltech-UCSD Birds 200 (link)

f:id:akmtn:20180325132911j:plain

 

・Oxford-102

102 Category Flower Dataset (link)

f:id:akmtn:20180325132931j:plain

 

・MS COCO

Microsoft COCO dataset (link)

f:id:akmtn:20180325133207j:plain

 

MHP

MPII Human Pose Database (link)

 

text-to-imageのタスクで利用されるデータセットの種類は多くありません.一枚の画像に対して,どういう特徴のものが映っているのかキャプションをつけるコストは高いのでしょう.

また,一つのデータセットに含まれる画像の枚数も多くはありません.CUBには11,788枚の画像しかありません.

したがって,少ないデータ数で過学習を防ぎながら学習する工夫が必要になります.

しかし,このデータが少ないという課題は突然解決される可能性はあります.OpenPoseのような高精度のポーズ推定の手法や,セグメンテーションの手法が出現することによって,大量にポーズ情報の教師データやセグメンテーションマップの教師データが作られたように,画像からキャプションを生成する逆方向のタスクで大きな進展があれば,一枚の画像に対して大量のキャプションラベルを生成できるようになるので,キャプションから画像を生成する方向のタスクも大きく進展することになるでしょう.

 

 

 

 

生成できる解像度は?

f:id:akmtn:20180324224751p:plain

Progressive GANはtext-to-imageのタスクではありません.参考までに.

StackGANは256x256の高解像の画像を生成できるということもあり,text-to-imageの手法としてだけではなく,高解像画像の生成の手法として知られてもいます.StackGANが採用している2ステージのネットワーク構造は他の領域でも利用されています.例えば,ポーズ情報から人物の画像を生成するタスクで利用されています.詳しくは,以下の記事からどうぞ.

akmtn.hatenablog.com

 

 

 

 

ネットワーク構造はどうなっているか?

以下では,それぞれの手法がどのようなネットワーク構造を使っているかをまとめます.

 

・GAN-INT-CLS

f:id:akmtn:20180324220533p:plain

センテンスの埋め込みベクトルを条件として加えたDCGANベースのネットワークです.end-to-endで学習可能.

 

 

・GAWWN

f:id:akmtn:20180324220457p:plain

センテンスの埋め込みベクトルとキーポイントを条件にします.GlobalとLocalにストリームを分ける工夫がされています.

 

 

・StackGAN

f:id:akmtn:20180324220625p:plain

2ステージでの生成.1ステージ目にセンテンスベクトルから低解像の画像を生成し,2ステージ目に生成された低解像の画像とセンテンスベクトルから高解像の画像を生成します.

 

 

・TAC-GAN 

f:id:akmtn:20180324220708p:plain

AC-GANと同じ構造で,Gの入力がクラスラベルではなくてセンテンスのベクトルになっています.end-to-endの学習が可能です.

 

 

・StackGAN++ 

f:id:akmtn:20180324220808p:plain

tree-likeな構造のGで,複数スケールの解像度に対応したDを用意しています.Dはそれぞれ独立して各スケールの画像の分布を学習する一方で,Gは各Dからの誤差をまとめて学習します.したがって,複数スケールの分布をGが同時に近似するという効果が期待できます.end-to-endで学習できます.

 

 

・AttnGAN

f:id:akmtn:20180324220937p:plain

StackGAN++の構造にアテンションを与える層を追加しています.また,DAMSMというモデルも追加されています.センテンスのベクトルだけではなく,さらに細かい特徴となるワードのベクトルも利用します.end-to-endで学習できるはずです.

 

 

・FusedGAN

f:id:akmtn:20180324221010p:plain

上のストリームがunsupervisedな学習をできるネットワークで,下のストリームがsupervisedな学習をするネットワークです.end-to-endで学習できますが,まず,上のストリームをunsupervisedで学習し,次に下のストリームを学習するという2ステージに効果を分けて考えることができます.

 

 

・HDGAN

f:id:akmtn:20180324221115p:plain

 一つのGに対して複数スケールのDを使います.Hierarchical-nesed構造と呼んでいます.end-to-endで512x512の高解像を達成することができています.

 

 

[8]では,典型的なGANのフレームワークが次の図のように紹介されています. 

f:id:akmtn:20180324225459p:plain

 AがStackGANなどの構造で,Cは Prog.GAN,DがHDGANです.このように高解像の画像を生成するというタスクに於いては,AやCのように,低解像が生成できるようになってから高解像を生成できるように学習するという step-by-stepの学習方法が取られていました.それは,一発で高解像の生成を学習するというタスクは困難であるので,いくつかのsub-taskに分割してアプローチする方法でした.しかしながら,HDGANではend-to-endで学習できるところが強みです.したがって,今後はこの構造を取り入れた生成手法が増えてくるかもしれません.

 

 

 

 

Loss関数やDiscriminatorに工夫はあるか?

高解像の画像を生成するGANを作るためには,ネットワーク構造を工夫するという方法の他に,Lossを工夫するという方法もあります.

text-to-imageのタスクで使われるLossの特徴として,生成されたが画像が条件のテキストに忠実(fidality)であるかを評価するためのLossを入れる特徴があります.これは,「黄色い鳥を生成する」という条件を入力したときに,どんなに高解像で整合性の取れた画像が生成されたとしてもそれが「赤い鳥」ではよろしくない,というLossです.通常のDiscriminatorであれば,整合性さえ取れていれば誤差が発生しないままです.そこで,[1]では,matching-aware Discriminatorを提案しています.

matching-aware Discriminatorへの入力は,画像とテキストの埋め込みベクトルの2種類です.以下のように,どのような組み合わせの入力ペアかをDが判定することになります.

f:id:akmtn:20180325142530p:plain

特に,整合性が取れている真の画像が入力さている場合でも,画像とテキストがマッチしていないならばFakeの判定を返さないといけないとすることが特徴です.

このように,画像のリアリズムに加えて,画像とテキストのマッチング具合も最適化する学習をすることで,DはGに追加のシグナルを与えることができます.

さらに,Dによる一つの出力で同時にリアリズムとマッチングを測るのではなく,明示的にストリームを分けてリアリズムの評価とマッチングの評価を別々にしようという工夫が出てきています.

例えば,StackGAN++では下の図のように,Real/Fakeの判定をUnconditional lossで,画像とテキストのマッチング具合の判定をConditional lossで行なっています.

f:id:akmtn:20180325145229p:plain

 

一方,AttnGANでは,これまでのようにDに画像とセンテンスを入力してLossを出すことに加えて,新たに画像とワードのマッチングを判定するDeep Attentional Multimodal Similarity Model (DAMSM)を提案しています.AttnGANは全体の構成をセンテンスを条件に生成し,細部の生成をワードを条件にして行なっているので,細部がワードに忠実な生成結果かを測る構造を取り入れることは自然な流れでしょう.

f:id:akmtn:20180325150105p:plain

 

そして,HDGANではワードを使っていないので,細部の評価をするためにワードを使うことはできません.また,高解像の生成画像を畳み込んでしまうと受容野が広がり,細部での整合性を評価することが難しくなります.そこで,細部の整合性を評価するために,生成画像をパッチに区切り,パッチ毎にRealかFakeかの評価を行なっています.この方法はlocal adversarial lossと呼ばれ,アップルの論文(link)やCycle GAN (link)でも使われています.

f:id:akmtn:20180325151758p:plain

最強のネットワーク構造を考えるしかやることがないわけではなく,Lossの取り方でも結果が違ってくるところがDeep Learningの面白いところだと思います.

 

 

 

 

雑感

個人的に思ったこと.

diversityを持った画像を生成できることを重視するのは,テキストという次元から画像という別の次元へのマッピング(ワープ)を考えているからでしょう.二つのベクトル空間は完全には重ならないため,一対多の変換になっているのだと考えています.例えばpix2pixのように画像から別のドメインの画像への変換は一対一でおこなわれています.一対多を実現するために,ノイズベクトルとしてランダムなベクトルzを入力に加えることが行われていますが,このベクトルもdisentangleにして人の手で操作できるようになるとよりベターですね.

StackGANでは下の図のように,異なる入力に対して,同じ結果を出力してしまうmode collapseが報告されています[5]. 

f:id:akmtn:20180325165833p:plain

 

また,条件として入力するテキストの埋め込みベクトルは,どれも既存の手法で事前に準備されたものを使っていました.なのでこの埋め込みベクトルを作成する段階からtext-to-imageへの利用を見据えた方法が出てきても良さそうです.

 

人が生成画像を見たときに,自然か(リアルか)どうかの判断をする際,背景から何かしら感じることが多いのでは無いかと思います.前景にくるオブジェクトの生成に目が行きがちですが,まず背景を綺麗に生成することが自然に見える近道だったりするかもしれません.StackGAN++の結果を見て思いました.

 

 

 

 

おわりに

テキストから画像を生成するGANまとめは以上になります.

テキストに合った画像を高解像で生成するという難しいタスクを解決するために,多くの工夫がありました.同じような工夫を別のタスク,別の領域でも使うことができるかもしれません.

記事を読んでくださり,ありがとうございました.