Skip to content
Published on

Text-to-Imageモデル学習方法論完全ガイド: GANからFlow Matchingまで

Authors
  • Name
    Twitter

1. はじめに: Text-to-Image生成モデルの進化

Text-to-Image(T2I)生成モデルは、自然言語テキストプロンプトから高解像度画像を生成する技術であり、過去数年間で急速に発展してきました。この分野の発展の軌跡は、大きく4つのパラダイムに分けることができます。

[Text-to-Imageモデル進化タイムライン]

2014-2019          2017-2020          2020-2023              2023-現在
    |                  |                  |                      |
   GAN              VAE/VQ-VAE        Diffusion Models      Flow Matching
    |                  |                  |                  + DiT
    v                  v                  v                      v
 ┌──────────┐    ┌──────────┐    ┌────────────────┐    ┌──────────────┐
 │StackGAN  │    │ VQ-VAE   │    │ DDPM (2020)    │    │ SD3 (2024) │AttnGAN   │    │ VQ-VAE-2 │    │ DALL-E 2(2022) │    │ Flux (2024) │StyleGAN  │    │ dVAE     │    │ Imagen (2022)  │    │ Pixart-Sigma │BigGAN    │    │          │    │ SD 1.x (2022)  │    │              │
 │GigaGAN   │    │          │    │ SDXL (2023)    │    │              │
 └──────────┘    └──────────┘    └────────────────┘    └──────────────┘

特徴:                特徴:              特徴:                   特徴:
- 敵対的           - 離散的         - 反復的             - 直線パス
  学習               潜在空間         ノイズ除去           - ODEベース
- モード崩壊       - コードブック     - Classifier-Free      - 少ステップ
  問題                学習             Guidance              - DiTバックボーン
- 高速生成               - 2段階        - 潜在空間              - スケーラブル
                      学習         - U-Netバックボーン

1.1 なぜ学習方法論が重要なのか

T2Iモデルの品質は、アーキテクチャ設計だけでなく学習方法論によっても決定的に左右されます。同一のアーキテクチャであっても、ノイズスケジューリング、条件付けアプローチ、データ品質、学習戦略によって生成品質は劇的に変化します。その好例がDALL-E 3で、アーキテクチャを変更することなくキャプション品質の改善だけで前世代から劇的なパフォーマンス向上を達成しました。

本記事では、各パラダイムのコア学習方法論を論文ベースで詳細に分析し、実践的な学習パイプラインの構成についても解説します。


2. コアアーキテクチャ別学習方法論

2.1 GANベース: 敵対的学習

**Generative Adversarial Network(GAN)**は、GeneratorとDiscriminatorの2つのネットワークが競争的に学習するフレームワークです。

2.1.1 基本的な学習原理

GANの学習目的関数はミニマックスゲームとして定義されます:

min_G max_D  V(D, G) = E_{x~p_data}[log D(x)] + E_{z~p_z}[log(1 - D(G(z)))]

- G (Generator): ランダムノイズzから画像を生成
- D (Discriminator): 実画像と生成画像を判別
- 学習目標: GDを騙し、Dは正確に判別

2.1.2 StyleGANの学習戦略

StyleGAN(Karras et al., 2019)は、Progressive GrowingとStyleベースのGeneratorを導入し、高品質な画像生成を可能にしました。

コア学習技術:

技術説明効果
Progressive Growing低解像度(4x4)から開始し段階的に解像度を上げる学習安定性の向上
Style Mixing異なる層に異なる潜在コードを注入多様性の向上
Path Length RegularizationGenerator Jacobianの正則化生成品質の向上
R1 RegularizationDiscriminator勾配ペナルティ学習の安定化
Lazy Regularization毎ステップではなく16ステップごとに正則化を適用学習効率の向上
# StyleGAN2コア学習ループ(簡略版)
for real_images, _ in dataloader:
    # 1. Discriminatorの学習
    z = torch.randn(batch_size, latent_dim)
    fake_images = generator(z)

    d_real = discriminator(real_images)
    d_fake = discriminator(fake_images.detach())

    d_loss = F.softplus(-d_real).mean() + F.softplus(d_fake).mean()

    # R1 Regularization(lazy: 16ステップごと)
    if step % 16 == 0:
        real_images.requires_grad = True
        d_real = discriminator(real_images)
        r1_grads = torch.autograd.grad(d_real.sum(), real_images)[0]
        r1_penalty = r1_grads.square().sum(dim=[1,2,3]).mean()
        d_loss += 10.0 * r1_penalty

    d_optimizer.zero_grad()
    d_loss.backward()
    d_optimizer.step()

    # 2. Generatorの学習
    z = torch.randn(batch_size, latent_dim)
    fake_images = generator(z)
    d_fake = discriminator(fake_images)
    g_loss = F.softplus(-d_fake).mean()

    g_optimizer.zero_grad()
    g_loss.backward()
    g_optimizer.step()

2.1.3 BigGANによる大規模学習

BigGAN(Brock et al., 2019)はGANを大規模にスケールアップしたモデルで、以下の学習戦略を採用しています:

  • 大規模バッチ: バッチサイズを最大2048まで増加させ、学習の安定性と品質を向上
  • クラス条件付きBatch Normalization: Batch Normalizationパラメータにクラス情報を注入
  • Truncation Trick: 推論時に潜在分布を切り詰め、品質と多様性のトレードオフを制御
  • 直交正則化: 重み行列の直交性を維持し、モード崩壊を防止

2.1.4 GANベースT2Iの限界

GANベースのアプローチは、以下の根本的な限界によりDiffusionベースのモデルに主役の座を譲りました:

  • モード崩壊: 生成の多様性が限定的
  • 学習の不安定性: ハイパーパラメータに敏感な不安定な学習
  • テキスト条件付けの困難さ: 複雑なテキストプロンプトを正確に反映することが困難
  • スケーリングの限界: 大規模化に伴う学習不安定性の増大

2.2 VAEベース: コードブック学習と離散潜在空間

2.2.1 VQ-VAE: Vector Quantized Variational Autoencoder

VQ-VAE(van den Oord et al., 2017)は、連続的な潜在空間ではなく離散的な潜在空間を学習するアプローチです。

[VQ-VAEアーキテクチャ]

入力画像       Encoder      量子化        Decoder      再構成
  (256x256) --> [E(x)] --> z_e --> [Codebook] --> z_q --> [D(z_q)] --> 画像
                             |        |
                             |   ┌────┴────┐
                             |   │ e_1     │
                             |   │ e_2     │  K個のコードベクトル
                             └──>...       (Codebook)
                                 │ e_K     │
                                 └─────────┘

  z_q = e_k  where k = argmin_j ||z_e - e_j||
  (最近傍コードベクトルに量子化)

VQ-VAE学習損失関数:

L = ||x - D(z_q)||²                    # 再構成損失
  + ||sg[z_e] - e||²                   # Codebook損失(EMA更新で代替可能)
  + β * ||z_e - sg[e]||²              # Commitment損失

- sg[·]: Stop-gradient演算子
- β: Commitment損失の重み(通常0.25- z_e: Encoder出力
- e: 選択されたcodebookベクトル

量子化操作は微分不可能であるため、**Straight-Through Estimator(STE)**を使用してエンコーダに勾配を伝達します。コードブック自体はExponential Moving Average(EMA)で更新されます。

# VQ-VAE Codebookコア学習コード
class VectorQuantizer(nn.Module):
    def __init__(self, num_embeddings, embedding_dim, commitment_cost=0.25):
        super().__init__()
        self.embedding = nn.Embedding(num_embeddings, embedding_dim)
        self.commitment_cost = commitment_cost

    def forward(self, z_e):
        # z_e: (B, D, H, W) -> (B*H*W, D)
        flat_z = z_e.permute(0, 2, 3, 1).reshape(-1, z_e.shape[1])

        # 最近傍コードブックベクトルを検索
        distances = (flat_z ** 2).sum(dim=1, keepdim=True) \
                  + (self.embedding.weight ** 2).sum(dim=1) \
                  - 2 * flat_z @ self.embedding.weight.t()
        indices = distances.argmin(dim=1)
        z_q = self.embedding(indices).view_as(z_e.permute(0, 2, 3, 1)).permute(0, 3, 1, 2)

        # 損失の計算
        codebook_loss = F.mse_loss(z_q.detach(), z_e)      # commitment
        commitment_loss = F.mse_loss(z_q, z_e.detach())     # codebook
        loss = commitment_loss + self.commitment_cost * codebook_loss

        # Straight-Through Estimator
        z_q_st = z_e + (z_q - z_e).detach()
        return z_q_st, loss, indices

2.2.2 VQ-VAE-2: 階層的コードブック学習

VQ-VAE-2(Razavi et al., 2019)は、マルチレベル階層的量子化を導入し、画像品質を大幅に向上させました。

[VQ-VAE-2階層構造]

                    トップレベル(低解像度)
                    ┌─────────────┐
                    │  32x32 grid │  グローバル構造情報
Codebook   │  (構図、全体的な形状)
                    └──────┬──────┘
                    ボトムレベル(高解像度)
                    ┌──────┴──────┐
                    │  64x64 grid │  細部ディテール情報
Codebook   │  (テクスチャ、エッジ)
                    └─────────────┘

VQ-VAE-2の画像生成パイプラインは以下の2段階で構成されます:

  1. Stage 1: VQ-VAE-2を学習し、画像を階層的離散コードにエンコード
  2. Stage 2: PixelCNNなどの自己回帰モデルで離散コードの事前分布を学習

このアプローチは、DALL-Eで使用されたdVAE(discrete VAE)に直接的な影響を与えました。


2.3 Diffusionベース: 現在のT2Iのコア

Diffusion Modelは現在のT2I生成における主流パラダイムです。データに段階的にノイズを加える順方向プロセスと、ノイズからデータを復元する逆方向プロセスを学習します。

2.3.1 DDPM: Denoising Diffusion Probabilistic Models

Ho et al.(2020)によるDDPMは、Diffusion Modelを実用レベルに引き上げた重要な論文です。

順方向プロセス(Diffusion):

q(x_t | x_{t-1}) = N(x_t; (1-β_t) * x_{t-1}, β_t * I)

- 各タイムステップtで少量のガウシアンノイズを追加
- β_t: ノイズスケジュール(通常linearまたはcosine)
- Tステップ後、x_T ≈ N(0, I)(純粋なガウシアンノイズ)

任意のタイムステップtで閉形式により直接ノイズを加えることが可能:

q(x_t | x_0) = N(x_t; (ᾱ_t) * x_0, (1-ᾱ_t) * I)

where ᾱ_t = ∏_{s=1}^{t} α_s,  α_t = 1 - β_t

=> x_t = (ᾱ_t) * x_0 + (1-ᾱ_t) * ε,  ε ~ N(0, I)

逆方向プロセス(Denoising):

p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), σ_t² * I)

