【論文紹介】High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs

エンジニアのtetsuです。

NVIDIAの研究者らによって発表されたHigh-Resolution Image Synthesis and Semantic Manipulation with Conditional GANsという論文の結果にとても驚いたため、今回はその紹介をします。

この論文の提案は大きく分けると次の2つになるかと思います。

  1. Conditional GAN(Generative Adversarial Network)をもちいて、semantic label mapから高解像度の画像を生成(従来は256×256程度)
  2. ユーザーがインタラクティブに生成画像を編集

ここでsemantic label mapというのは、例えば次のように画像内のオブジェクトの種類毎に色分けしてある画像になります。

semantic_label

https://arxiv.org/pdf/1711.11585.pdf

この論文(手法)のランディングページが以下のURLになっています。
https://tcwang0509.github.io/pix2pixHD/
ランディングページ内の動画を見て頂けると分かりますが、高解像度の画像が得られ、またユーザーがインタラクティブに生成画像を編集できています。

GAN

GANはニューラルネットワークを使って画像を生成する手法の1つです。GANの基本的なアイデアとしては、Generatorと呼ばれるネットワークとDiscriminatorと呼ばれるネットワークの2つを用意します。Generatorは画像を生成し、Discriminatorは入力画像が本物の画像である(生成画像ではない)確率を出力します。本物の画像とGeneratorが生成した画像を見分けられるようにDiscriminatorは学習をおこない、一方でGeneratorではDiscriminatorに本物か生成画像かの見分けがつかないような画像を生成するように学習をしていきます。Generatorが生成した画像をDiscriminatorが見破り、その結果を利用して次はGeneratorがより本物に近い画像を生成する、というプロセスを繰り返すことで、Generatorの生成する画像が高品質なものになっていきます。
この論文で扱うGANの場合にはGeneratorへsemantic label mapを与えることでsemantic label mapに従った画像を生成します。つまり、車のラベルの部分には車の画像が生成され、人のラベルの部分には人の画像が生成されるように学習していきます。
semantic label mapを入力とした場合には数式上では次の問題を解くことになります。

(1)    \begin{eqnarray*} \min_{G} \max_{D} \mathbb{E}_{({\mbox{\boldmath s}}, {\mbox{\boldmath x}})}[\log D({\mbox{\boldmath s}}, {\mbox{\boldmath x}})] + \mathbb{E}_{({\mbox{\boldmath s}})}[\log (1 - D({\mbox{\boldmath s}}, G({\mbox{\boldmath s}})))]. \end{eqnarray*}

ここで、\mbox{\boldmath s}はsemantic label mapをあらわし、\mbox{\boldmath x}はsemantic label mapに対応した本物の画像です。上式の一項目は本物の画像が本物である確率、二項目は生成画像が偽物である確率の期待値をあらわしています。Discriminatorとしては一項目も二項目も大きくしようと学習をしますが、Generator側では二項目を小さくして、Discriminatorを騙そうと学習をしていきます。

提案手法

以下では論文で提案されている事柄について触れていきます。

Generator

Generatorでは高解像度の画像をきれいに生成するために、内部的には2つのGeneratorが利用されています。1つは1024×512の画像を生成するGenerator、もう1つはこのGeneratorの出力する特徴量を元にして2048×1024の画像を生成するGeneratorです。おおまかな画像の特徴量を1つめのGeneratorで生成し、2つめのGeneratorで画像の細部を生成するようなイメージになります。以下の図(論文中のFigure 2)のG_1が前者のGeneratorでG_2が後者のGeneratorに対応します。

semantic_label

https://arxiv.org/pdf/1711.11585.pdf

Discriminator

Discriminatorでも高解像度の画像をきれいに生成するための工夫がされています。提案手法では異なる3つのDiscriminatorが利用されており、それぞれ2048×1024、1024×512、512×256の画像を受け取り、本物の画像である確率を出力するようになっています。2048×1024以外のサイズに関しては2048×1024の画像をdownsamplingして小さい画像にしてから入力として与えます。小さい画像を入力とするDiscriminatorでは大域的にみて識別をおこない、大きい画像を入力とするDiscriminatorでは細かいところまでをみて識別をおこなうという役割になります。Discriminatorを3つ用意することにより、式(1)は以下のように変わります。

(2)    \begin{eqnarray*} \min_{G} \max_{D_1, D_2, D_3} \sum_{k=1,2,3} \mathbb{E}_{({\mbox{\boldmath s}}, {\mbox{\boldmath x}})}[\log D_k({\mbox{\boldmath s}}, {\mbox{\boldmath x}})] + \mathbb{E}_{({\mbox{\boldmath s}})}[\log (1 - D_k({\mbox{\boldmath s}}, G({\mbox{\boldmath s}})))]. \end{eqnarray*}

Feature Matching

