GAN Inversion による写実的画像生成の制御

GAN Inversion による写実的画像生成の制御

金森 由博 先生
筑波大学 准教授

1.はじめに

深層学習 (Deep Learning) で画像を作る、というと「GANってやつを使うんでしょ?」とお察しの方も多いかと思います。

今回はそのGAN (Generative Adversarial Network; 敵対的生成ネットワーク) についてですが、特に最近、研究分野でホットな “GAN Inversion” という技術をご紹介します。

端的に何ができるようになるかというと、写実的な画像が作れるものの制御しづらかったGANを、自在にコントロールできるようになります。

2. GAN による写実的画像生成

GAN Inversion の話に入る前に、まずはGANと、GANを使った写実的画像生成についておさらいしたいと思います。

GANは2014年にIan Goodfellow (現 Google Brain) らが提案した、2 つのネットワークからなる画像生成の枠組みです。
2 つのネットワークとは、画像生成器 (Generator) と識別器 (Discriminator) です。

訓練を通じて、画像生成器は本物らしい画像を生成しようとし、識別器は画像生成器が作る画像が偽物だと見破ろうと、お互いを敵として (なので「敵対的」と言います) 競い合って学習します。

GANの学習はよく偽札作りの話に例えられます――画像生成器が偽札を作り、識別器がそれを見破り、それを繰り返していくうちに非常に精巧な偽札が作られるようになる、という話です。

GANの登場時は、発想は画期的なものの、低解像度でも割とぐちゃぐちゃな絵しかできませんでしたが、学習方法やネットワークの工夫が次々に考案され、最近ではもはや本物と見分けがつかない写実的な画像を生成できるようになっています。

なおGANの「偽物を作るネットワークとそれを見破るネットワークで切磋琢磨」という枠組みは汎用的なので、​現在では画像生成にとどまらず、明示的に定義しづらい「本物らしさ・それっぽさ」を実現するために、ありとあらゆるデータ生成タスクで使われています。

話を元に戻して、GANによる画像生成についてもう少し詳しく説明します。

よくネットで「実在しない人物のリアルな顔画像をいくらでも作れます! 肖像権フリーの広告モデルとして使えますよ!」「二次元美少女画像をいくらでも(略)」というのを見かけますが、あれはどうやって実現しているのでしょうか。

基本的な実現方法としては、乱数で作ったベクトル (ノイズと呼ばれます) を画像生成器に入力して、ターゲットとなる種類の画像 (例えば人間の顔や美少女画像) を本物らしく生成させつつ、一方の識別器には本物画像と偽物画像の両方を入力して見分ける訓練をさせます (識別器には、本物なら1、偽物なら0を出力させます)。

そうすると、乱数ベクトルを画像生成器に突っ込むたびに、何かしら本物らしい画像が生成されるようになります。

この訓練には、ターゲットとなる種類の画像を大量に用意する必要がありますが、人間がいちいち「この乱数ベクトルに対する正解の画像はこれ!」と指定する必要はありません。

このように、正解を与えずに学習させる枠組みを「教師なし学習」と呼びます。
教師なし学習でGANを訓練するのは、人間が正解を与えなくてよいという点では楽ですが、乱数から画像を生成しているということで、所望の画像 (例えば「俺の嫁」と呼べる理想的な美少女画像) が出るまでガチャを回し続ける、というのは非効率です。

そうなると、GANによる画像生成をなんとか制御したくなるのが人の性かと思います。

1つのやり方として、「こういう入力を与えたらこういう画像を出力しなさい!」とGANに教え込ませる手があります。
これは「入力データでGANによる画像生成を条件付ける」ということで、conditional GAN (cGAN) と呼ばれています。

例えば、「線画を入力したら綺麗な絵を出せ」「グレースケール画像を入力したらそれっぽいカラー画像を出せ」「塗り絵みたいに色分けしたマップ (意味マスクなどと呼びます) から綺麗な絵を出せ」など、「ある種の画像を入力として別の種類の画像を出力しなさい」という画像対画像変換 (Image-to-Image Translation) [1] が cGANの典型例です。

これで確かにGANを制御できるのですが、シンプルなやり方だと、画素単位で対応の取れた入力画像と正解画像のペアをたくさん用意する必要があるのが難点です。