- ニューラルネットワークε_θがx_tに加えられたノイズεを予測
- 予測されたノイズを除去してx_{t-1}を復元

学習目的関数(Simple Loss):

L_simple = E_{t, x_0, ε} [ ||ε - ε_θ(x_t, t)||² ]

- t ~ Uniform(1, T)
- ε ~ N(0, I)
- x_t = (ᾱ_t) * x_0 + (1-ᾱ_t) * ε
# DDPMコア学習ループ
def train_step(model, x_0, noise_scheduler):
    batch_size = x_0.shape[0]

    # 1. ランダムタイムステップサンプリング
    t = torch.randint(0, num_timesteps, (batch_size,))

    # 2. ノイズサンプリング
    noise = torch.randn_like(x_0)

    # 3. 順方向プロセス: x_tを生成
    alpha_bar_t = noise_scheduler.alpha_bar[t]
    x_t = torch.sqrt(alpha_bar_t) * x_0 + torch.sqrt(1 - alpha_bar_t) * noise

    # 4. ノイズ予測
    noise_pred = model(x_t, t)

    # 5. 損失計算(MSE)
    loss = F.mse_loss(noise_pred, noise)

    return loss

2.3.2 ノイズスケジューリング

ノイズスケジュールは順方向プロセスにおける各タイムステップで加えるノイズ量を決定し、生成品質に決定的な影響を与えます。

スケジュール計算式特徴使用モデル
Linearβ_t = β_min + (β_max - β_min) * t/Tシンプルだが末端でノイズが急増DDPM
Cosineᾱ_t = cos²((t/T + s)/(1+s) * π/2)滑らかな遷移、優れた情報保持Improved DDPM
Scaled Linearβ_t = (β_min^0.5 + t/T * (β_max^0.5 - β_min^0.5))²SD 1.xで使用Stable Diffusion
Sigmoidβ_t = σ(-6 + 12*t/T)両端での緩やかな変化一部の研究
EDMσ(t) = t, 対数正規サンプリング理論的に最適に近いPlayground v2.5, EDM
Zero Terminal SNRSNR(T) = 0を保証純粋なノイズからの開始を保証SD3, Flux

Playground v2.5(Li et al., 2024)はEDM(Karras et al., 2022)のノイズスケジュールを採用し、色彩とコントラストを大幅に改善しました。鍵となるのはZero Terminal SNRの確保で、学習時にタイムステップTでのSignal-to-Noise Ratio(SNR)が正確に0でなければなりません。

# Cosine Scheduleの実装
def cosine_beta_schedule(timesteps, s=0.008):
    steps = timesteps + 1
    x = torch.linspace(0, timesteps, steps)
    alphas_cumprod = torch.cos(((x / timesteps) + s) / (1 + s) * math.pi * 0.5) ** 2
    alphas_cumprod = alphas_cumprod / alphas_cumprod[0]
    betas = 1 - (alphas_cumprod[1:] / alphas_cumprod[:-1])
    return torch.clip(betas, 0.0001, 0.9999)

# EDM Noise Schedule(Karras et al., 2022)
def edm_sigma_schedule(num_steps, sigma_min=0.002, sigma_max=80.0, rho=7.0):
    step_indices = torch.arange(num_steps)
    t_steps = (sigma_max ** (1/rho) + step_indices / (num_steps - 1)
               * (sigma_min ** (1/rho) - sigma_max ** (1/rho))) ** rho
    return t_steps

2.3.3 Latent Diffusion Model(LDM)- Stable Diffusionのコア

Latent Diffusion Model(LDM)(Rombach et al., 2022)は、ピクセル空間ではなく潜在空間でDiffusionを実行することで、計算効率を劇的に向上させました。これがStable Diffusionのコアアイデアです。

[Latent Diffusion Modelアーキテクチャ]

                          Text Prompt
                         ┌────┴────┐
CLIPEncoder                         └────┬────┘
                              │ text embeddings
┌──────┐    ┌──────┐    ┌─────┴──────┐    ┌──────┐    ┌──────┐
│Image │    │ VAE  │    │   U-Net    │    │ VAE  │    │Output│
(512--->│Encode│---> (Denoising--->│Decode│--->│Image │
│x512) │    │  r   │    │  in Latent │    │  r   │    (512│      │    │      │    │   Space)   │    │      │    │x512)└──────┘    └──────┘    └────────────┘    └──────┘    └──────┘
              │                                 │
              │  64x64x4                        │
                (8xダウンサンプリング)              └─────────────────────────────────┘
                    潜在空間 (z)

学習: 潜在空間でのDiffusion
推論: ランダムノイズz_T -> U-Net Denoising -> VAE Decode -> 画像

LDM学習パイプライン:

  1. Stage 1 - Autoencoder学習: 画像データセットでVAE(KL正則化付き)を事前学習

    • Encoder: 画像x (H x W x 3) -> 潜在z (H/f x W/f x c)、f=8が一般的
    • Decoder: 潜在z -> 再構成画像
    • Loss: 再構成 + KLダイバージェンス + Perceptual Loss + GAN Loss
  2. Stage 2 - Diffusion Model学習: 凍結されたAutoencoderの潜在空間でDiffusion

    • 潜在z_0 = Encoder(x)にノイズを加えてz_tを生成
    • U-Netがz_tからノイズを予測
    • テキスト条件付けはcross-attentionで注入
# Latent Diffusionコア学習
class LatentDiffusionTrainer:
    def __init__(self, vae, unet, text_encoder, noise_scheduler):
        self.vae = vae              # 凍結
        self.unet = unet            # 学習可能
        self.text_encoder = text_encoder  # 凍結
        self.noise_scheduler = noise_scheduler

    def train_step(self, images, captions):
        # 1. VAEで潜在エンコーディング(勾配不要)
        with torch.no_grad():
            latents = self.vae.encode(images).latent_dist.sample()
            latents = latents * self.vae.config.scaling_factor  # 0.18215

        # 2. テキスト埋め込み(勾配不要)
        with torch.no_grad():
            text_embeddings = self.text_encoder(captions)

        # 3. ノイズ追加
        noise = torch.randn_like(latents)
        timesteps = torch.randint(0, 1000, (latents.shape[0],))
        noisy_latents = self.noise_scheduler.add_noise(latents, noise, timesteps)

        # 4. ノイズ予測
        noise_pred = self.unet(noisy_latents, timesteps, text_embeddings)

        # 5. MSE損失
        loss = F.mse_loss(noise_pred, noise)
        return loss

2.3.4 U-Netバックボーンの構造

Stable Diffusion 1.x/2.xおよびSDXLで使用されるU-Netは以下の構造を持ちます:

[Cross-Attention付きU-Netの構造]

入力z_t ─────────────────────────────────────────── 出力ε_θ
    │                                                     ▲
    ▼                                                     │
┌────────┐  ┌────────┐  ┌────────┐      ┌────────┐  ┌────────┐
Down   │  │ Down   │  │ Down   │      │  Up    │  │  UpBlock  │──│ Block  │──│ Block  │──┐   │ Block  │──│ Block│ 64x64  │  │ 32x32  │  │ 16x16  │  │   │ 32x32  │  │ 64x64  │
└────────┘  └────────┘  └────────┘  │   └────────┘  └────────┘
    │            │            │     │        ▲           ▲
    │            │            │     ▼        │           │
    │            │            │  ┌────────┐  │           │
    │            │            └──│ Middle │──┘           │
    │            │               │ Block  │              │
    │            │               │ 16x16  │              │
    │            └───────────────└────────┘──────────────┘
                        (skip connections)
    └────────────────────────────────────────────────────┘

各ブロックの内部構造:
┌──────────────────────────────────────┐
ResNet Block│  ├── GroupNormSiLUConv│  ├── Timestep Embedding注入│  └── GroupNormSiLUConv│                                       │
Self-Attention Block│  ├── LayerNormSelf-Attention│  └── Skip Connection│                                       │
Cross-Attention Block│  ├── LayerNorm│  ├── Q = Linear(潜在特徴)│  ├── K = Linear(テキスト埋め込み)    │  ← テキスト条件付け
│  ├── V = Linear(テキスト埋め込み)│  └── Attention(Q, K, V)│                                       │
Feed-Forward Block│  ├── LayerNormLinearGEGLU│  └── LinearSkip Connection└──────────────────────────────────────┘