Feature Matchingを本手法では採用しています。これは本物の画像をDiscriminatorに入力した場合と生成画像をDiscriminatorに入力した場合の各層の出力が近い値になるように学習をおこなわせるテクニックです。これにより通常は不安定なGANの学習が安定します。数式であらわせば、次の項を式(2)に追加することになります。

     \begin{eqnarray*} \sum_{i=1}^T \frac{1}{N_i} \mathbb{E}_{({\mbox{\boldmath s}}, {\mbox{\boldmath x}})}[||D_k^{(i)}({\mbox{\boldmath s}}, {\mbox{\boldmath x}}) - D_k^{(i)} ({\mbox{\boldmath s}}, G({\mbox{\boldmath s}}))||_1 ]. \end{eqnarray*}

ここでTD_k^{(i)}N_iはそれぞれDiscriminatorの層の数、D_ki番目の層の出力、D_k^{(i)}の要素数をあらわします。
画像分類用の学習済みのニューラルネットワークのモデルとして広く使われているVGGというものがあります。このVGGのネットワークの層の出力に対しても同様のことをすることで、生成画像の質が若干よくなるようです。つまり、さらに次の項を式(2)に追加します。

(3)    \begin{eqnarray*} \sum_{i=1}^N \frac{1}{M_i} \mathbb{E}_{({\mbox{\boldmath s}}, {\mbox{\boldmath x}})}[||F^{(i)}({\mbox{\boldmath x}}) - F^{(i)} ({\mbox{\boldmath G(s)})||_1 ]. \end{eqnarray*}

ここでNF^{(i)}M_iはそれぞれVGGの層の数、VGGのi番目の層の出力、F^{(i)}の要素数をあらわします。

Boundary Map

GeneratorとDiscriminatorへの入力がsemantic label mapだけだと、同じラベルをもつオブジェクトの境界部分が汚く生成されてしまうという問題があります。これを回避するため、オブジェクト間の境界の情報をもつboundary mapを用意し、semantic label mapと一緒にネットワークに入力することで、オブジェクトの境界情報を加味して画像を生成するようにします。boundary mapは以下の右図になります(論文中のFigure 3)。

semantic_label

https://arxiv.org/pdf/1711.11585.pdf

boundary mapなしでの生成画像が次の左図で、boundary mapありでの生成画像が右図になります。車同士の境界部分がきれいに描画されています(論文中のFigure 4)。

semantic_label

https://arxiv.org/pdf/1711.11585.pdf

Instance-Level Feature Embedding

それぞれのオブジェクト毎の色や模様の操作をおこなうための仕組みとしてInstance-Level Feature Embeddingを提案しています。
学習時には学習データの画像と同じサイズの3次元の特徴量に変換するEncoderとなるネットワークを用意します。Encoderの出力する特徴量をそれぞれのオブジェクト内部のピクセル毎に統一するため、オブジェクト上のピクセルの特徴量の平均をとり、それをブロードキャストします。こうして生成された特徴量をGeneratorへの入力とすることで、オブジェクト毎の色や模様を特徴量と対応付けて学習できます。図であらわすと次のようにしてGeneratorへの入力となる特徴量を作ります。
semantic_label
なお、EncoderはGeneratorやDiscriminatorと一緒に学習がおこなわれます。
学習終了後に画像を生成するときには次のようにしてオブジェクトの色や模様の操作をおこないます。まず学習データの各オブジェクトの特徴量を計算します。学習データのオブジェクト毎の特徴量に対してK-meansをおこない、クラスタリングします。K-meansによって求めた各クラスタの中心ベクトルを対象のオブジェクトのsemantic labelに対応するピクセルへブロードキャストし、Generatorへ入力する特徴量を生成します。このようにすることで、各クラスタの性質を反映した画像を生成することが可能になります。論文中ではK-meansのクラスタ数は10となっています。
semantic_label

以上の工夫を付け加えていくと、最終的にはGeneratorへの入力はsemantic label mapとboundary map、特徴量になります。Discriminatorへの入力はsemantic label mapとboundary map、生成 or 本物の画像になります。

実験結果

実験では次の結果のように既存手法よりもきれいな画像が生成できることが示されています(論文中のFigure 7。(a)と(b)が既存手法、(c)が提案手法の式(3)なし、(d)が式(3)あり)。

semantic_label

https://arxiv.org/pdf/1711.11585.pdf

次の実験結果が驚くべきものになっています(論文中のFigure 1)。(a)は生成画像になりますが、同じsemantic label mapの後ろの木のラベルを建物に変更して画像を生成した結果が(b)、道路の模様を変更して画像を生成した結果が(c)になります。
ほとんど違和感なくオブジェクトが変化しています。

semantic_label

https://arxiv.org/pdf/1711.11585.pdf

最後に

いかがだったでしょうか。生成された画像は高解像かつ、操作が可能ということで結果に驚かれた方も多いのではないでしょうか。何か面白いことに活かせるような手法ではないかと思います。

最近の記事

  • 関連記事
  • おすすめ記事
  • 特集記事

アーカイブ

カテゴリー

PAGE TOP