Help us understand the problem. What is going on with this article?

主要なGAN研究の歴史(2019年11月現在)

こんな人に:point_up_tone1:

2014年に発表されたGAN(Generative Adversarial Network)ですが、画期的な研究故に最近では派生研究が多くてなにがなんやら。。私自身Google先生をフル活用して色々調べてみたものの、主要な関連研究をわかりやすくまとめた日本語文献はなかなか見つけることができませんでした、残念!ということで、本記事はGAN関連の研究の流れのアウトラインを掴みたい人や、それぞれの研究を一々調べるのがめんどくさいから論文とコードにサクッとワンクリックでとびたい人向けとなっております。ちなみに本記事は、主にGenerative Adversarial Networks - The Story So Farを参考に書かせて頂いています。

そもそもGANってなんぞや?という方へ

などを参考にしてみてください。

GANファミリーご紹介:family_mwbb:

  1. GAN (Generative Adversarial Network)
  2. CGAN (Conditional Generative Adversarial Network)
  3. DCGAN (Deep Convolutional Generative Adversarial Network)
  4. CoGAN (Coupled Generative Adversarial Networks)
  5. Pix2pix
  6. WGAN (Wasserstein Generative Adversarial Network)
  7. CycleGAN
  8. StackGAN (Stack Generative Adversarial Network)
  9. ProGAN (Progressive Growing of Generative Adversarial Network)
  10. SAGAN (Self-Attention Generative Adversarial Network)
  11. BigGAN (Big Generative Adversarial Network)
  12. StyleGAN (Style-based Generative Adversarial Network) GAN (1).png

大家族ですね。(本当はもっともっと大家族です。)ここからそれぞれの研究の

  • 研究論文
  • コード
  • ポイント
  • オススメ参考文献(世界には親切で頭の良い人が沢山います)

を紹介していきます。

1. GAN (Generative Adversarial Network)

  • Generative Adversarial Networks
  • コード
  • ポイント:
    • 2つのニューラルネットワーク(GeneratorとDiscriminator)を用いている
    • Generatorは「本物らしい」画像を作成する(最初の画像はランダムノイズから作成)
    • Discriminatorは、Generatorによって生成された偽物の画像と、インプットされる本物の画像を識別する
    • GeneratorとDiscriminatorは以下の目的関数を共有しており、Generatorはこの値を最小化、Discriminatorはこの値を最大化、することを目標に学習を進める Screen Shot 2019-11-27 at 6.00.18 PM.png

Screen Shot 2019-11-28 at 8.33.52 PM.png

参照

2. CGAN (Conditional Generative Adversarial Network)

Screen Shot 2019-11-28 at 8.33.59 PM.png

3. DCGAN (Deep Convolutional Generative Adversarial Network)

  • Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
  • コード
  • ポイント:以下の手法を用いて画像のクオリティを向上した
    • プーリング層を、ストライドありのConvolution層に入れ替える(下図)
    • アンサンプリングでは逆畳み込み層を用いる
    • 全結合をなくす
    • 全ての層に対してバッチ正規化を行う(Generatorの出力層と、Discriminatorの入力層以外)
    • Generatorにおいて、出力層以外ではReluを用いる(出力層にはtanhを用いる)
    • DiscriminatorではLeakyReLUを用いる
  • オススメ参考文献:はじめてのGAN(という題ではありますが、DCGANについての詳しい説明も載っています) Screen Shot 2019-11-27 at 6.28.38 PM.png

4. CoGAN (Coupled Generative Adversarial Networks)

5. Pix2pix

6. WGAN (Wasserstein Generative Adversarial Networks)

  • Wasserstein GAN
  • コード
  • ポイント:以下の手法により学習が安定し、モード崩壊も回避
    • 通常のGANに用いられている Jensen-Shannonダイバージェンス(勾配消失問題を引き起こす)の代わりに、Wasserstein距離を用いて損失関数を設計
  • オススメ参考文献:Wasserstein GAN と Kantorovich-Rubinstein 双対性(Wasserstein距離について詳しく解説してくれています)

7. CycleGAN (Cycle Generative Adversarial Network)

  • Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
  • コード
  • ポイント:対となっていない2つの画像が訓練データとして与えられた際に、一方の画像からもう一方への変換が行えるようになった
    • 「敵対性損失」(普通のGANで使われている損失関数)にプラスして「サイクル一貫性損失」を用いることで可能となった
    • 5. Pix2pixと「画像→画像変換」という点では似ているが、CycleGANではPix2pixと違って訓練データの画像群が対になっている必要がない!
    • テクスチャや色の変換には強いが、構造的な変換(ex.犬→猫)は難しい
  • オススメ参考文献:"GAN"の補足(鍵となるサイクル一貫性損失について解説してくれています) Screen Shot 2019-11-28 at 11.09.46 AM.png

できることのイメージはこんな感じです。(画像は論文を参照)

8. StackGAN (Stack Generative Adversarial Networks)

Screen Shot 2019-11-28 at 10.42.25 PM.png

論文参照。「この鳥は黒い翼をもち腹部は白いです」というテキストからこの画像が生成されます。

9. ProGAN (Progressive growing of Generative Adversarial Networks)

10. SAGAN (Self-Attention Generative Adversarial Networks)

Screen Shot 2019-11-29 at 2.02.29 AM.png

論文参照。Self Attention機構の構造はこんな感じです。

11. BigGAN (Big Generative Adversarial Networks)

Screen Shot 2019-11-29 at 6.19.47 PM.png

論文中にあるBigGANで生成した画像です。ハイクオリティなのがわかりますね!

12. StyleGAN (Style-based Generative Adversarial Networks)

        Screen Shot 2019-11-29 at 1.51.26 AM.png

終わりに:upside_down:

最後まで読んでいただきありがとうございます。もっとGANについて細かいとこまで知りたい&英語でもokという方は、是非こちらのNIPS 2016 Tutorial: Generative Adversarial Networksを読んでみてください。
皆さんがGANについての全体像をイメージするのに役立てていれば幸いです。(訂正などあれば是非教えてください!)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした