- Authors
- Name
- 1. はじめに: Text-to-Image生成モデルの進化
- 2. コアアーキテクチャ別学習方法論
- 3. テキスト条件付け方法論
- 4. 学習データセット
- 5. ファインチューニング & カスタマイズ技術
- 6. 最新トレンド(2024-2026)
- 7. 実践的学習パイプラインガイド
- 8. 主要論文リファレンス
- 9. まとめと展望
- 参考文献
- クイズ
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): 実画像と生成画像を判別
- 学習目標: GはDを騙し、Dは正確に判別
2.1.2 StyleGANの学習戦略
StyleGAN(Karras et al., 2019)は、Progressive GrowingとStyleベースのGeneratorを導入し、高品質な画像生成を可能にしました。
コア学習技術:
| 技術 | 説明 | 効果 |
|---|---|---|
| Progressive Growing | 低解像度(4x4)から開始し段階的に解像度を上げる | 学習安定性の向上 |
| Style Mixing | 異なる層に異なる潜在コードを注入 | 多様性の向上 |
| Path Length Regularization | Generator Jacobianの正則化 | 生成品質の向上 |
| R1 Regularization | Discriminator勾配ペナルティ | 学習の安定化 |
| 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段階で構成されます:
- Stage 1: VQ-VAE-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 SNR | SNR(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
│
┌────┴────┐
│ CLIP │
│ Encoder │
└────┬────┘
│ 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学習パイプライン:
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
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 │ │ Up │
│ Block │──│ Block │──│ Block │──┐ │ Block │──│ Block │
│ 64x64 │ │ 32x32 │ │ 16x16 │ │ │ 32x32 │ │ 64x64 │
└────────┘ └────────┘ └────────┘ │ └────────┘ └────────┘
│ │ │ │ ▲ ▲
│ │ │ ▼ │ │
│ │ │ ┌────────┐ │ │
│ │ └──│ Middle │──┘ │
│ │ │ Block │ │
│ │ │ 16x16 │ │
│ └───────────────└────────┘──────────────┘
│ (skip connections)
└────────────────────────────────────────────────────┘
各ブロックの内部構造:
┌──────────────────────────────────────┐
│ ResNet Block │
│ ├── GroupNorm → SiLU → Conv │
│ ├── Timestep Embedding注入 │
│ └── GroupNorm → SiLU → Conv │
│ │
│ Self-Attention Block │
│ ├── LayerNorm → Self-Attention │
│ └── Skip Connection │
│ │
│ Cross-Attention Block │
│ ├── LayerNorm │
│ ├── Q = Linear(潜在特徴) │
│ ├── K = Linear(テキスト埋め込み) │ ← テキスト条件付け
│ ├── V = Linear(テキスト埋め込み) │
│ └── Attention(Q, K, V) │
│ │
│ Feed-Forward Block │
│ ├── LayerNorm → Linear → GEGLU │
│ └── Linear → Skip Connection │
└──────────────────────────────────────┘
SDXL(Podell et al., 2023)はU-Netを約3倍に拡大(約26億パラメータ)し、2つのテキストエンコーダ(OpenCLIP ViT-bigGとCLIP ViT-L)を使用し、様々なアスペクト比での学習を適用するなどの改善を行いました。
| モデル | U-Netパラメータ | テキストエンコーダ | 解像度 | VAEダウンサンプリング |
|---|---|---|---|---|
| SD 1.5 | 約860M | CLIP ViT-L/14 (1) | 512x512 | 8x |
| SD 2.1 | 約865M | OpenCLIP ViT-H/14 (1) | 768x768 | 8x |
| SDXL | 約2.6B | OpenCLIP ViT-bigG + CLIP ViT-L (2) | 1024x1024 | 8x |
| SDXL Refiner | 約2.3B | OpenCLIP ViT-bigG (1) | 1024x1024 | 8x |
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.5~15)
- 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
┌─────┴─────┐
│ Decoder │ CLIP 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) │
└──────┬──────┘
│
┌──────┴──────┐
│ Pointwise │
│ FFN │
└──────┬──────┘
│ (+ residual, αでスケーリング)
▼
出力トークン
DiTの主要な設計判断:
- Patchify: 潜在表現をp x pパッチに分割し、線形射影でトークン列に変換
- adaLN-Zero: 適応的Layer Normalization、タイムステップとクラス情報をLNパラメータに注入
- スケーリング: モデルサイズ(深さ、幅)による体系的なスケーリング則の検証
| DiTバリアント | 深さ | 幅 | パラメータ | GFLOPs |
|---|---|---|---|---|
| DiT-S/2 | 12 | 384 | 33M | 6 |
| DiT-B/2 | 12 | 768 | 130M | 23 |
| DiT-L/2 | 24 | 1024 | 458M | 80 |
| DiT-XL/2 | 28 | 1152 | 675M | 119 |
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-Rectified Flow: データx_0とノイズx_1をランダムにペアリングし、直線パスを学習
- 2-Rectified Flow(Reflow): 1-Rectified Flowで生成したペアを再度直線化し、パスをより直線に近づける
- 蒸留: 直線化されたモデルを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-S | 15 | 450M | 高い |
| SD3-M | 24 | 2B | 中程度 |
| SD3-L | 38 | 8B | 低い(最高性能) |
モデルサイズと学習ステップの増加に伴い、検証損失が着実に減少する滑らかなスケーリングが確認されました。
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 Distillation | 25-50 | 効率的な推論、オープンウェイト |
| FLUX.1 [schnell] | Latent Adversarial Diffusion Distillation | 1-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-Small | 60M | 実験用 |
| T5-Base | 220M | 実験用 |
| T5-Large | 770M | 実験用 |
| T5-XL | 3B | PixArt-alpha |
| T5-XXL | 4.6B | Imagen, SD3, Flux |
| Flan-T5-XL | 3B | PixArt-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"
│
┌────┴────┐
│ Text │
│ Encoder │
└────┬────┘
│
┌────┴──────────────────────┐
│ │
▼ ▼
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-5B | 58.5億ペア | Common Crawl | CLIP類似度 > 0.28(英語) | SD 1.x, SD 2.x |
| LAION-400M | 4億ペア | Common Crawl | CLIP類似度フィルタ | 初期研究 |
| LAION-Aesthetics | 約1.2億ペア | LAION-5Bサブセット | 美的スコア > 4.5/5.0 | SDファインチューニング |
| CC3M | 330万ペア | Google検索 | 自動フィルタリングパイプライン | 研究 |
| CC12M | 1,200万ペア | Google検索 | 緩やかなフィルタリング | 研究 |
| COYO-700M | 7.47億ペア | Common Crawl | 画像 + テキストフィルタリング | 研究 |
| WebLi | 100億画像 | ウェブクロール | 上位10% CLIP類似度 | PaLI, Imagen |
| JourneyDB | 約460万ペア | Midjourney | 高品質プロンプト-画像 | 研究 |
| SAM | 1,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_0 ∈ R^{d×k} (固定、凍結)
LoRA更新: ΔW = B × A where A ∈ R^{r×k}, B ∈ R^{d×r}
最終出力: h = W_0 x + ΔW x = W_0 x + B(Ax)
- r << min(d, k): 低ランク(通常4, 8, 16, 32, 64)
- 学習パラメータ: AとBのみ(全体に比べて非常に少ない)
- 元の重みは固定 → メモリ効率が良い
# 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 Modules | attn Q,K,V,O + FFN | 適用範囲 |
| Learning Rate | 1e-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エッジ)
│
┌─────┴─────┐
│ Zero │
│ Conv │
└─────┬─────┘
│
┌─────┴─────┐
ロックされた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 ファインチューニング技術の比較
| 技術 | 変更対象 | 学習画像 | 学習時間 | ファイルサイズ | 主な用途 |
|---|---|---|---|---|---|
| LoRA | Attention重み(低ランク) | 数十〜数千枚 | 5-30分 | 1-200MB | スタイル、コンセプト |
| DreamBooth | モデル全体または+ LoRA | 3-10枚 | 5-60分 | 2-7GB(全体)または1-200MB(LoRA) | 特定の被写体 |
| Textual Inversion | トークン埋め込みのみ | 3-10枚 | 30分〜数時間 | 数KB | シンプルなコンセプト |
| ControlNet | U-Net Encoderのコピー | 数万〜数十万枚 | 数日 | 約1.5GB | 構造的制御 |
| IP-Adapter | Projection + 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(原版) | 2023 | Transformer | 675M | クラス条件付き、adaLN-Zero |
| PixArt-alpha | 2023 | DiT + Cross-Attn | 600M | T2I、低コスト学習 |
| PixArt-sigma | 2024 | DiT + KV Compression | 600M | 4K解像度、weak-to-strong |
| SD3 | 2024 | MM-DiT | 2B-8B | Flow Matching、トリプルテキストエンコーダ |
| Flux | 2024 | MM-DiTバリアント | 約12B | 蒸留バリアント |
| Playground v2.5 | 2024 | SDXL U-Net | 約2.6B | EDMノイズスケジュール |
| Hunyuan-DiT | 2024 | DiT | 約1.5B | 中国語+英語バイリンガル |
| Lumina-T2X | 2024 | DiT | 様々 | マルチモーダル生成 |
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)のコアイノベーションは、学習データのキャプション品質の改善にあります:
- Image Captionerの学習: CoCaベースの画像キャプショニングモデルを別途学習
- 合成キャプション生成: 学習データ全体を詳細な合成キャプションで再ラベル付け
- キャプションミキシング: 95%合成 + 5%オリジナルキャプションで学習
- 詳細 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要件
| 学習規模 | 推奨GPU | VRAM | 学習時間 | コスト(推定) |
|---|---|---|---|---|
| LoRAファインチューニング | RTX 3090/4090 1台 | 24GB | 5-30分 | < $1 |
| DreamBooth | A100 40GB 1台 | 40GB | 30-60分 | $2-5 |
| ControlNet学習 | A100 80GB 4-8台 | 320-640GB | 2-5日 | $500-2,000 |
| SD 1.5レベル学習 | A100 80GB 256台 | 約20TB | 24日 | 約$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コピーを作成
| 精度 | メモリ | 演算速度 | 数値安定性 | 推奨用途 |
|---|---|---|---|---|
| FP32 | 4バイト | 基準 | 最高 | Optimizer State |
| FP16 | 2バイト | 約2倍 | 低い(オーバーフローリスク) | Forward/Backward |
| BF16 | 2バイト | 約2倍 | 高い(広い範囲) | H100/A100で推奨 |
| TF32 | 4バイト(格納) | 約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.9999~0.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.5 | SDXL | SD3/Flux | LoRA |
|---|---|---|---|---|
| Learning Rate | 1e-4 | 1e-4 | 1e-4 | 1e-4~5e-5 |
| Batch Size(合計) | 2048 | 2048 | 2048以上 | 1-8 |
| Optimizer | AdamW | AdamW | AdamW | AdamW / Prodigy |
| Weight Decay | 0.01 | 0.01 | 0.01 | 0.01 |
| Grad Clip | 1.0 | 1.0 | 1.0 | 1.0 |
| EMA Decay | 0.9999 | 0.9999 | 0.9999 | N/A |
| Warmup Steps | 10,000 | 10,000 | 10,000 | 0-500 |
| Precision | FP32/FP16 | BF16 | BF16 | FP16/BF16 |
| CFG Dropout | 10% | 10% | 10% | 10% |
| Resolution | 512 | 1024 | 1024 | オリジナル解像度 |
| Total Steps | 約500K | 約500K以上 | 約1M以上 | 500-15,000 |
8. 主要論文リファレンス
8.1 コア論文一覧
| # | 論文タイトル | 著者 | 年 | 主要な貢献 | リンク |
|---|---|---|---|---|---|
| 1 | Generative Adversarial Networks | Goodfellow et al. | 2014 | GANフレームワークの提案 | arXiv:1406.2661 |
| 2 | Neural Discrete Representation Learning (VQ-VAE) | van den Oord et al. | 2017 | Vector Quantized離散潜在空間 | arXiv:1711.00937 |
| 3 | A Style-Based Generator Architecture for GANs (StyleGAN) | Karras et al. | 2019 | スタイルベースGenerator、Progressive Growing | arXiv:1812.04948 |
| 4 | Large Scale GAN Training (BigGAN) | Brock et al. | 2019 | 大規模GAN学習、Truncation Trick | arXiv:1809.11096 |
| 5 | Generating Diverse High-Fidelity Images with VQ-VAE-2 | Razavi et al. | 2019 | 階層的VQ-VAE、高解像度生成 | arXiv:1906.00446 |
| 6 | Denoising Diffusion Probabilistic Models (DDPM) | Ho et al. | 2020 | Diffusionモデルの実用的学習 | arXiv:2006.11239 |
| 7 | Learning Transferable Visual Models From Natural Language Supervision (CLIP) | Radford et al. | 2021 | CLIP対照学習、画像-テキストアラインメント | arXiv:2103.00020 |
| 8 | Zero-Shot Text-to-Image Generation (DALL-E) | Ramesh et al. | 2021 | dVAE + 自己回帰Transformer T2I | arXiv:2102.12092 |
| 9 | High-Resolution Image Synthesis with Latent Diffusion Models (LDM) | Rombach et al. | 2022 | Latent Diffusion、Cross-Attention条件付け | arXiv:2112.10752 |
| 10 | Hierarchical Text-Conditional Image Generation with CLIP Latents (DALL-E 2) | Ramesh et al. | 2022 | CLIPベース2段階Diffusion、Prior + Decoder | arXiv:2204.06125 |
| 11 | Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding (Imagen) | Saharia et al. | 2022 | T5-XXLテキストエンコーダの効果、Dynamic Thresholding | arXiv:2205.11487 |
| 12 | Classifier-Free Diffusion Guidance | Ho & Salimans | 2022 | CFG学習技術、unconditional-conditional同時学習 | arXiv:2207.12598 |
| 13 | Scaling Autoregressive Models for Content-Rich Text-to-Image Generation (Parti) | Yu et al. | 2022 | 自己回帰T2I、20Bスケーリング | arXiv:2206.10789 |
| 14 | LoRA: Low-Rank Adaptation of Large Language Models | Hu et al. | 2022 | 低ランクファインチューニング技術 | arXiv:2106.09685 |
| 15 | Elucidating the Design Space of Diffusion-Based Generative Models (EDM) | Karras et al. | 2022 | 体系的なDiffusion設計空間分析、Preconditioning | arXiv:2206.00364 |
| 16 | An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion | Gal et al. | 2023 | 新しいトークン埋め込み学習によるパーソナライズ | arXiv:2208.01618 |
| 17 | DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation | Ruiz et al. | 2023 | 少数画像での被写体パーソナライズ、Prior Preservation | arXiv:2208.12242 |
| 18 | Adding Conditional Control to Text-to-Image Diffusion Models (ControlNet) | Zhang & Agrawala | 2023 | 構造的制御(エッジ、深度、ポーズ)の追加 | arXiv:2302.05543 |
| 19 | Consistency Models | Song et al. | 2023 | 1ステップ生成、PF-ODE整合性学習 | arXiv:2303.01469 |
| 20 | SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis | Podell et al. | 2023 | 大型U-Net、デュアルテキストエンコーダ、マルチAR学習 | arXiv:2307.01952 |
| 21 | Scalable Diffusion Models with Transformers (DiT) | Peebles & Xie | 2023 | Diffusion + Transformer、adaLN-Zero | arXiv:2212.09748 |
| 22 | Flow Matching for Generative Modeling | Lipman et al. | 2023 | ODEベースのFlow Matchingフレームワーク | arXiv:2210.02747 |
| 23 | Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow | Liu et al. | 2023 | Rectified Flow、Optimal Transport | arXiv:2209.03003 |
| 24 | IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models | Ye et al. | 2023 | 画像プロンプトアダプター、Decoupled Cross-Attn | arXiv:2308.06721 |
| 25 | Scaling Autoregressive Multi-Modal Models: Pretraining and Instruction Tuning (CM3Leon) | Yu et al. | 2023 | 効率的な自己回帰T2I、Retrieval Augmented | arXiv:2309.02591 |
| 26 | PixArt-alpha: Fast Training of Diffusion Transformer for Photorealistic Text-to-Image Synthesis | Chen et al. | 2023 | 低コストDiT学習、学習分解戦略 | arXiv:2310.00426 |
| 27 | Improving Image Generation with Better Captions (DALL-E 3) | Betker et al. | 2023 | 合成キャプションによる劇的な品質向上 | cdn.openai.com/papers/dall-e-3.pdf |
| 28 | PixArt-Sigma: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation | Chen et al. | 2024 | Weak-to-Strong学習、KV Compression、4K | arXiv:2403.04692 |
| 29 | Scaling Rectified Flow Transformers for High-Resolution Image Synthesis (SD3) | Esser et al. | 2024 | MM-DiT、Rectified Flowの大規模適用、Logit-Normal | arXiv:2403.03206 |
| 30 | Playground v2.5: Three Insights towards Enhancing Aesthetic Quality in Text-to-Image Generation | Li et al. | 2024 | EDMノイズスケジュール、マルチAR、Human Preference | arXiv:2402.17245 |
8.2 追加参考論文
| 論文タイトル | 年 | 主要ポイント |
|---|---|---|
| LAION-5B: An Open Large-Scale Dataset for Training Next Generation Image-Text Models | 2022 | 58.5億のオープン画像-テキストデータセット |
| Improved Denoising Diffusion Probabilistic Models | 2021 | Cosineスケジュール、学習された分散 |
| Denoising Diffusion Implicit Models (DDIM) | 2021 | 決定論的サンプリング、速度向上 |
| Progressive Distillation for Fast Sampling of Diffusion Models | 2022 | 段階的蒸留による推論高速化 |
| InstaFlow: One Step is Enough for High-Quality Diffusion-Based Text-to-Image Generation | 2024 | Rectified Flow 1ステップ生成 |
| Latent Consistency Models | 2024 | LCM、SDXLベースの少数ステップ生成 |
| SDXL-Turbo: Adversarial Diffusion Distillation | 2024 | 1-4ステップSDXL生成 |
| Stable Cascade | 2024 | Wuerstchenベースの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)
今後の展望
学習効率の最大化: PixArt-alphaが示したように、品質を維持しながら学習コストを1/10以下に削減するトレンドが続くでしょう。
Data-Centric AIアプローチ: DALL-E 3が示したように、アーキテクチャよりもデータ品質とキャプショニングがますます重要になっています。
少数ステップ/1ステップ生成: Consistency Models、LCM、LADDなどの蒸留技術が発展し、リアルタイム生成が標準になるでしょう。
統合マルチモーダル生成: text-to-imageだけでなく、ビデオ、3D、オーディオを統合するモデルへと拡張されます。
高度なパーソナライゼーション: LoRA、DreamBooth、IP-Adapterを超えて、より少ないデータでより正確な被写体再現が可能になるでしょう。
T2Iモデルの学習方法論は、単に「より大きなモデルをより多くのデータで学習する」のではなく、どのようなデータで、どのようなスケジュールで、どのような条件付けで学習するかが鍵となる時代に入りました。本記事で取り上げた方法論が、独自のT2Iモデルの学習や既存モデルの効果的なカスタマイズの基盤として活用されることを願います。
参考文献
- HuggingFace Diffusersドキュメント
- HuggingFace Diffusers学習サンプル
- Awesome Text-to-Image Studies
- Text-to-Image Diffusion Models in Generative AI: A Survey (arXiv:2303.07909)
- Text to Image Generation and Editing: A Survey (arXiv:2505.02527)
- Stability AI Research
- Black Forest Labs
クイズ
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枚の画像で特定の被写体のコンセプトをモデルに注入する技術です。