SDXL(Podell et al., 2023)はU-Netを約3倍に拡大(約26億パラメータ)し、2つのテキストエンコーダ(OpenCLIP ViT-bigGとCLIP ViT-L)を使用し、様々なアスペクト比での学習を適用するなどの改善を行いました。

モデルU-Netパラメータテキストエンコーダ解像度VAEダウンサンプリング
SD 1.5約860MCLIP ViT-L/14 (1)512x5128x
SD 2.1約865MOpenCLIP ViT-H/14 (1)768x7688x
SDXL約2.6BOpenCLIP ViT-bigG + CLIP ViT-L (2)1024x10248x
SDXL Refiner約2.3BOpenCLIP ViT-bigG (1)1024x10248x

2.3.5 Classifier-Free Guidance(CFG)

Classifier-Free Guidance(CFG)(Ho & Salimans, 2022)は、現代のT2Iモデルにおけるコア学習技術です。

従来のClassifier Guidanceの問題点:

  • 別途分類器の学習が必要
  • ノイズの乗った画像で動作する分類器が必要
  • 推論時に分類器の勾配計算が必要

Classifier-Free Guidanceの核心アイデア:

学習時にテキスト条件付けを一定の確率(通常10-20%)で空文字列("")に置き換え、単一のモデルが条件付きと無条件の両方の生成を同時に学習します。