この要件を緩和して、画素単位の対応が取れていない、入力となる種類の画像と正解となる種類の画像をそれぞれたくさん集めて学習させる、という方法も提案されましたが、今度は画質がイマイチです。

正解画像をいちいち用意せずに、きれいな画像を生成するうまい方法はないものでしょうか?

3. StyleGAN による教師なし画像生成

初心に戻って、教師なし学習によるGANできれいな画像を作れないかを考えてみたいと思います。

NVIDIAの研究者たちが開発したStyleGAN [2] とその改良版のStyleGAN2 [3]というGANのネットワークが、教師なし学習で高品質かつ高解像度の画像生成を実現し、そのインパクトの大きさから話題になりました (図1)。

図1: NVIDIAの研究者が開発したStyleGAN [2] の紹介動画。

これらのネットワーク (以下、簡単のためStyleGANと記述しますが、実際によく使われているのは StyleGAN2の方です) は、低解像度の画像から徐々に高解像度の画像を生成していく、という従来通りの方針を取っている一方で、従来のGANのネットワークが乱数から直接画像を生成していたのとは異なるアプローチを採用しています。

StyleGAN では乱数を一旦、全結合層からなるマッピングネットワークというものに入力して、スタイルベクトルというものを抽出し、このスタイルベクトルを画像生成器の各層に注入します (このあたりの説明は図がないと理解が難しいと思うので、こちらのブログ [4] をご覧になるのをお薦めします)。

このように学習されたStyleGANのネットワークでは、低解像度の層に注入するスタイルベクトルをいじれば大域的な編集 (例えば顔なら顔全体に影響する、顔の形や向き、年齢や性別などの編集) ができ、高解像度の層のスタイルベクトルをいじれば局所的な編集 (髪の色などの編集) ができることがわかっています。

ということは、生成された画像のどこを編集したいかによって、ネットワークの低解像度の層から高解像度の層をいじれば、所望の画像に近づけられるわけです。

これで、あなたの理想の美少女画像、すなわち「俺の嫁」画像にだいぶ近づきました。
実際にこちらのブログ [5] で、各層をいじるとどのように画像が変化するかを実験しています。

なお、StyleGANの学習には結構な計算リソースが必要になります。

NVIDIAの公式リポジトリ [3] の情報によれば、Tesla V100 GPU 1 枚で 1024×1024画素の人物顔画像を学習しようとすると、少なくとも27日以上かかるとのことです。
これだとご家庭で学習させるのはちょっとハードルが高いですね。

しかしご安心ください!
​世界には奇特な方がいるもので、様々な種類の画像を集めて訓練したStyleGANの学習済みモデルを配布してくれています [6]。

​こちらのサイトから、人間の顔画像や二次元美少女画像で学習したモデルを始め、浮世絵、かわいい猫ちゃん、自動車、教会の画像などを訓練に用いた、バラエティ豊かな学習済みモデルが入手できます (図2)。

図2: 学習済みStyleGANでランダムに生成した画像
図2: 学習済みStyleGANでランダムに生成した画像 (列ごとに異なる画像データセットで学習)。

「よし! じゃあ訓練済みモデルを拾ってきてネットワークの層ごとにいじれば『俺の嫁』画像が作れるな!」……はい、その通りです。

しかし……想像してみてください。StyleGANの各層をいくらいじってもうまくいかず、失意の底に沈んでいたある日、ネットの海を放浪していたあなたは、神絵師によって描かれた「俺の嫁」画像と運命的な邂逅(かいこう:思いがけず出会うこと)を果たします。

その理想的な「俺の嫁」画像を、正面からだけでなく横からも見てみたい、笑った顔だけでなく怒った顔やいろんな表情も見てみたい……そう思いませんか? (思ってください)

ここでのポイントは、「拾ってきた画像というのは、自然に編集しようと思っても、学習済みGANモデルをいじるようには簡単に編集できない」ということです。
「だったら、拾ってきた画像を学習済みGANモデルのように扱いやすい形に変換してしまえばいいんじゃ……?」という発想からGAN Inversionの話につながります。

4. GAN Inversion による画像生成

