はじめに
対象とする読み手として、画像生成系のAIモデルであるGANの構造を理解しているものとしています。
もし、GANをいまいち理解できていない方には以下の参考サイトや動画がおすすめです。
Deep Learning入門:Generative Adversarial Networks (GAN)とは?
調査方法
- 元論文
- Colaboratoryを使った挙動
- 参考記事
上記の3つから調査しました。
自身の研究に応用できるかどうか判断するため、pix2pixやCycleGAN、そしてCUT(Contrastive Learning for Unpaired Image-to-Image Translation)について調査し、簡単にまとめました。
あくまで、学生が自身の研究のために調べているので、記事の質についてはご容赦ください。
画像変換系NNモデルとは
画像変換の入力画像、出力画像に相当する2つの画像の対応関係を学習することで画像の変換を可能にするニューラルネットワーク(Neural Network: NN)モデルのことです。
写真の合成や白黒画像のカラー化に始まり、Googleマップの写真を航空写真にしたり、線画のスケッチを写真にしたりと、幅広い用途に対応しており、今後の実用例に期待が多い研究分野の一つです。
なかでも、2014年にIan.Goodfellowらによって発表された「敵対的生成ネットワーク」(Genera tive Adversarial Networks:GAN)の登場以来、画像変換を行えるNNモデルは向上し、高精度な画像変換を行えるようになりつつあります。GANは生成モデルの一種で、データから特徴を学習することで、実在しないデータを生成したり、存在するデータの特徴に沿って変換できるNNモデルです。
今回はこのGANやConditional GANなどから派生してできたpix2pixというモデルから現在までの画像変換系NNモデルの変遷を各モデルの違いなどに注目しながら見ていこうと思ます。
Conditional GAN(CGAN):Generatorの入力にノイズベクトルだけでなく、条件ベクトルも与えており、Discriminatorも条件ベクトルに相当する条件データを入力できるよう改良されている条件付きのGANモデル
Pix2Pix
Pix2Pixは入力画像と出力画像に相当する2つの画像の対応関係をGAN学習することで画像変換を可能にします。CGANとの違いとして、条件ベクトルの代わりに条件画像を使用します。
内部構造
$G(Generator)$ は条件画像 $X$ とノイズ $Z$ から画像を生成し**【Pseudo Flow】、$D(Discriminator)$** は「条件画像 $X$ と実画像 $Y$ のペア」と「条件画像 $X$ と生成画像 $G(X,Z)$ のペア」を識別すること**【Actual Flow】によって、$G$** が条件画像 $X$ から実画像 $Y$ のような画像を生成できるように画像ペア間の関係を学習します。【Pseudo Flow】
※ ちなみに、Pix2pixはGeneratorにU-netを用いているだけで、ノイズ**$Z$を入れていないように、感じるかもしれませんが、通常のU-netとは異なり、Dropoutをいれることで各層にノイズベクトル$(z \subset Z)$**を与えている。
最内レイヤーはDropoutなしだった。 pic.twitter.com/zEFSeBNBdF
— Teppei Kurita (@kuritateppei) April 9, 2020
損失関数の定式
まず、Adversarial Loss $\mathcal{L}_{adv}$はConditional GANと同じ形をとる。
\mathcal{L}_{adv}(G,D)=\mathbb{E}_{x,y}\bigl[\log D(x,y)\bigl]+ \mathbb{E}_{x,z}\bigl[\log (1 - D(x,G(x,z)\,)\,)\bigl]
そして、L1 Lossは
\mathcal{L}_{L1}(G)=\mathbb{E}_{x,y,z}\bigl[\|y - G(x,y)\|_{1}\bigl]
上記を1つにまとめて、Pix2Pixの目的は最終的に以下の式である
\arg \min_{G}\max_{D} \mathcal{L}_{adv}(G,D)+ \lambda\mathcal{L}_{L1}(G)
Pix2Pixでは、画像の全体像(低周波成分)はL1 Lossで捉え、画像の詳細なディティール(高周波成分)は**$D(Discriminator)$**であるPatchGANで捉えるようにして、Adversarial Lossで精度を向上させている。
課題
Pix2Pixは1対1で対応していないペア画像データ(UnPaired)では学習できませんでした。しかし、1対1で各ピクセルが対応したペア画像データ(Paired)を大量に入手できるケースは稀で、Pix2Pixのために新たに学習データを用意するコストが課題として残されていました。
CycleGAN
Pix2Pixの課題を解決するため、CycleGANでは、2枚の画像の対応する各ピクセルの関係を学習するのではなく、2つの画像データセット同士の**ドメイン(分野、領域)**の関係を学習します。これによって、CycleGANは大量のペア画像(Paired)を用意しなくても、2つの違う画像データセット(UnPaired)からその関係を学習して画像変換を実現しました。
また、Pix2Pix のように1組の**$G$と$D$**で一方向の画像変換(画像生成)だけの場合、入力 $x$ を出力 $y$ へ変換する関係を学習することはできるが、$y$ から $x$ への逆変換を学習することができません。しかし、CycleGANでは$G$と$D$をもう1組加え、出力 $y$ から入力 $x$ への逆変換の学習も行い、双方向の画像変換を学習することができます。
ドメインとは
集合論から、公開されている画像データセットにおいてもそれぞれ固有のドメインで収集されており、例えば、物体検出で用いられる有名なImageNetにおいて、「馬」とラベル付けされた画像群は「馬というドメインの画像のデータセット」になります。そして、一方で「シマウマ」とラベル付された画像群は「シマウマというドメインの画像のデータセット」になり、CycleGANでは、この違うドメイン(「馬」、「シマウマ」)の画像データセット同士の関係性を学習します。
例えば、以下の図のように世の中の画像の中でもそれぞれのドメインがあります。
画像引用元:https://ai-scholar.tech/articles/treatise/frcnn-ai-228
内部構造
**$G$と$D$が2組あり、GAN同様に、$G$は$D$を騙すようにし、$D$は$G$**のFakeを見破るように学習します。
2種類のドメイン「馬(horse)」と「シマウマ(zebra)」の画像データセットがある場合、
$G_{xy}$は「シマウマ」の画像 $x \in X$ を「馬」の画像 $y\in Y$へ変換し、$D_{y}$は画像が本物の$y$ か $G_{xy}(x)$ かを識別します。もう一方の$G_{yx}$ は「馬」の画像**$y \in Y$** を「シマウマ」の画像**$x \in X$** へ変換し、**$D_{x}$**は画像が本物の $x$ か $G_{yx}(y)$ かを識別します。
また、$L_{cyc}$ (Cycle Consistency Loss) は、変換と逆変換を経て画像がどれだけ変換前と変わらないかの一貫性(Consistency)を測る指標として、**$G_{xy}$と$G_{yx}$**の関係を表します。
損失関数の定式
まず、GANに則り、$G$と$D$ の組はそれぞれ Adversarial Lossで学習する。ドメイン「シマウマ(zebra)」$x \in X$ の画像をドメイン「馬(horse)」 **$y\in Y$の画像へ変換する$G_{xy}$と、それを識別する$D_{y}$**の関係は以下の式となり
\mathcal{L}_{adv}(G_{xy},D_{y})=\mathbb{E}_{y\sim p_{data}(y)}\bigl[\log D_{y}(y)\bigl]+ \mathbb{E}_{x\sim p_{data}(x)}\bigl[\log (\,1 - D_{y}(G(x))\,)\bigl]
そして、CycleGANの目的は上式の $G_{xy}$ を最小化、$D_{y}$ を最大化することなので、
\arg \min_{G_{xy}}\max_{D_{y}} \mathcal{L}_{adv}(G_{xy},D_{y})
同様に、逆変換のドメイン「馬(horse)」 $y\in Y$の画像をドメイン「シマウマ(zebra)」$x \in X$ の画像に変換する**$G_{yx}$と、それを識別する$D_{x}$**は以下のようになる。
\arg \min_{G_{yx}}\max_{D_{x}} \mathcal{L}_{adv}(G_{yx},D_{x})
また、$L_{cyc}$ (Cycle Consistency Loss) は画像の変換前と変換後の違いなので、
\mathcal{L}_{cyc}(G_{xy},G_{yx})=\mathbb{E}_{x\sim p_{data}(x)}\bigl[\|G_{yx}(G_{xy}(x))- x\|_{1}\bigl] +\,\mathbb{E}_{y\sim p_{data}(y)}\bigl[\|G_{xy}(G_{yx}(y))- y\|_{1}\bigl]
上記を1つにまとめて、CycleGANの目的関数は最終的に
\arg \min_{G_{xy},G_{yx}}\max_{D_{x},D_{y}} \mathcal{L}_{total}(G_{xy},G_{yx}, D_{x}, D_{y})
\\
\mathcal{L}_{total}(G_{xy},G_{yx}, D_{x}, D_{y}) = \mathcal{L}_{adv}(G_{xy},D_{y}) + \mathcal{L}_{adv}(G_{yx},D_{x}) + \lambda\,\mathcal{L}_{cyc}(G_{xy},G_{yx})
CycleGANにおけるIdentity Mapping Loss
CycleGANの論文における5.2. Applicationsの中で**$L_{identitiy}$** (Identity Mapping Loss)というものを損失関数の中に取り入れた方が、以下の表からわかるように視覚的により良い画像を生成したと述べられている。
$L_{identitiy}$ は次のような式でかける。
\mathcal{L}_{identitiy}(G_{xy},G_{yx})=\mathbb{E}_{x\sim p_{data}(x)}\bigl[\|G_{yx}(x)- x\|_{1}\bigl] +\,\mathbb{E}_{y\sim p_{data}(y)}\bigl[\|G_{xy}(y)- y\|_{1}\bigl]
上記の新たな損失関数にて、**$L_{cyc}$**の重み係数の半分( $0.5 \lambda$ ) をかけて、足したものが以下のようなCycleGANの最終的に
目的関数となる。
\mathcal{L}_{total}(G_{xy},G_{yx}, D_{x}, D_{y}) = \mathcal{L}_{adv}(G_{xy},D_{y}) + \mathcal{L}_{adv}(G_{yx},D_{x}) + \lambda\,\mathcal{L}_{cyc}(G_{xy},G_{yx})+ 0.5 \lambda\,\mathcal{L}_{identity}(G_{xy},G_{yx})
課題
しかし、CycleGANでも、似た形状や同じポーズ、似た構図での色・テクスチャの変換をキレイに行うことができるが、形状の違うデータセットや画像内のある一部のみの変換では失敗してしまう場合が多いことがありました。
画像引用元:https://ichi.pro/uma-o-shimauma-ni-hon-yakusuru-cyclegan-119013860708179
CUT
Contrastive Learning for Unpaired Image-to-Image Translation、通称CUTは、画像全体ではなく、パッチ単位かつ多層でContrastive Learningを行い、CycleGANにおける同じドメイン内での形状の違うもの(シマウマ単体ではなく人が騎乗しているもの)などの領域を考慮した画像変換を行えるモデルを構築しようとしました。
ネットワーク構造は上図のようになっておりパッチのNegativeサンプルは他の画像から得るのではなく、入力画像内からサンプリングしています。従来手法と比較して、性能を向上していることに加え、学習時間も短縮できることを実証している。さらには、それぞれの「ドメイン」が1枚のみであっても、学習できるような拡張がされています。
このネットワークに関しては以下の記事で詳しく記載しておりますので、そちらもあわせてご一読ください。
各々の違いまとめ
モデル名 | 学習方法 | データセット | 推論方向 | 損失関数 |
---|---|---|---|---|
Pix2Pix | 教師あり学習 | Paired | one-sided(one-directional) | Adversarial(PatchGAN) + L1 |
CycleGAN | 教師なし学習 | Unpaired | two-sided(bidirectional) | Adversarial(PatchGAN) + Consistency(L1) + Identity(L1) |
CUT | 自己教師あり学習 | Unpaired | one-sided(one-directional) | Adversarial + PathNCE(Consistency, Identity) |
まとめ
本記事ではペア画像変換系のモデルについて、変遷をたどりながら考察していきました。
自身の復習のために、今後もっと掘り下げて記事を改善することもあるかと思いますが、現状段階ではこのくらいにまとめておきますので、ご一読いただければと思います。