学習時:
  - 確率p_uncond(例: 10%: ε_θ(x_t, t,)  (無条件)
  - 確率1-p_uncond:          ε_θ(x_t, t, c)  (条件付き)

推論時:
  ε_guided = ε_θ(x_t, t,) + w * (ε_θ(x_t, t, c) - ε_θ(x_t, t,))

  - w: guidance scale(通常7.515  - w=1: 条件付き予測そのまま
  - w>1: テキスト条件の方向により強く移動
# Classifier-Free Guidance学習の実装
def train_step_cfg(model, x_0, text_cond, p_uncond=0.1):
    noise = torch.randn_like(x_0)
    t = torch.randint(0, T, (x_0.shape[0],))
    x_t = add_noise(x_0, noise, t)

    # ランダムに条件付けをドロップ
    mask = torch.rand(x_0.shape[0]) < p_uncond
    cond = text_cond.clone()
    cond[mask] = empty_text_embedding  # null conditioning

    noise_pred = model(x_t, t, cond)
    loss = F.mse_loss(noise_pred, noise)
    return loss

# Classifier-Free Guidance推論
def sample_cfg(model, x_T, text_cond, guidance_scale=7.5):
    x_t = x_T
    for t in reversed(range(T)):
        # 無条件予測
        eps_uncond = model(x_t, t, empty_text_embedding)
        # 条件付き予測
        eps_cond = model(x_t, t, text_cond)
        # ガイド付き予測
        eps = eps_uncond + guidance_scale * (eps_cond - eps_uncond)
        x_t = denoise_step(x_t, eps, t)
    return x_t

CFGは生成品質とテキスト忠実度を劇的に向上させますが、guidance scaleが高すぎると画像が過飽和になったりアーティファクトが発生したりします。

2.3.6 DALL-E 2: CLIPベースのDiffusion

DALL-E 2(Ramesh et al., 2022)は、CLIP埋め込み空間を活用した2段階Diffusionアーキテクチャを導入しました。

[DALL-E 2学習パイプライン]

Text ──→ CLIP Text Encoder ──→ text embedding
                              ┌─────┴─────┐
Prior    │  text emb → CLIP image emb
                               (Diffusion)                              └─────┬─────┘
CLIP image embedding
                              ┌─────┴─────┐
DecoderCLIP image emb → 64x64画像
                               (Diffusion)                              └─────┬─────┘
                                    │ 64x64
                              ┌─────┴─────┐
Super-Res  │  64x64 → 256x256 → 1024x1024
                               (Diffusion)                              └─────────── ┘

2.3.7 Imagen: T5テキストエンコーダの威力

GoogleのImagen(Saharia et al., 2022)は、**T5-XXL(46億パラメータ)**テキストエンコーダを使用してテキスト理解を最大化しました。

主要な知見:

  • テキストエンコーダのスケーリングはU-Netのスケーリングよりも効果的
  • T5-XXL > CLIP ViT-L(テキスト理解品質において)
  • Dynamic Thresholding: 高いCFGスケールでも安定した生成
[Imagenアーキテクチャ]

Text ──→ T5-XXL(凍結)──→ text embeddings
                              ┌─────┴─────┐
Base Model │  64x64生成
                                (U-Net)   │  cross-attention
                              └─────┬─────┘
                              ┌─────┴─────┐
SR Model 1 │  64x64 → 256x256
                                (U-Net)                              └─────┬─────┘
                              ┌─────┴─────┐
SR Model 2 │  256x256 → 1024x1024
                                (U-Net)                              └─────────── ┘

2.3.8 DiT: Diffusion Transformer

DiT(Diffusion Transformer)(Peebles & Xie, 2023)は、U-NetをTransformerに置き換えたアーキテクチャで、最近のT2Iモデルの主流となりつつあります。

[DiTブロックの構造]

     入力トークン(パッチ化された潜在表現)
    ┌──────┴──────┐
LayerNorm  │ ← adaLN-Zero(適応的)
      (adaptive) │   γ, β = MLP(timestep + class)
    └──────┬──────┘
    ┌──────┴──────┐
Self-Attention    └──────┬──────┘
            (+ residual)
    ┌──────┴──────┐
LayerNorm  │ ← adaLN-Zero
      (adaptive)    └──────┬──────┘
    ┌──────┴──────┐
PointwiseFFN    └──────┬──────┘
            (+ residual, αでスケーリング)
     出力トークン

DiTの主要な設計判断:

  • Patchify: 潜在表現をp x pパッチに分割し、線形射影でトークン列に変換
  • adaLN-Zero: 適応的Layer Normalization、タイムステップとクラス情報をLNパラメータに注入
  • スケーリング: モデルサイズ(深さ、幅)による体系的なスケーリング則の検証
DiTバリアント深さパラメータGFLOPs
DiT-S/21238433M6
DiT-B/212768130M23
DiT-L/2241024458M80
DiT-XL/2281152675M119

2.4 自己回帰ベースのT2I

2.4.1 DALL-E(初代): トークンベースの自己回帰生成

DALL-E(Ramesh et al., 2021)は画像を離散トークンに変換し、テキストトークンと画像トークンを単一のシーケンスに連結して、自己回帰Transformerで結合分布を学習します。

[DALL-E学習パイプライン]

Stage 1: dVAE学習
  Image (256x256) ──→ dVAE Encoder ──→ 32x32グリッドのトークン(8192語彙)
                                           ──→ dVAE Decoder ──→ 再構成画像

  Loss: 再構成 + KLダイバージェンス(Gumbel-Softmax緩和)

Stage 2: Autoregressive Transformer学習
  [BPEテキストトークン (256)] + [画像トークン (1024)] = 1280トークン

  Transformer(120億パラメータ):
  - 64層、62アテンションヘッド
  - 学習目的: next-token prediction(クロスエントロピー)
  - テキストトークンはcausal attention(左→右)
  - 画像トークンはrow-major orderで自己回帰生成
  - テキスト→画像のcross-attentionを含む

2.4.2 Parti: Encoder-Decoderベース

GoogleのParti(Yu et al., 2022)はT2Iをsequence-to-sequence問題として定式化し、ViT-VQGANトークナイザとEncoder-Decoder Transformerを組み合わせました。

主要な特徴:

  • ViT-VQGAN: Vision Transformerベースの画像トークナイザ
  • Encoder-Decoder: テキストエンコーディングにはEncoder、画像トークン生成にはDecoderを使用
  • スケーリング: 350Mから3B、20Bへの体系的なスケールアップ
  • 20Bモデルでは Imagenに匹敵する品質を達成

2.4.3 CM3Leon: 効率的なマルチモーダル自己回帰

MetaのCM3Leon(Yu et al., 2023)は自己回帰アプローチの効率を大幅に改善しました:

  • Retrieval-Augmented Training: 学習中に関連する画像-テキストペアを検索してコンテキストに追加
  • Decoder-Only: Partiとは異なる純粋なdecoder-onlyアーキテクチャ
  • Instruction Tuning: 様々なタスクに対する教師ありファインチューニング
  • 学習コスト5分の1: 同等のパフォーマンスで学習計算量を1/5に削減
  • MS-COCO zero-shot FIDで4.88を達成

2.5 Flow Matching: 次世代学習パラダイム

2.5.1 Flow Matchingの基本原理

Flow Matching(Lipman et al., 2023)は、Diffusionの確率的プロセスではなく、決定論的ODE(常微分方程式)を通じてノイズ分布からデータ分布への直線パスを学習します。

[Diffusion vs Flow Matching比較]

Diffusion(確率的):              Flow Matching(決定論的):
  x_0 ~~~> x_T                         x_0 ──────> x_1
  (曲線パス、多くのステップが必要)              (直線パス、少ないステップで可能)

  x₀ •                                x₀ •
     \  曲線                              \  直線
      \    パス                            \    パス
       \                                    \
        \                                    \
     x_T •                              x₁   (= ノイズ)

dx = f(x,t)dt + g(t)dW              dx/dt = v_θ(x_t, t)
SDEベース)                         (ODEベース、velocity field学習)

Flow Matching学習目的関数:

L_FM = E_{t, x_0, x_1} [ ||v_θ(x_t, t) - u_t(x_t | x_0, x_1)||² ]

where:
  x_t = (1 - t) * x_0 + t * x_1      (線形補間)
  u_t = x_1 - x_0                      (目標速度: 直線パス)
  t ~ Uniform(0, 1)                    (またはlogit-normal)
  x_0 ~ p_data(実データ)
  x_1 ~ N(0, I)(ガウシアンノイズ)

2.5.2 Rectified Flow

Rectified Flow(Liu et al., 2023, ICLR 2023 Spotlight)はFlow Matchingの重要なバリアントで、最適輸送の観点からノイズ-データペアを直線で接続します。

核心アイデア:

  1. 1-Rectified Flow: データx_0とノイズx_1をランダムにペアリングし、直線パスを学習
  2. 2-Rectified Flow(Reflow): 1-Rectified Flowで生成したペアを再度直線化し、パスをより直線に近づける
  3. 蒸留: 直線化されたモデルを1ステップモデルに蒸留
# Rectified Flowコア学習
def rectified_flow_train_step(model, x_0, x_1=None):
    """
    x_0: 実データ(潜在表現)
    x_1: ノイズ(Noneの場合はランダムサンプリング)
    """
    if x_1 is None:
        x_1 = torch.randn_like(x_0)

    # 時間サンプリング(SD3ではlogit-normal)
    t = torch.sigmoid(torch.randn(x_0.shape[0]))  # logit-normal
    t = t.view(-1, 1, 1, 1)

    # 線形補間
    x_t = (1 - t) * x_0 + t * x_1

    # 目標速度(直線方向)
    target_v = x_1 - x_0

    # 速度予測
    v_pred = model(x_t, t)

    # 損失
    loss = F.mse_loss(v_pred, target_v)
    return loss

2.5.3 Stable Diffusion 3におけるFlow Matching

SD3(Esser et al., 2024)は、大規模T2IモデルにRectified Flowを初めて適用したモデルです。論文「Scaling Rectified Flow Transformers for High-Resolution Image Synthesis」からの主要な貢献:

1. Logit-Normalタイムステップサンプリング:

一様分布ではなく、logit-normal分布を使用してタイムステップをサンプリングし、軌道の中間部分(最も予測が難しい区間)により大きな重みを付与します。

# SD3のLogit-Normalタイムステップサンプリング
def logit_normal_sampling(batch_size, m=0.0, s=1.0):
    """中間タイムステップにより大きな重みを付与"""
    u = torch.randn(batch_size) * s + m
    t = torch.sigmoid(u)  # (0, 1)範囲
    return t

2. MM-DiT(Multi-Modal Diffusion Transformer):

SD3はテキストと画像に別々の重みを使用しながら、双方向の情報フローを可能にする新しいTransformerアーキテクチャを導入しました。

[MM-DiTブロック]

  画像トークン           テキストトークン
       │                     │
  ┌────┴────┐          ┌────┴────┐
  │adaLN(t)│adaLN(t)  └────┬────┘          └────┬────┘
       │                     │
       └──────┬──────────────┘
               (concatenate)
       ┌──────┴──────┐
Joint Self- │  画像-テキストトークンが
Attention  │     相互にattend
       └──────┬──────┘
               (split)
       ┌──────┴──────────────┐
       │                     │
  ┌────┴────┐          ┌────┴────┐
FFN   │          │   FFN   (image) (text)  └────┬────┘          └────┬────┘
       │                     │
  画像出力              テキスト出力

3. スケーリング則:

モデルブロック数パラメータパフォーマンス(検証損失)
SD3-S15450M高い
SD3-M242B中程度
SD3-L388B低い(最高性能)

モデルサイズと学習ステップの増加に伴い、検証損失が着実に減少する滑らかなスケーリングが確認されました。

2.5.4 Flux: Black Forest LabsのFlow Matchingモデル

Flux(Black Forest Labs, 2024)はSD3のRectified Flow + Transformerアーキテクチャをベースとしたモデルです。

バリアント学習方法推論ステップ特徴
FLUX.1 [pro]フル学習25-50最高品質、APIのみ
FLUX.1 [dev]Guidance Distillation25-50効率的な推論、オープンウェイト
FLUX.1 [schnell]Latent Adversarial Diffusion Distillation1-4超高速生成

Guidance Distillation: StudentモデルがCFGなしでTeacherモデル(CFG使用)の出力を再現するように学習し、推論時のCFG計算(2回のforward pass)を排除します。

Latent Adversarial Diffusion Distillation(LADD): GANの敵対的損失とDiffusion蒸留を組み合わせ、1-4ステップでの生成を可能にします。


3. テキスト条件付け方法論

テキスト条件付けは、T2Iモデルにおいてテキストプロンプトの意味を画像生成プロセスに注入するメカニズムです。テキストエンコーダと条件付け方法の選択は、生成品質に決定的な影響を与えます。

3.1 CLIPテキストエンコーダ

OpenAIのCLIP(Contrastive Language-Image Pre-training, Radford et al., 2021)は、4億の画像-テキストペアで対照学習されたモデルです。

[CLIP学習プロセス]

  Image ──→ Image Encoder ──→ image embedding ─┐
                                                 ├─ cosine similarity
  Text  ──→ Text Encoder  ──→ text embedding  ─┘

  学習目的: マッチするペアの類似度を上げ、マッチしないペアの類似度を下げる
  (InfoNCE Loss)

CLIPテキストエンコーダの特徴:

  • トークンシーケンス埋め込みと[EOS]トークンのプール済み埋め込みの両方を活用可能
  • 最大77トークンの長さ制限
  • 画像-テキストのアラインメントに強い
  • 視覚的概念に特化したテキスト理解
CLIPバリアントパラメータ使用モデル
CLIP ViT-L/14約124M(text)SD 1.x
OpenCLIP ViT-H/14約354M(text)SD 2.x
OpenCLIP ViT-bigG/14約694M(text)SDXL(プライマリ)
CLIP ViT-L/14約124M(text)SDXL(セカンダリ)

3.2 T5テキストエンコーダ

GoogleのT5(Text-to-Text Transfer Transformer, Raffel et al., 2020)は、純粋なテキストコーパスで学習された大規模言語モデルです。

T5の利点(Imagen論文で実証):

  • CLIPよりもはるかに大きなテキストコーパスで学習(C4データセット)
  • 複雑な文構造や関係性の理解に優れる
  • 空間関係、数量、属性の組み合わせを含む複雑なプロンプトを処理する能力
  • テキストエンコーダのスケーリングがU-Netのスケーリングより効果的(Imagenの主要発見)
T5バリアントパラメータ使用モデル
T5-Small60M実験用
T5-Base220M実験用
T5-Large770M実験用
T5-XL3BPixArt-alpha
T5-XXL4.6BImagen, SD3, Flux
Flan-T5-XL3BPixArt-sigma

3.3 Cross-Attentionメカニズム

Cross-attentionは、U-NetまたはDiT内でテキスト情報を画像特徴に注入するコアメカニズムです。

# Cross-Attentionの実装
class CrossAttention(nn.Module):
    def __init__(self, d_model, d_context, n_heads):
        super().__init__()
        self.n_heads = n_heads
        self.d_head = d_model // n_heads

        self.to_q = nn.Linear(d_model, d_model, bias=False)      # 潜在 → Q
        self.to_k = nn.Linear(d_context, d_model, bias=False)     # テキスト → K
        self.to_v = nn.Linear(d_context, d_model, bias=False)     # テキスト → V
        self.to_out = nn.Linear(d_model, d_model)

    def forward(self, x, context):
        """
        x: (B, H*W, d_model) - 画像潜在特徴
        context: (B, seq_len, d_context) - テキスト埋め込み
        """
        q = self.to_q(x)          # 画像がQuery
        k = self.to_k(context)    # テキストがKey
        v = self.to_v(context)    # テキストがValue

        # Multi-headリシェイプ
        q = q.view(B, -1, self.n_heads, self.d_head).transpose(1, 2)
        k = k.view(B, -1, self.n_heads, self.d_head).transpose(1, 2)
        v = v.view(B, -1, self.n_heads, self.d_head).transpose(1, 2)

        # Attention
        attn = (q @ k.transpose(-2, -1)) / math.sqrt(self.d_head)
        attn = F.softmax(attn, dim=-1)
        out = attn @ v

        out = out.transpose(1, 2).reshape(B, -1, d_model)
        return self.to_out(out)

3.4 Pooled Text Embeddings vs Sequence Embeddings

現代のT2Iモデルは2種類のテキスト埋め込みを同時に活用します:

[テキスト埋め込みの種類]

Text: "a photo of a cat"
    ┌────┴────┐
TextEncoder    └────┬────┘
    ┌────┴──────────────────────┐
    │                           │
    ▼                           ▼
 Sequence Embeddings         Pooled Embedding
 (トークンレベル)              (文レベル)
 [h_1, h_2, ..., h_n]       h_pool = h_[EOS]
 Shape: (seq_len, d)         Shape: (d,)
    │                           │
    │                           │
    ▼                           ▼
 Cross-Attentionに使用       グローバル条件付けに使用
 (詳細なトークン別情報)       (文全体の意味)
                              - Timestep embeddingに加算
                              - adaLNパラメータ調整
                              - Vector conditioning

SDXLでのデュアルテキストエンコーダの使用:

# SDXLテキスト条件付け
def get_sdxl_text_embeddings(text, clip_l, clip_g):
    # CLIP ViT-L: sequence embeddings (77, 768)
    clip_l_output = clip_l(text)
    clip_l_seq = clip_l_output.last_hidden_state      # (77, 768)
    clip_l_pooled = clip_l_output.pooler_output        # (768,)

    # OpenCLIP ViT-bigG: sequence embeddings (77, 1280)
    clip_g_output = clip_g(text)
    clip_g_seq = clip_g_output.last_hidden_state       # (77, 1280)
    clip_g_pooled = clip_g_output.pooler_output        # (1280,)

    # sequence embeddingsを連結 -> Cross-Attentionに使用
    text_embeddings = torch.cat([clip_l_seq, clip_g_seq], dim=-1)  # (77, 2048)

    # pooled embeddingsを連結 -> Vector conditioningに使用
    pooled_embeddings = torch.cat([clip_l_pooled, clip_g_pooled], dim=-1)  # (2048,)

    return text_embeddings, pooled_embeddings

SD3とFluxはさらにT5-XXLのsequence embeddingsを組み合わせ、トリプルテキストエンコーダ構成を使用します:

エンコーダ役割出力Shape用途
CLIP ViT-L視覚アラインメントpooled (768) + seq (77, 768)pooled → vector cond
OpenCLIP ViT-bigG視覚アラインメントpooled (1280) + seq (77, 1280)pooled → vector cond
T5-XXLテキスト理解seq (最大256/512, 4096)cross-attn / joint-attn

4. 学習データセット

T2Iモデルの品質は学習データの規模と品質に直接依存します。以下は主要な大規模データセットのまとめです。

4.1 主要データセットの比較

データセット規模ソースフィルタリング方法主な使用モデル
LAION-5B58.5億ペアCommon CrawlCLIP類似度 > 0.28(英語)SD 1.x, SD 2.x
LAION-400M4億ペアCommon CrawlCLIP類似度フィルタ初期研究
LAION-Aesthetics約1.2億ペアLAION-5Bサブセット美的スコア > 4.5/5.0SDファインチューニング
CC3M330万ペアGoogle検索自動フィルタリングパイプライン研究
CC12M1,200万ペアGoogle検索緩やかなフィルタリング研究
COYO-700M7.47億ペアCommon Crawl画像 + テキストフィルタリング研究
WebLi100億画像ウェブクロール上位10% CLIP類似度PaLI, Imagen
JourneyDB約460万ペアMidjourney高品質プロンプト-画像研究
SAM1,100万画像多様なソース手動 + モデルベースSegmentation + T2I
Internal(非公開)数十億ペア非公開非公開DALL-E 3, Midjourney

4.2 LAION-5Bフィルタリングパイプライン

LAION-5B(Schuhmann et al., 2022)は最も広く使用されているオープンT2I学習データセットです:

[LAION-5Bデータ収集・フィルタリングパイプライン]

Common Crawl(ウェブアーカイブ)
1. HTMLパース: <img>タグからsrc URL + alt-textを抽出
2. 画像ダウンロード(img2dataset)
   - 最小解像度フィルタ: width, height ≥ 64
   - 最大アスペクト比: 3:1
3. CLIP類似度フィルタリング
   - OpenAI CLIP ViT-B/32でimage-text similarityを計算
   - 英語: cosine similarity ≥ 0.28
   - その他の言語: cosine similarity ≥ 0.26
4. 安全性フィルタリング
   - NSFW検出スコア(CLIPベース)
   - ウォーターマーク検出スコア
   - 有害コンテンツ検出
5. 重複除去(deduplication)
   - ハッシュベースの完全重複除去
   - CLIP embeddingベースの近似重複除去
最終: 58.5億画像-テキストペア
 - 23.2億 英語
 - 22.6億 その他100以上の言語
 - 12.7億 言語未確認

4.3 データ品質評価

最新のモデルはデータ量よりもデータ品質を重視する傾向にあります:

1. CLIPスコアベースのフィルタリング:

# CLIPスコア計算
from transformers import CLIPModel, CLIPProcessor
model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")

inputs = processor(text=[caption], images=[image], return_tensors="pt")
outputs = model(**inputs)
clip_score = outputs.logits_per_image.item() / 100.0  # 正規化

2. 美的スコアフィルタリング:

LAION-Aestheticsは、別途の美的予測器(CLIP embeddingからMLPでスコアを予測)を学習し、美的スコア4.5以上の画像のみを抽出したサブセットです。

3. キャプション品質の改善(DALL-E 3のコアイノベーション):

DALL-E 3(Betker et al., 2023)はアーキテクチャを変更することなく、キャプション品質の改善だけで劇的なパフォーマンス向上を達成しました:

  • 専用の画像キャプショニングモデルを学習し、詳細な合成キャプションを生成
  • 95%の合成キャプション + 5%のオリジナルキャプションで学習
  • 3種類の比較実験: 短い合成、詳細な合成、人間のアノテーション
  • 詳細な合成キャプションが圧倒的に優れている
[DALL-E 3キャプション改善の効果]

改善前: "cat on table"
      -> 曖昧で詳細情報が不足

改善後: "A fluffy orange tabby cat sitting on a round wooden
       dining table, natural sunlight streaming through a
       window behind, casting soft shadows. The cat has
       bright green eyes and is looking directly at the camera."
      -> 詳細な属性、空間関係、照明情報を含む

4.4 データ前処理技術

前処理技術説明効果
Center Crop画像の中央を正方形にクロップ解像度の標準化
Random Cropランダムな位置でクロップデータ拡張
Bucket Sampling類似するアスペクト比の画像をグループ化マルチアスペクト比学習(SDXL)
Caption Dropout一定確率でキャプションを空文字列に置き換えCFG学習のサポート
Multi-resolution低解像度から高解像度への段階的学習学習効率 + 品質
Tag Shufflingタグの順序をランダムにシャッフルテキスト順序バイアスの低減

5. ファインチューニング & カスタマイズ技術

事前学習済みT2Iモデルを特定のスタイル、被写体、制御条件に適応させるファインチューニング技術は、実用的なアプリケーションに不可欠です。

5.1 LoRA(Low-Rank Adaptation)

LoRA(Hu et al., 2022)は大規模モデルの重みを効率的にファインチューニングする方法で、T2Iモデルでも広く使用されています。

[LoRAの原理]

元の重み:  W_0R^{d×k}  (固定、凍結)
LoRA更新: ΔW = B × A      where AR^{r×k}, BR^{d×r}

最終出力: h = W_0 x + ΔW x = W_0 x + B(Ax)

- r << min(d, k): 低ランク(通常4, 8, 16, 32, 64- 学習パラメータ: ABのみ(全体に比べて非常に少ない)
- 元の重みは固定 → メモリ効率が良い
# LoRA適用例(Stable Diffusion U-Net attentionレイヤー)
class LoRALinear(nn.Module):
    def __init__(self, original_layer, rank=4, alpha=1.0):
        super().__init__()
        self.original = original_layer  # 凍結
        in_features = original_layer.in_features
        out_features = original_layer.out_features

        # LoRAレイヤー
        self.lora_A = nn.Linear(in_features, rank, bias=False)
        self.lora_B = nn.Linear(rank, out_features, bias=False)
        self.scale = alpha / rank

        # 初期化
        nn.init.kaiming_uniform_(self.lora_A.weight)
        nn.init.zeros_(self.lora_B.weight)  # Bを0で初期化 -> 開始時はオリジナルと同一

    def forward(self, x):
        original_out = self.original(x)        # 凍結されたオリジナル出力
        lora_out = self.lora_B(self.lora_A(x)) # LoRA更新
        return original_out + self.scale * lora_out

LoRA学習設定(Diffusersベース):

# Diffusers LoRA学習実行例
accelerate launch train_text_to_image_lora.py \
  --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
  --dataset_name="lambdalabs/naruto-blip-captions" \
  --resolution=1024 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --max_train_steps=15000 \
  --learning_rate=1e-04 \
  --lr_scheduler="cosine" \
  --lr_warmup_steps=0 \
  --rank=4 \
  --mixed_precision="fp16" \
  --output_dir="./sdxl-naruto-lora"
LoRAパラメータ一般的な範囲影響
Rank (r)4-128値が大きいほど表現力とメモリ使用量が増加
Alpha (α)rankと同じ~2倍学習率のスケーリング
Target Modulesattn Q,K,V,O + FFN適用範囲
Learning Rate1e-4~1e-5収束速度
学習時間5-30分(単一GPU)高速なイテレーションが可能
ファイルサイズ1-200 MB共有・配布が容易

5.2 DreamBooth

DreamBooth(Ruiz et al., 2023)は、3-5枚の画像で特定の被写体のコンセプトをモデルに注入する技術です。

[DreamBooth学習プロセス]

入力: 特定被写体の3-5枚の画像 + 固有識別子 "[V]"
      : "a [V] dog"(特定の犬)

学習戦略:
1. 被写体画像でモデルをファインチューニング
   - "a [V] dog" → 該当犬の画像

2. Prior Preservation Loss(重要!)
   - 元のモデルで事前に"a dog"画像を生成
   - ファインチューニング中に一般的な犬の生成能力を保持
   - 言語ドリフトの防止

L = L_recon([V] images) + λ * L_prior(class images)
# DreamBooth + LoRA学習(推奨の組み合わせ)
# diffusersライブラリベース
accelerate launch train_dreambooth_lora.py \
  --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
  --instance_data_dir="./my_dog_images" \
  --instance_prompt="a photo of sks dog" \
  --class_data_dir="./class_dog_images" \
  --class_prompt="a photo of dog" \
  --with_prior_preservation \
  --prior_loss_weight=1.0 \
  --num_class_images=200 \
  --resolution=1024 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-4 \
  --lr_scheduler="constant" \
  --max_train_steps=500 \
  --rank=4 \
  --mixed_precision="fp16"

5.3 Textual Inversion

Textual Inversion(Gal et al., 2023)は、モデルの重みを一切変更せず新しいトークン埋め込みのみを学習する方法です。

[Textual Inversion]

既存のトークン空間:  [cat] [dog] [car] [tree] ...
新しいトークンを追加:           [S*] 学習する新しいコンセプト
学習: 3-5枚の画像で[S*]の埋め込みベクトルのみを最適化
モデル全体は凍結

利点: 最小限のパラメータ(1トークン = 768または1024個のfloat)
欠点: LoRA/DreamBoothより表現力が低い

5.4 ControlNet

ControlNet(Zhang & Agrawala, 2023)は、事前学習済みDiffusionモデルに**構造的条件(エッジ、深度、ポーズなど)**を追加する方法です。

[ControlNetアーキテクチャ]

                   制御入力(例: Cannyエッジ)
                    ┌─────┴─────┐
ZeroConv                    └─────┬─────┘
                    ┌─────┴─────┐
ロックされたU-Net    │ 学習可能   │  U-Net Encoderのコピー
(オリジナル固定)    │  Copy of  │     (学習可能)
    │               │ U-Net Enc    │               └─────┬─────┘
    │                     │
    │               ┌─────┴─────┐
    │               │  Zero     │  学習開始時に出力が0
    │               │  Conv     │     (オリジナルモデルに影響を与えずに開始)
    │               └─────┬─────┘
    │                     │
    └─────── + ───────────┘  オリジナルU-Netの特徴に加算
              最終出力

ControlNetのコア学習技術 - Zero Convolution:

# Zero Convolution: 重みとバイアスを0で初期化
class ZeroConv(nn.Module):
    def __init__(self, in_channels, out_channels):
        super().__init__()
        self.conv = nn.Conv2d(in_channels, out_channels, 1)
        nn.init.zeros_(self.conv.weight)
        nn.init.zeros_(self.conv.bias)

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

# 学習開始時: zero conv出力 = 0
# -> ControlNetを追加してもオリジナルモデルの出力に影響なし
# -> 学習が進むにつれて徐々に制御信号を反映
条件タイプ入力用途
Canny Edgeエッジマップ輪郭ベースの生成
Depth深度マップ3D構造の保持
OpenPose関節位置人体ポーズ制御
Semantic Segmentationセグメンテーションマップレイアウト制御
Scribble落書きラフな構図
Normal Map法線マップ3D形状制御
Tile低解像度/タイル超解像

5.5 IP-Adapter

IP-Adapter(Image Prompt Adapter)(Ye et al., 2023)は、画像をプロンプトとして使用し、スタイルや被写体を転送するアダプターです。

[IP-Adapterアーキテクチャ]

参照画像 ──→ CLIP Image Encoder ──→ image features
                                         ┌─────┴─────┐
Projection │  学習可能
Layer                                         └─────┬─────┘
                                         ┌─────┴─────┐
Decoupled │  独立したcross-attention
Cross-Attn │    (テキストcross-attnと分離)
                                         └─────┬─────┘
オリジナルU-Net Cross-Attention ────── + ───────┘
(テキスト条件付け)

出力 = Text_CrossAttn(Q, K_text, V_text) + λ * Image_CrossAttn(Q, K_img, V_img)

5.6 ファインチューニング技術の比較

技術変更対象学習画像学習時間ファイルサイズ主な用途
LoRAAttention重み(低ランク)数十〜数千枚5-30分1-200MBスタイル、コンセプト
DreamBoothモデル全体または+ LoRA3-10枚5-60分2-7GB(全体)または1-200MB(LoRA)特定の被写体
Textual Inversionトークン埋め込みのみ3-10枚30分〜数時間数KBシンプルなコンセプト
ControlNetU-Net Encoderのコピー数万〜数十万枚数日約1.5GB構造的制御
IP-AdapterProjection + Cross-Attn大規模数日約100MB画像プロンプティング

6. 最新トレンド(2024-2026)

6.1 Consistency Models

Consistency Models(Yang Song et al., 2023)は、Diffusionモデルの多段階生成を1ステップまたは少数ステップに削減する方法です。

[Consistency Modelsの核心アイデア]

Diffusion: x_T → x_{T-1}... → x_1 → x_0  (数百ステップ)

Consistency:
  PF-ODE軌道上のすべての点x_tが
  同一のx_0にマッピングされるように学習

  f_θ(x_t, t) = x_0  ∀t ∈ [0, T]

  重要な制約: f_θ(x_0, 0) = x_0(自己整合性)

     x_T ────→ f_θ ────→ x_0
      │                    ↑
     x_t ────→ f_θ ───────┘  (同じx_0にマッピング!)
      │                    ↑
    x_t' ────→ f_θ ───────┘

2つの学習方法:

方法説明長所短所
Consistency Distillation (CD)事前学習済みDiffusionモデルが必要、PF-ODEシミュレーション高品質teacherモデルが必要
Consistency Training (CT)実データから直接学習teacher不要CDより品質がやや低い

パフォーマンス:

  • CIFAR-10: FID 3.55(1ステップ)、2.93(2ステップ)
  • ImageNet 64x64: FID 6.20(1ステップ)

後続研究の**Improved Consistency Training(iCT)Latent Consistency Models(LCM)**は、これを大規模T2Iモデルに適用し、SDXLレベルでの2-4ステップ生成を可能にしました。

6.2 DiT(Diffusion Transformer)アーキテクチャの普及

2024年以降、DiTがU-Netに代わってT2Iの主流バックボーンとなりつつあります:

モデルバックボーンパラメータ主な特徴
DiT(原版)2023Transformer675Mクラス条件付き、adaLN-Zero
PixArt-alpha2023DiT + Cross-Attn600MT2I、低コスト学習
PixArt-sigma2024DiT + KV Compression600M4K解像度、weak-to-strong
SD32024MM-DiT2B-8BFlow Matching、トリプルテキストエンコーダ
Flux2024MM-DiTバリアント約12B蒸留バリアント
Playground v2.52024SDXL U-Net約2.6BEDMノイズスケジュール
Hunyuan-DiT2024DiT約1.5B中国語+英語バイリンガル
Lumina-T2X2024DiT様々マルチモーダル生成

6.3 PixArt-alphaとPixArt-sigma

**PixArt-alpha(Chen et al., 2023)**は効率的なDiT学習のパイオニアモデルです:

コアイノベーション - 学習の分解:

[PixArt-alpha 3段階学習]

Stage 1: ピクセル依存性の学習(低コスト)
  - ImageNet事前学習済みDiTから開始
  - クラス条件付き → T2I移行の基礎

Stage 2: テキスト-画像アラインメントの学習
  - Cross-attentionでテキスト条件を注入
  - LLaVAで生成した高品質合成キャプションを使用

Stage 3: 高品質美的学習
  - 高品質美的データセットでファインチューニング
  - JourneyDBなどを活用

総学習コスト:675 A100 GPU days
SD 1.5の約6,250 A100 GPU daysの10.8%

PixArt-sigma(Chen et al., 2024)の改善点:

  • Weak-to-Strong Training: PixArt-alphaをベースに、より高品質なデータで学習を強化
  • KV Compression: AttentionのKeyとValueを圧縮して効率を改善し、4K解像度を実現
  • わずか0.6Bパラメータで SDXL(2.6B)に匹敵するパフォーマンス

6.4 SDXL、SD3、Fluxの比較

[Stable Diffusion世代別系譜]

SD 1.x (2022)     SDXL (2023)       SD3 (2024)         Flux (2024)
    │                  │                │                   │
  U-Net 860M       U-Net 2.6B      MM-DiT 2-8B        MM-DiT 約12B
    │                  │                │                   │
  CLIP ViT-L       CLIP-L +          CLIP-L +            CLIP-L +
                   OpenCLIP-G        OpenCLIP-G +        OpenCLIP-G +
                                     T5-XXL               T5-XXL
    │                  │                │                   │
  Diffusion        Diffusion        Rectified            Rectified
  (DDPM)           (DDPM)           Flow                 Flow
    │                  │                │                   │
  512x512          1024x1024        1024x1024            1024x1024+
    │                  │                │                   │
  CFG 7.5          CFG 5-9          CFG 3.5-7            Guidance
                                                         Distillation

6.5 DALL-E 3の学習イノベーション

DALL-E 3(Betker et al., 2023)のコアイノベーションは、学習データのキャプション品質の改善にあります:

  1. Image Captionerの学習: CoCaベースの画像キャプショニングモデルを別途学習
  2. 合成キャプション生成: 学習データ全体を詳細な合成キャプションで再ラベル付け
  3. キャプションミキシング: 95%合成 + 5%オリジナルキャプションで学習
  4. 詳細 vs 短縮: 詳細な記述型キャプションが短いタグ型よりも優れている

6.6 Playground v2.5の3つの重要な知見

Playground v2.5(Li et al., 2024)はSDXLアーキテクチャをベースに学習戦略の改善によってDALL-E 3やMidjourney 5.2を超えました:

1. EDMノイズスケジュールの採用:

# EDMフレームワーク(Karras et al., 2022)
# σ(t)ベースのノイズスケジュール - Zero Terminal SNRを保証
# 従来のSDのlinear scheduleに比べ色彩/コントラストが大幅に改善

def edm_precondition(sigma, x_noisy, F_theta):
    """EDM Preconditioning"""
    c_skip = 1.0 / (sigma ** 2 + 1)
    c_out = sigma / (sigma ** 2 + 1).sqrt()
    c_in = 1.0 / (sigma ** 2 + 1).sqrt()
    c_noise = sigma.log() / 4

    D_x = c_skip * x_noisy + c_out * F_theta(c_in * x_noisy, c_noise)
    return D_x

2. マルチアスペクト比学習:

  • バケット化データセット: 類似するアスペクト比の画像をグループ化してバッチを構成
  • 学習中に様々なアスペクト比をサポート(1:1、4:3、16:9など)

3. 人間の嗜好とのアラインメント:

  • 人間の嗜好データを活用した学習戦略
  • quality-tuningによる美的品質の最大化

7. 実践的学習パイプラインガイド

7.1 学習インフラストラクチャ

GPU要件

学習規模推奨GPUVRAM学習時間コスト(推定)
LoRAファインチューニングRTX 3090/4090 1台24GB5-30分< $1
DreamBoothA100 40GB 1台40GB30-60分$2-5
ControlNet学習A100 80GB 4-8台320-640GB2-5日$500-2,000
SD 1.5レベル学習A100 80GB 256台約20TB24日約$150K
SDXLレベル学習A100 80GB 512-1024台約40-80TB数週間約$500K-1M
SD3/Fluxレベル学習H100 80GB 1024台以上約80TB以上数週間〜数ヶ月> $1M

分散学習戦略

[大規模分散学習構成]

┌─────────────────────────────────────────────────────┐
Data Parallel (DP/DDP)│                                                       │
GPU 0        GPU 1        GPU 2        GPU 3│  ┌──────┐    ┌──────┐    ┌──────┐    ┌──────┐       │
│  │Full  │    │Full  │    │Full  │    │Full  │       │
│  │Model │    │Model │    │Model │    │Model │       │
│  │Copy  │    │Copy  │    │Copy  │    │Copy  │       │
│  └──────┘    └──────┘    └──────┘    └──────┘       │
Batch 1     Batch 2     Batch 3     Batch 4│                                                       │
-> All-Reduceで勾配を同期->GPUで異なるデータバッチ                          │
└─────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────┐
FSDP (Fully Sharded Data Parallel)│                                                       │
GPU 0        GPU 1        GPU 2        GPU 3│  ┌──────┐    ┌──────┐    ┌──────┐    ┌──────┐       │
│  │Shard │    │Shard │    │Shard │    │Shard │       │
│  │ 1/4  │    │ 2/4  │    │ 3/4  │    │ 4/4  │       │
│  └──────┘    └──────┘    └──────┘    └──────┘       │
│                                                       │
-> モデルパラメータをGPU間で分割                      │
-> Forward/Backward時に必要なシャードのみをAll-Gather-> メモリ効率を最大化(8B以上のモデル学習が可能)      │
└─────────────────────────────────────────────────────┘

7.2 代表的学習フレームワーク: Diffusers

HuggingFaceのDiffusersライブラリはT2Iモデル学習のデファクトスタンダードです。

# DiffusersベースのText-to-Imageフル学習パイプライン
from diffusers import AutoencoderKL, UNet2DConditionModel, DDPMScheduler
from transformers import CLIPTextModel, CLIPTokenizer
from accelerate import Accelerator
import torch

# 1. モデルの読み込み
vae = AutoencoderKL.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", subfolder="vae"
)
unet = UNet2DConditionModel.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", subfolder="unet"
)
text_encoder = CLIPTextModel.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", subfolder="text_encoder"
)
tokenizer = CLIPTokenizer.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", subfolder="tokenizer"
)
noise_scheduler = DDPMScheduler.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler"
)