GAN Inversionの基本的なアイディアは、「教師なしで学習したGANって、乱数から画像を作ってるんだよね? じゃあまず、所望の画像が出てくるように乱数を逆算しよう! で、その乱数をうまくいじって所望の編集を実現しよう!」というものです。

例えば、実写の顔画像を用意し、大量の顔画像で事前に学習済みのGANモデルを使って、与えられた顔画像に近い出力が得られるよう、乱数ベクトルを逆算します。

この逆算をどうやってやるかというと、ネットワークのパラメータを固定した上で、出力画像が与えられた顔画像に近づくよう、入力である乱数を変数として最適化します。
出力が所望の結果になるよう入力を最適化、というのは、Gatysらが提案した最初のスタイル変換の研究 [7] と同様な発想です。
で、最適化で得られた乱数をいじります。

教師なしで学習済みのGANモデルなら、言わば「きれいな画像だけの高次元空間」を学習しているので、乱数を多少いじってもきれいな画像が出てくるのが保証されているようなものです (※しかし実際にはStyleGAN2でも、例えば顔なら顔が画像の真ん中に来るように位置を調整した画像データセットで学習させておかないと、ぐちゃぐちゃな画像ができやすくなり、きれいな画像はなかなか生成されません)。

学習済みStyleGANモデルを使うなら、所望の編集ができるまで、層ごとに思う存分いじってください。

​ただ、上に書いた最適化によるアプローチだと、入力画像1枚ごとに所望の乱数を得るのに分単位で時間がかかります。

それは不便なので高速化しましょう、ということで「与えられた画像から直接乱数 (あるいは StyleGANのスタイルベクトル) を出力するようなネットワーク (エンコーダ; 符号化器) を学習させちゃおう」という発想が出てきました。

さらに、「学習済みGANモデルを使って、画像対画像変換を実現できないか?」という研究が登場しました [8] (図3)。

図3: 学習済みStyleGANを用いて画像対画像変換を実現した “Encoding in Style” [8] の紹介動画。

この “Encoding in Style” という研究 [8] (通称 “pixel2Style2pixel” 略して “pSp”) では例えば、人間の顔画像で学習済みのStyleGANモデルを使って、横顔を正面顔に、欠損のある顔画像から欠損のない顔画像に、意味マスクから顔画像に、線画から顔画像に、ボケた低解像度画像から高解像度の顔画像に、といった様々な変換を実現します。

それぞれの画像変換に必要な、StyleGANの各層のチューニングは、もしかしたらめちゃくちゃ頑張れば手作業でもできるかもしれませんが、そこを学習で自動化している、ということです。

ここで手前味噌となりますが、上の “pSp” という研究にインスパイアされた我々の研究 [9] を紹介させてください。

画像対画像変換のひとつに、意味マスク (例えば顔なら、画素ごとに髪、目、口、それ以外などの色で塗り分けられた画像) から写実的な画像を合成する、「意味的画像合成」 (Semantic Image Synthesis) というタスクがあります。

意味的画像合成の利点は、「どこの画素に何がある」というのを意味マスクで細かく指定して画像を生成できる点です。
従来の方法だと、意味的画像合成を実現するには、入力の意味マスクと正解画像のペアを大量に集めて学習させる必要がありました。
つまりcGANのように教師あり学習が主流だったということです。

意味マスクは、1画素ずつ塗り分ける塗り絵のようなものなので、手作業で用意しようとするとすごく手間がかかります。

もし、まだ誰も意味マスクを用意していない種類 (例えば猫ちゃん) の画像で意味的画像合成をやることになったら、「ウン千枚分、意味マスクを用意してください」とか言われても無理ですよね。

我々の研究は、「もし、あなたが扱いたい種類の画像について、教師なしで学習済みのStyleGANモデルと、ごく少ない (1~5枚とかの) 意味マスクさえあれば、意味的画像合成ができますよ」というものです (図4)。

図4: 正解意味マスク
図4: 正解意味マスクが1~5枚でも意味的画像合成を実現する我々の研究成果 [9]。

こんなことは、例えば上記の pSp だと大量の入力・正解ペアが必要になるので全く無理です。

どうやって実現するのかというと……長くなるので興味のある方はぜひ論文をご覧ください。

