GANシリーズのpix2pixGANネットワーク原理の紹介と論文の解釈

1. pix2pix GANとは

论文:《条件付き敵対的ネットワークによる画像から画像への変換》

       pix2pix GAN は主に画像間の変換 (画像変換とも呼ばれます) に使用されます。画像処理における多くの問題は、入力画像を対応する出力画像に変換すること、つまりエンドツーエンドのトレーニングです。CNN が最適化できるように各問題に従って特定の損失関数を設定したい場合は、通常、入力と出力の間のユークリッド距離を短縮するように CNN をトレーニングすることになりますが、これにより通常は出力がぼやけてしまいます。

 通常の GAN の G 部分の入力はランダム ベクトル、出力は画像、D 部分の入力は画像 (生成または実際)、出力は正しいか間違っているかです。このようにして、G と D は共同して実画像を出力できます。

Pix2pixgan は本質的に cgan であり、この cGAN の条件である画像 x を G と D に入力する必要があります。G の入力は x (x は変換対象の画像) で、出力は生成された画像 G(x) です。D は、{x, G(x)} と {x, y} を区別する必要があります。

第二に、発電機の設計 

画像翻訳タスクの場合、その G 入力は当然画像 x である必要があり、出力は当然画像 y であるため、ランダムな入力 z を追加する必要はなく、z を追加することで多様性をもたらすことができます。画像翻訳などのタスクでは、入力と出力の間で多くの情報が共有されます。例えば、輪郭情報が共有される。

 通常の畳み込みニューラル ネットワークを使用すると、各層がすべての情報を保持して保存することになるため、ニューラル ネットワークは間違いを犯しやすくなります。

スキップ接続を追加する理由:論文の著者は、画像翻訳などのタスクでは、入力と出力の間で多くの情報が共有されると述べました。例えば画像の色付けでは輪郭情報が共有される。ネットワークの層が深くなると、この共有情報が失われる可能性があります。 

U-Net は、EncoderDecoder モデルを変形した Encoder-Decoder モデルでもあります。いわゆる U-Net は i 層と ni 層をつなぎ合わせるものですが、これは i 層と ni 層の画像サイズが同じであり、次のように考えることができるためです。同様の情報を伝えます。 

入力として z を使用しない場合でも、ネットワークは x → y のマッピングを学習できますが、決定論的な出力が生成されます。GAN と DCGAN の両方で、多様性をもたらすためにジェネレーターの入力としてランダム ガウス ノイズ z を使用します。しかし pix2pixgan の論文では, この戦略は効果がないと指摘されています -- ジェネレータはノイズ入力を無視することを学習します. pix2pixgan モデルの場合, ジェネレータの層間にドロップアウトを追加することでランダム性が増加します. もちろんそのような効果も非常に限定的です。 

3. 識別器の設計 

        識別器の設計上の問題として、実際の画像を生成することに加えて、生成された画像が入力画像と一致することを保証する必要があるため、識別器の入力を変更する必要があります。したがって、D の入力にはいくつかの変更が加えられています。D は、画像のペアを入力することです。これは条件付き GAN に似ています。

Pix2PixのDは論文ではPatch-Dとして実装されていますが、いわゆるPatchとは、生成された画像がどんなに大きくても、複数の固定サイズのPatchに分割してDに入力して判定するというものです。この設計の利点は、D の入力が小さくなり、計算量が少なく、学習速度が速いことです。

PatchGAN を選択する理由 (マルコフ識別器)

      画像の一部をより適切に判断するために、著者は PatchGAN の構造を提案します。つまり、画像をパッチに分割し、各パッチの信頼性を個別に判断し、最後に平均を取るというものです。著者は最後に、この記事で提案されているPatchGANは、テクスチャ損失またはスタイル損失の別の形式とみなすことができると述べました。特定の実験では、さまざまなサイズのパッチのサイズが最終的に 70x70 であることが判明しました。

4. 損失関数の定義

弁別器ネットワーク損失関数:

  1. 実際のペア画像を入力し、1 として判定したい
  2. 生成した画像と元の画像を入力し、0と判定したい

生成ネットワーク損失関数: 生成された画像と元の画像を入力し、それを 1 として判定したい

画像翻訳タスクの場合、実際には G の入力と出力の間で多くの情報が共有されます。たとえば、画像の色付けタスクでは、入力と出力の間でサイド情報が共有されます。したがって、入力画像と出力画像の類似性を保証するために、L1lossも追加されます。

L1 および L2 損失を使用して再構成された画像は非常にぼやけています。つまり、L1 および L2 は画像の高周波部分 (画像のエッジなど) を十分に復元できませんが、画像の低周波部分は復元できます。画像ウェル (画像のカラー ブロックのエッジ)。

pix2pixでは、著者はL1 損失GAN 損失を組み合わせて使用​​します。これは、著者は、L1 損失が画像の低周波部分を復元でき、GAN 損失が画像の高周波部分を復元できると考えているためです。

 5. Pix2Pix 論文の要点の要約

  1. cGAN、入力はランダムベクトルではなく画像です
  2. U-Net、スキップ接続を使用してより多くの情報を共有してください
  3. マッピングを確実にするために入力を D にペアリングします
  4. 計算量を削減し効果を高めるPatch-D
  5. 入力と出力間の一貫性を確保するために、L1 損失関数が追加されています

6、実際の戦闘コード

実践的なプロジェクトのリファレンス: GAN 戦闘の Pytorch は pix2pixGAN を使用して建物の写真を生成します

現在、GAN のアプリケーションに関して、より興味深いアプリケーションは、GAN が画像スタイルの転送、画像のノイズ低減修復、および画像の超解像に使用されており、いずれも比較的良好な結果をもたらしています。詳細については、pix2pix GAN とサイクルを参照してください。ガン。

      pix2pixGAN の明らかな欠点は、トレーニング中にペアのデータセットを提供する必要があることです。たとえば、ゴッホ風の絵画を生成したい場合、ゴッホ自身が描いた作品が比較的少ない必要があるため、現時点ではcycleGANの使用を検討できます。参考文献は以下の通りです。

CycleGANネットワークの原理と論文の本質の解釈を理解するための1つの記事

GAN プロジェクトは実際に CycleGAN を使用してリンゴをオレンジに変える Pytorch バージョン

おすすめ

転載: blog.csdn.net/m0_62128864/article/details/124026977