# 2. VAEとText Encoderを凍結
vae.requires_grad_(False)
text_encoder.requires_grad_(False)

# 3. Acceleratorセットアップ(分散学習 + Mixed Precision)
accelerator = Accelerator(
    mixed_precision="fp16",          # または "bf16"
    gradient_accumulation_steps=4,
)

# 4. オプティマイザ
optimizer = torch.optim.AdamW(
    unet.parameters(),
    lr=1e-4,
    betas=(0.9, 0.999),
    weight_decay=1e-2,
    eps=1e-8,
)

# 5. EMAセットアップ
from diffusers.training_utils import EMAModel
ema_unet = EMAModel(
    unet.parameters(),
    decay=0.9999,
    use_ema_warmup=True,
)

# 6. 分散学習の準備
unet, optimizer, dataloader = accelerator.prepare(unet, optimizer, dataloader)

# 7. 学習ループ
for epoch in range(num_epochs):
    for batch in dataloader:
        with accelerator.accumulate(unet):
            images = batch["images"]
            captions = batch["captions"]

            # 潜在エンコーディング
            with torch.no_grad():
                latents = vae.encode(images).latent_dist.sample()
                latents = latents * vae.config.scaling_factor

            # テキストエンコーディング
            with torch.no_grad():
                text_inputs = tokenizer(captions, padding="max_length",
                                       max_length=77, return_tensors="pt")
                text_embeds = text_encoder(text_inputs.input_ids)[0]

            # ノイズ追加
            noise = torch.randn_like(latents)
            timesteps = torch.randint(0, 1000, (latents.shape[0],))
            noisy_latents = noise_scheduler.add_noise(latents, noise, timesteps)

            # Classifier-Free Guidance: ランダムキャプションドロップアウト
            if torch.rand(1) < 0.1:  # 10%の確率でunconditional
                text_embeds = torch.zeros_like(text_embeds)

            # ノイズ予測
            noise_pred = unet(noisy_latents, timesteps, text_embeds).sample

            # 損失計算
            loss = F.mse_loss(noise_pred, noise)

            # バックワード
            accelerator.backward(loss)
            accelerator.clip_grad_norm_(unet.parameters(), 1.0)
            optimizer.step()
            optimizer.zero_grad()

            # EMA更新
            ema_unet.step(unet.parameters())