面白い点として、従来は意味マスクというと塗り残しなく密に塗ったものを使いますが、我々の研究だと、顔のランドマークや、イラスト顔画像のアタリを取るときの十字線のような疎な入力からでも画像を合成できます (図5)。

図5: 疎な意味マスク
図5: 疎な意味マスク (左列) を入力して生成された画像の例。

5. おわりに

いかがだったでしょうか? (まとめ記事風)

GAN Inversion については早くもサーベイ論文 [10] が出て、深層学習界隈でよくある “Awesome XXX” リポジトリ [11] (「すげー XXXの論文リンク集」……我々の論文も入っています❤) も登場して、大変盛り上がっています。

さらに、NVIDIAからStyleGAN2の後継となるStyleGAN3 [12]も最近発表され、今後は高品質な画像生成をますます直感的な制御によって実現できていくものと思われます。

​ぜひGAN Inversion で「俺の嫁」探しをしてみてください。

【参考文献】

[1] Phillip Isola, Jun-Yan Zhu, Tinghui Zhou, Alexei A. Efros, Image-to-Image Translation with Conditional Adversarial Networks, CVPR 2017, pp. 5967-5976, 2017.
https://phillipi.github.io/pix2pix/

[2] Tero Karras, Samuli Laine, Timo Aila, A Style-Based Generator Architecture for Generative Adversarial Networks, CVPR 2019, pp. 4401-4410, 2019.
https://github.com/NVlabs/stylegan

[3] Tero Karras, Samuli Laine, Miika Aittala, Janne Hellsten, Jaakko Lehtinen, Timo Aila, Analyzing and Improving the Image Quality of StyleGAN, CVPR 2020, pp. 8107-8116, 2020.
https://github.com/NVlabs/stylegan2

[4] Akihiro FUJII, GANの基礎からStyleGAN2まで, https://akichan-f.medium.com/dfd2608410b3

[5] cedro-blog, StyleGAN2を使って顔画像の編集をやってみる, http://cedro3.com/ai/edit-new-image/

[6] https://github.com/justinpinkney/awesome-pretrained-stylegan2

[7] Leon A. Gatys, Alexander S. Ecker, Matthias Bethge, A Neural Algorithm of Artistic Style, arXiv, 2015.

[8] Elad Richardson, Yuval Alaluf, Or Patashnik, Yotam Nitzan, Yaniv Azar, Stav Shapiro, Daniel Cohen-Or, Encoding in Style: a StyleGAN Encoder for Image-to-Image Translation, CVPR 2021, pp. 2287-2296, 2021.
https://github.com/eladrich/pixel2style2pixel

[9] Yuki Endo, Yoshihiro Kanamori, Few-shot Semantic Image Synthesis Using StyleGAN Prior, arXiv, 2021.
https://github.com/endo-yuki-t/Fewshot-SMIS

[10] Weihao Xia, Yulun Zhang, Yujiu Yang, Jing-Hao Xue, Bolei Zhou, Ming-Hsuan Yang, GAN Inversion: A Survey, arXiv, 2021.
https://arxiv.org/abs/2101.05278

[11] https://github.com/weihaox/awesome-gan-inversion

[12] Tero Karras, Miika Aittala, Samuli Laine, Erik Härkönen, Janne Hellsten, Jaakko Lehtinen, Timo Aila, Alias-Free Generative Adversarial Networks, NeurIPS 2021, 2021. https://github.com/NVlabs/stylegan3 ​

著者紹介

金森 由博 先生

金森 由博 先生

筑波大学 ​システム情報系 ​准教授

2009 年 3月 東京大学情報理工学系研究科コンピュータ科学専攻博士課程修了.博士(情報理工学).
同年 4月より筑波大学に勤務し,現職は筑波大学システム情報系・准教授.
2014 年~2016 年にスイス連邦工科大学チューリッヒ校 (ETHZ),
2019 年にエディンバラ大学に客員研究員として滞在.コンピュータグラフィックス (CG) およびコンピュータビジョン (CV) に関する研究に興味を持つ.最近は特に,深層学習の CG や CV への応用に取り組んでいる.
​情報処理学会, 画像電子学会, 芸術科学会各会員.