以下の内容はhttps://cysec148.hatenablog.com/entry/2025/04/08/063505より取得しました。


第25回:Vanilla GANからDCGAN、Progressive GANまでの進化

Hello there, ('ω')ノ

🧠 はじめに:GANの進化と高品質画像生成への挑戦

GAN(Generative Adversarial Network:敵対的生成ネットワーク) は、
2014年に Ian Goodfellow らによって提案されて以来、
様々な改良モデルが登場し、
リアルな画像生成の精度が大幅に向上 しました。

GANの進化の歴史:
- Vanilla GAN(基本GAN) → 初期のGANモデル
- DCGAN(深層畳み込みGAN) → 画像生成の精度向上
- Progressive GAN(PGGAN) → 高解像度画像の段階的生成

応用分野:
- 画像生成・アニメーション制作
- スタイル変換・超解像
- 医療画像解析・3Dモデリング


📚 1. Vanilla GAN(基本GAN)の概要


📚 ① Vanilla GANの基本構造

Vanilla GAN は、
生成器(Generator, G)識別器(Discriminator, D)
2つのネットワークが競争する基本的なGANモデル です。


🎯 【Vanilla GANのアーキテクチャ】

[ノイズ z] → [生成器 G] → [生成データ x'] → [識別器 D] → [判別結果(本物/偽物)]
                                      ↑
                              [実データ x] → [識別器 D] → [判別結果(本物/偽物)]

生成器(G): ランダムノイズ z から データ x' を生成
識別器(D): 実データ x生成データ x' を見分ける


📊 ② Vanilla GANの損失関数

Vanilla GANは、以下の ミニマックス目的関数(Minimax Objective) を最適化します。

[ \min_G \max_D V(D, G) = \mathbb{E}{x \sim p{\text{data}}(x)} [\log D(x)] + \mathbb{E}_{z \sim p_z(z)} [\log (1 - D(G(z)))] ]

目的:
- D は本物のデータ x を 1 と判定(D(x) → 1)
- G は D を騙して D(G(z)) → 1 に近づける


❗️ ③ Vanilla GANの課題と限界

モード崩壊(Mode Collapse):
- G が同じデータのみ生成し、分布の多様性が失われる問題

学習の不安定性:
- D と G のバランスが崩れると、学習が収束しない

画像の低解像度:
- 初期のGANは解像度の低い画像しか生成できなかった


📚 2. DCGAN(深層畳み込みGAN)の進化


🧠 ① DCGANとは?

DCGAN(Deep Convolutional GAN) は、
Vanilla GAN をベースに CNN(畳み込みニューラルネットワーク) を導入し、
画像生成の精度と解像度を向上させたGANモデル です。

提案者: 2015年、Radford, Metz, Chintala による論文
目的:
- 画像生成の解像度・リアルさの向上
- モード崩壊と学習不安定性の改善


📚 ② DCGANの主な改良点

DCGANは、Vanilla GAN に以下の改良を加えています。

1. 畳み込み層(Convolutional Layers)の使用

  • 全結合層(FC) ではなく、畳み込み層と転置畳み込み層 を活用
  • 画像生成の空間的特徴を捉える ことで精度向上

2. バッチ正規化(Batch Normalization)の導入

  • バッチ正規化(BatchNorm) により学習の安定性を向上
  • 勾配消失問題の抑制

3. LeakyReLU の活用

  • 活性化関数 LeakyReLU で勾配の流れを維持
  • 生成器の ReLU と識別器の LeakyReLU で安定性確保

4. 画像解像度の向上

  • 128×128、256×256 などの高解像度画像生成が可能

🎨 ③ DCGANのアーキテクチャ

🎯 【DCGANの基本構造】

[ノイズ z] → [転置畳み込み層 ConvTranspose] → [生成画像 x'] → [識別器 D] → [判別結果]

畳み込み層(Conv2d): 実データと生成データの特徴を抽出
転置畳み込み層(ConvTranspose2d): 画像のアップサンプリング
バッチ正規化(BatchNorm): 勾配消失と過学習を抑制


📚 ④ DCGANの実装例(PyTorch)

import torch
import torch.nn as nn

# DCGANの生成器(Generator)
class DCGenerator(nn.Module):
    def __init__(self, latent_dim, output_channels):
        super(DCGenerator, self).__init__()
        self.model = nn.Sequential(
            nn.ConvTranspose2d(latent_dim, 512, kernel_size=4, stride=1, padding=0),
            nn.BatchNorm2d(512),
            nn.ReLU(),
            nn.ConvTranspose2d(512, 256, kernel_size=4, stride=2, padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(),
            nn.ConvTranspose2d(256, 128, kernel_size=4, stride=2, padding=1),
            nn.BatchNorm2d(128),
            nn.ReLU(),
            nn.ConvTranspose2d(128, output_channels, kernel_size=4, stride=2, padding=1),
            nn.Tanh()
        )

    def forward(self, z):
        return self.model(z)

# DCGANの識別器(Discriminator)
class DCDiscriminator(nn.Module):
    def __init__(self, input_channels):
        super(DCDiscriminator, self).__init__()
        self.model = nn.Sequential(
            nn.Conv2d(input_channels, 128, kernel_size=4, stride=2, padding=1),
            nn.LeakyReLU(0.2),
            nn.Conv2d(128, 256, kernel_size=4, stride=2, padding=1),
            nn.BatchNorm2d(256),
            nn.LeakyReLU(0.2),
            nn.Conv2d(256, 512, kernel_size=4, stride=2, padding=1),
            nn.BatchNorm2d(512),
            nn.LeakyReLU(0.2),
            nn.Conv2d(512, 1, kernel_size=4, stride=1, padding=0),
            nn.Sigmoid()
        )

    def forward(self, x):
        return self.model(x)

DCGANの高解像度画像生成が可能!


📚 3. Progressive GAN(PGGAN)の登場


🧠 ① Progressive GAN(PGGAN)とは?

Progressive GAN(PGGAN) は、
解像度を段階的に増加させながら生成器と識別器を訓練する手法 で、
高解像度画像の生成精度を劇的に向上させたモデル です。

提案者: 2017年、Tero Karras, NVIDIA
目的:
- 1024×1024などの超高解像度画像生成
- 学習の安定性向上とモード崩壊の回避


📚 ② Progressive GANの主な改良点

PGGANは、DCGAN に対して以下の改良を行っています。

1. 解像度の段階的成長(Progressive Growing)

  • 低解像度から徐々に解像度を増加
  • 4×4 → 8×8 → 16×16 → ... → 1024×1024

2. フェードイン(Fade-in)

  • 新しい層の追加時にスムーズな遷移
  • 識別器と生成器の連続的な変化を学習

3. 正則化(Regularization)の強化

  • ミニバッチ標準偏差(Mini-batch StdDev) により、
  • モード崩壊の防止と分布の安定性を確保

🎨 ③ Progressive GANのアーキテクチャ

🎯 【Progressive GANの構造】

4x4 → 8x8 → 16x16 → 32x32 → ... → 1024x1024

段階的成長: 低解像度から高解像度へ層を追加
フェードイン: 新しい層のスムーズな遷移


📚 ④ Progressive GANの損失関数

PGGANは、Wasserstein GAN(WGAN) の手法を応用し、
勾配ペナルティ(Gradient Penalty) を使用しています。

損失関数: Wasserstein 距離の最小化
[ L(D, G) = \mathbb{E}{x \sim p{\text{data}}(x)} [D(x)] - \mathbb{E}{z \sim p_z(z)} [D(G(z))] + \lambda \mathbb{E}{\hat{x} \sim \mathbb{P}{\hat{x}}} [(|\nabla{\hat{x}} D(\hat{x}) |_2 - 1)2] ]

目的:
- WGAN の勾配ペナルティで安定性を強化


📚 4. GANの進化のまとめ


🎯 ① Vanilla GAN → DCGAN → Progressive GAN の比較

特性 Vanilla GAN DCGAN Progressive GAN
モデル構造 全結合層 畳み込み層 + BatchNorm 解像度の段階的増加
解像度 28×28 128×128, 256×256 最大1024×1024
学習の安定性 低い 改善 高い
モード崩壊 発生しやすい 部分的に抑制 モード崩壊の回避
フェードイン機能 なし なし フェードイン導入
応用分野 基本画像生成 高解像度画像生成 超高解像度・リアル画像生成

📚 ② GANの進化による応用分野の拡大

画像生成:

  • 高解像度画像、リアルな顔画像、アニメキャラクター生成

医療画像解析:

  • MRI・CT 画像の高解像度化と異常検出

コンテンツ生成:

  • アバター生成、ゲームキャラクター制作、映像の自動生成

データ拡張:

  • 低リソース環境でのデータ補完と精度向上

🎁 まとめ:GANの進化と応用の可能性を理解しよう!

Vanilla GANは、GとDの競争による基本的な画像生成モデル。
DCGANは、CNNを導入して画像生成の精度と安定性を向上。
Progressive GANは、解像度を段階的に増加させることで超高解像度画像生成を実現。
GANの進化により、リアルな画像生成、医療画像の向上、データ拡張、スタイル変換などの応用分野が大幅に拡大した。

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/04/08/063505より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14