このシリーズではE資格対策として、シラバスの内容を項目別にまとめています。

E資格まとめ

試験概要 ディープラーニングの理論を理解し、適切な手法を選択して実装する能力や知識を有しているかを認定する。 1.応用数学 (1)確率・統計 (2)情報理論 2.機…

Pix2Pix

Pix2Pixの概要

Pix2Pixは、画像から画像への変換問題を扱う深層学習の一手法で、CVPR 2017において発表されました。この手法は、Conditional GAN(CGAN)の一種として知られており、条件付き生成敵対ネットワークの枠組みを用いています。

CGANの基本的な概念として、「条件ベクトルと画像のペア」を学習データとして用いますが、Pix2Pixではこの条件ベクトルの代わりに「条件画像」を用います。この条件画像と画像のペアの対応関係を学習することで、画像から画像への「変換」が可能になります。この「変換」は、言語における「翻訳」に近いニュアンスを持っており、ある画像を別の形式の画像に変換するプロセスを指します。

Pix2Pixのモデルは、GeneratorとDiscriminatorの2つの部分から成り立っています。Generatorは、条件画像xとノイズベクトルzから画像G(x,z)を生成します。一方、Discriminatorは、「条件画像xと実画像yのペア」と「条件画像xと生成画像G(x,z)のペア」がそれぞれ本物かどうかを識別します。

この構造によって、Generatorが条件画像から本物のような画像を生成できるように画像ペアの関係を学習します。結果として、Pix2Pixは多岐にわたる応用が可能となり、衛星写真を地図画像に変換したり、白黒画像をカラー画像に変換したり、線画を写真に変換できるようになるのです。

Pix2Pixの構造

Pix2Pixの構造は、画像変換問題に特化した設計で、その中心にはGeneratorとDiscriminatorという2つのネットワークが存在します。

Generatorの構造
Pix2PixのGeneratorは、画像ピクセルの細かいディティールを捉えることが重要とされるため、U-NetというSemantic Segmentationで利用されるネットワークを使用しています。U-NetはEncoder-Decoder構造とスキップ接続を持ち、画像の詳細な情報を効果的に伝搬することができるため、Pix2Pixに適しています。

このU-Netの中には、複数の層にDropoutが設けられており、各層にノイズベクトルzが与えられるようになっています。これにより、高品質な画像の生成が可能になっています。また、Pix2Pixは、畳み込みニューラルネットワークを使う点で、DCGANの延長とも言えるでしょう。

Discriminatorの構造:
Pix2PixのDiscriminatorは、通常のGANにおけるぼやけた画像という問題に対処するための工夫が加えられています。具体的には、L1損失関数の追加とPatchGANというアイディアが取り入れられています。

  1. L1損失関数の追加: 画像変換問題では、本物らしさだけでなく、入力画像と出力画像の一致具合を測る指標が必要です。L1損失関数を用いて、条件画像と生成画像の全体像が一致するように学習させます。これにより、画像の低周波成分の正確さが測定されます。
  2. PatchGANの採用: 入力画像を解像度のパッチに分解し、各パッチ単位での識別を行います。これによって、Discriminatorは画像の高周波成分のモデル化に専念することができます。

この組み合わせにより、Pix2Pixでは、画像の全体像はL1損失関数で捉え、画像の詳細なディティールはCGANで捉えるようにし、それぞれの短所を補完し合って精度を向上させています。

さらに、GeneratorとDiscriminatorの畳み込み層には、Convolution-BatchNormalization-ReLUのモジュールが使用されています。

Pix2Pixの損失関数

Pix2Pixの定式化は、通常のGAN(生成敵対ネットワーク)の損失関数に、条件画像との対応関係を強化するための項を追加したものになります。

具体的には、Pix2Pixの損失関数は以下のように表現されます。

\begin{align*} \mathcal{L}_{\text{GAN}}(G,D) & = \mathbb{E}_{x,y} \left[ \log D(x, y) \right] + \mathbb{E}_{x,z} \left[ \log(1 – D(x, G(x,z))) \right] \\ \mathcal{L}_{L1}(G) & = \mathbb{E}_{x,y,z} \left[ \| y – G(x,z) \|_1 \right] \\ \mathcal{L}(G,D) & = \mathcal{L}_{\text{GAN}}(G,D) + \lambda \mathcal{L}_{L1}(G) \end{align*}
  • LGAN​(G,D) は、通常のGANの損失関数で、Discriminator Dが条件画像 x と実画像 y のペア、および条件画像 x と生成画像 G(x,z) のペアを本物かどうか識別することを目的としています。
  • LL1​(G) は、生成画像と実画像とのL1距離に基づく損失で、生成画像が実画像にできるだけ近づくようにする役割を果たします。この項が、画像の低周波成分を捉える役割を果たします。
  • λ は、L1損失の重みで、この値を調整することで、GANの損失とL1損失のバランスを調整します。

この損失関数を最小化するようにGeneratorとDiscriminatorを交互に訓練することで、Pix2Pixは条件画像から目的の画像を生成する学習を行います。この定式化により、生成画像が条件画像に忠実でありながら、実画像と似た分布から生成されるようになります。

まとめ

最後までご覧いただきありがとうございました。