7.3 Mixed Precision学習

Mixed Precisionは、FP32とFP16/BF16を組み合わせてメモリと計算効率を改善する技術です。

[Mixed Precision学習]

Forward Pass:
  - モデル重み: FP16/BF16(メモリ半減)
  - アクティベーション: FP16/BF16

Loss Scaling:
  - 勾配のアンダーフローを防ぐため、損失に大きなスケール(例: 2^16)を乗算
  - バックワード後に勾配を再スケールダウン

Backward Pass:
  - 勾配: FP16/BF16

Optimizer Step:
  - マスター重み: FP32(精度を維持!)
  - FP32マスター重みを更新後、FP16コピーを作成
精度メモリ演算速度数値安定性推奨用途
FP324バイト基準最高Optimizer State
FP162バイト約2倍低い(オーバーフローリスク)Forward/Backward
BF162バイト約2倍高い(広い範囲)H100/A100で推奨
TF324バイト(格納)約1.5倍高いA100デフォルト
# BF16 Mixed Precision設定(accelerateベース)
# accelerate config (YAML)
compute_environment: LOCAL_MACHINE
distributed_type: MULTI_GPU
mixed_precision: bf16
num_machines: 1
num_processes: 8

7.4 EMA(Exponential Moving Average)

EMAは学習中にモデル重みの移動平均を維持し、推論時により安定した結果を得る技術です。ほぼすべてのT2Iモデル学習で使用されています。

[EMA更新]

θ_ema ← λ * θ_ema + (1 - λ) * θ_model

- λ: 減衰率(通常0.99990.99999- θ_model: 現在学習中のモデル重み
- θ_ema: EMA重み(推論時に使用)
- 効果: 勾配ノイズを平滑化し、より安定した重みを得る
# Diffusers EMAの実装
from diffusers.training_utils import EMAModel

# EMAモデルの作成
ema_model = EMAModel(
    unet.parameters(),
    decay=0.9999,              # 減衰率
    use_ema_warmup=True,       # ウォームアップ使用
    inv_gamma=1.0,             # ウォームアップパラメータ
    power=3/4,                 # ウォームアップパラメータ
)

# 学習ステップごとに更新
ema_model.step(unet.parameters())

# 推論時にEMA重みを適用
ema_model.copy_to(unet.parameters())

# またはコンテキストマネージャを使用
with ema_model.average_parameters():
    # このブロック内ではEMA重みが使用される
    output = unet(noisy_latents, timesteps, text_embeds)

7.5 学習ハイパーパラメータガイド

ハイパーパラメータSD 1.5SDXLSD3/FluxLoRA
Learning Rate1e-41e-41e-41e-4~5e-5
Batch Size(合計)204820482048以上1-8
OptimizerAdamWAdamWAdamWAdamW / Prodigy
Weight Decay0.010.010.010.01
Grad Clip1.01.01.01.0
EMA Decay0.99990.99990.9999N/A
Warmup Steps10,00010,00010,0000-500
PrecisionFP32/FP16BF16BF16FP16/BF16
CFG Dropout10%10%10%10%
Resolution51210241024オリジナル解像度
Total Steps約500K約500K以上約1M以上500-15,000

8. 主要論文リファレンス

8.1 コア論文一覧

#論文タイトル著者主要な貢献リンク
1Generative Adversarial NetworksGoodfellow et al.2014GANフレームワークの提案arXiv:1406.2661
2Neural Discrete Representation Learning (VQ-VAE)van den Oord et al.2017Vector Quantized離散潜在空間arXiv:1711.00937
3A Style-Based Generator Architecture for GANs (StyleGAN)Karras et al.2019スタイルベースGenerator、Progressive GrowingarXiv:1812.04948
4Large Scale GAN Training (BigGAN)Brock et al.2019大規模GAN学習、Truncation TrickarXiv:1809.11096
5Generating Diverse High-Fidelity Images with VQ-VAE-2Razavi et al.2019階層的VQ-VAE、高解像度生成arXiv:1906.00446
6Denoising Diffusion Probabilistic Models (DDPM)Ho et al.2020Diffusionモデルの実用的学習arXiv:2006.11239
7Learning Transferable Visual Models From Natural Language Supervision (CLIP)Radford et al.2021CLIP対照学習、画像-テキストアラインメントarXiv:2103.00020
8Zero-Shot Text-to-Image Generation (DALL-E)Ramesh et al.2021dVAE + 自己回帰Transformer T2IarXiv:2102.12092
9High-Resolution Image Synthesis with Latent Diffusion Models (LDM)Rombach et al.2022Latent Diffusion、Cross-Attention条件付けarXiv:2112.10752
10Hierarchical Text-Conditional Image Generation with CLIP Latents (DALL-E 2)Ramesh et al.2022CLIPベース2段階Diffusion、Prior + DecoderarXiv:2204.06125
11Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding (Imagen)Saharia et al.2022T5-XXLテキストエンコーダの効果、Dynamic ThresholdingarXiv:2205.11487
12Classifier-Free Diffusion GuidanceHo & Salimans2022CFG学習技術、unconditional-conditional同時学習arXiv:2207.12598
13Scaling Autoregressive Models for Content-Rich Text-to-Image Generation (Parti)Yu et al.2022自己回帰T2I、20BスケーリングarXiv:2206.10789
14LoRA: Low-Rank Adaptation of Large Language ModelsHu et al.2022低ランクファインチューニング技術arXiv:2106.09685
15Elucidating the Design Space of Diffusion-Based Generative Models (EDM)Karras et al.2022体系的なDiffusion設計空間分析、PreconditioningarXiv:2206.00364
16An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual InversionGal et al.2023新しいトークン埋め込み学習によるパーソナライズarXiv:2208.01618
17DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven GenerationRuiz et al.2023少数画像での被写体パーソナライズ、Prior PreservationarXiv:2208.12242
18Adding Conditional Control to Text-to-Image Diffusion Models (ControlNet)Zhang & Agrawala2023構造的制御(エッジ、深度、ポーズ)の追加arXiv:2302.05543
19Consistency ModelsSong et al.20231ステップ生成、PF-ODE整合性学習arXiv:2303.01469
20SDXL: Improving Latent Diffusion Models for High-Resolution Image SynthesisPodell et al.2023大型U-Net、デュアルテキストエンコーダ、マルチAR学習arXiv:2307.01952
21Scalable Diffusion Models with Transformers (DiT)Peebles & Xie2023Diffusion + Transformer、adaLN-ZeroarXiv:2212.09748
22Flow Matching for Generative ModelingLipman et al.2023ODEベースのFlow MatchingフレームワークarXiv:2210.02747
23Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified FlowLiu et al.2023Rectified Flow、Optimal TransportarXiv:2209.03003
24IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion ModelsYe et al.2023画像プロンプトアダプター、Decoupled Cross-AttnarXiv:2308.06721
25Scaling Autoregressive Multi-Modal Models: Pretraining and Instruction Tuning (CM3Leon)Yu et al.2023効率的な自己回帰T2I、Retrieval AugmentedarXiv:2309.02591
26PixArt-alpha: Fast Training of Diffusion Transformer for Photorealistic Text-to-Image SynthesisChen et al.2023低コストDiT学習、学習分解戦略arXiv:2310.00426
27Improving Image Generation with Better Captions (DALL-E 3)Betker et al.2023合成キャプションによる劇的な品質向上cdn.openai.com/papers/dall-e-3.pdf
28PixArt-Sigma: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image GenerationChen et al.2024Weak-to-Strong学習、KV Compression、4KarXiv:2403.04692
29Scaling Rectified Flow Transformers for High-Resolution Image Synthesis (SD3)Esser et al.2024MM-DiT、Rectified Flowの大規模適用、Logit-NormalarXiv:2403.03206
30Playground v2.5: Three Insights towards Enhancing Aesthetic Quality in Text-to-Image GenerationLi et al.2024EDMノイズスケジュール、マルチAR、Human PreferencearXiv:2402.17245

8.2 追加参考論文

論文タイトル主要ポイント
LAION-5B: An Open Large-Scale Dataset for Training Next Generation Image-Text Models202258.5億のオープン画像-テキストデータセット
Improved Denoising Diffusion Probabilistic Models2021Cosineスケジュール、学習された分散
Denoising Diffusion Implicit Models (DDIM)2021決定論的サンプリング、速度向上
Progressive Distillation for Fast Sampling of Diffusion Models2022段階的蒸留による推論高速化
InstaFlow: One Step is Enough for High-Quality Diffusion-Based Text-to-Image Generation2024Rectified Flow 1ステップ生成
Latent Consistency Models2024LCM、SDXLベースの少数ステップ生成
SDXL-Turbo: Adversarial Diffusion Distillation20241-4ステップSDXL生成
Stable Cascade2024Wuerstchenベースの3段階階層生成

9. まとめと展望

Text-to-Imageモデルの学習方法論は、GANの敵対的学習から始まり、Diffusionの反復的ノイズ除去を経て、現在はFlow Matching + DiTという新しいパラダイムに収束しつつあります。

主要トレンドのまとめ

[T2I学習方法論の進化]

効率性:  フル学習 ──→ LoRA/Adapter ──→ Prompt Tuning
         (数ヶ月、$1M以上)  (数分、$1未満)      (数秒)

アーキテクチャ: U-Net ────────→ DiT ─────────→ MM-DiT + Flow Matching
          (SD 1.x-SDXL)    (DiT, PixArt)   (SD3, Flux)

生成速度: 50-1000ステップ ──→ 20-50ステップ ──→ 1-4ステップ
           (DDPM)            (DDIM, DPM++)   (LCM, LADD, CM)

データ品質: ウェブクロール ──→ フィルタリング ──→ 合成キャプション
            (LAION raw)    (aesthetic)  (DALL-E 3方式)

テキスト理解: CLIPのみ ──→ CLIP + T5 ──→ トリプルエンコーダ
             (SD 1.x)     (Imagen)      (SD3, Flux)

今後の展望

  1. 学習効率の最大化: PixArt-alphaが示したように、品質を維持しながら学習コストを1/10以下に削減するトレンドが続くでしょう。

  2. Data-Centric AIアプローチ: DALL-E 3が示したように、アーキテクチャよりもデータ品質とキャプショニングがますます重要になっています。

  3. 少数ステップ/1ステップ生成: Consistency Models、LCM、LADDなどの蒸留技術が発展し、リアルタイム生成が標準になるでしょう。

  4. 統合マルチモーダル生成: text-to-imageだけでなく、ビデオ、3D、オーディオを統合するモデルへと拡張されます。

  5. 高度なパーソナライゼーション: LoRA、DreamBooth、IP-Adapterを超えて、より少ないデータでより正確な被写体再現が可能になるでしょう。

T2Iモデルの学習方法論は、単に「より大きなモデルをより多くのデータで学習する」のではなく、どのようなデータで、どのようなスケジュールで、どのような条件付けで学習するかが鍵となる時代に入りました。本記事で取り上げた方法論が、独自のT2Iモデルの学習や既存モデルの効果的なカスタマイズの基盤として活用されることを願います。


参考文献

クイズ

Q1: 「Text-to-Imageモデル学習方法論完全ガイド: GANからFlow Matchingまで」の主なトピックは何ですか?

GAN、VAE、Diffusion、Flow Matchingに至るText-to-Image生成モデルアーキテクチャの学習方法論を論文ベースで詳細に分析します。Stable Diffusion、DALL-E、Imagen、Fluxなどの主要モデルの学習戦略とファインチューニング手法を包括的に解説します。

Q2: コアアーキテクチャ別学習方法論について説明してください。 2.1 GANベース: 敵対的学習 Generative Adversarial Network(GAN)は、GeneratorとDiscriminatorの2つのネットワークが競争的に学習するフレームワークです。 2.1.1 基本的な学習原理 GANの学習目的関数はミニマックスゲームとして定義されます: 2.1.2 StyleGANの学習戦略 StyleGAN(Karras et al., 2019)は、Progressive GrowingとStyleベースのGeneratorを導入し、高品質な画像生成を可能にしました。

Q3: テキスト条件付け方法論について説明してください。 テキスト条件付けは、T2Iモデルにおいてテキストプロンプトの意味を画像生成プロセスに注入するメカニズムです。テキストエンコーダと条件付け方法の選択は、生成品質に決定的な影響を与えます。 3.1 CLIPテキストエンコーダ OpenAIのCLIP(Contrastive Language-Image Pre-training, Radford et al., 2021)は、4億の画像-テキストペアで対照学習されたモデルです。

Q4: 学習データセットの主な特徴は何ですか? T2Iモデルの品質は学習データの規模と品質に直接依存します。以下は主要な大規模データセットのまとめです。 4.1 主要データセットの比較 4.2 LAION-5Bフィルタリングパイプライン LAION-5B(Schuhmann et al., 2022)は最も広く使用されているオープンT2I学習データセットです: 4.3 データ品質評価 最新のモデルはデータ量よりもデータ品質を重視する傾向にあります: 1. CLIPスコアベースのフィルタリング: 2.

Q5: ファインチューニング & カスタマイズ技術はどのように実現できますか? 事前学習済みT2Iモデルを特定のスタイル、被写体、制御条件に適応させるファインチューニング技術は、実用的なアプリケーションに不可欠です。 5.1 LoRA(Low-Rank Adaptation) LoRA(Hu et al., 2022)は大規模モデルの重みを効率的にファインチューニングする方法で、T2Iモデルでも広く使用されています。 LoRA学習設定(Diffusersベース): 5.2 DreamBooth DreamBooth(Ruiz et al., 2023)は、3-5枚の画像で特定の被写体のコンセプトをモデルに注入する技術です。