Shikata Ga Nai

Private? There is no such things.

第30回:Stable Diffusionとは?テキストから画像への生成プロセス

Hello there, ('ω')ノ

🧠 はじめに:Stable Diffusionとは?

Stable Diffusion とは、
拡散モデル(Diffusion Models) をベースにした
テキストから画像生成(Text-to-Image Generation) モデルで、
高解像度のリアルな画像を生成 できます。

提案者: 2022年、CompVis, Stability AI, Runway によるオープンソースモデル
目的:
- テキストプロンプトから高品質な画像生成
- 芸術的・写実的な画像生成の自動化
- インペインティング(画像補完)・アウトペインティング(画像拡張)

Stable Diffusionの特徴:
- オープンソースモデルで誰でも利用可能
- リアルな画像・アート・イラストの生成
- 高速・高精度な画像生成と編集


📚 1. Stable Diffusionの基本概念と仕組み


🎨 ① Stable Diffusionの基本構造

Stable Diffusion は、拡散モデル
テキストエンコーダ(CLIP) を組み合わせて
ノイズから画像を生成 します。


🎯 【Stable Diffusionのアーキテクチャ】

[テキストプロンプト] → [CLIPエンコーダ] → [潜在空間 z] → [逆拡散 U-Net] → [生成画像 x]

1. CLIPエンコーダ:
- テキストプロンプトをベクトル化
- 画像の潜在空間表現をガイド

2. 拡散モデル(U-Net):
- ガウスノイズを除去して画像生成
- 逆拡散プロセスでリアルな画像に変換

3. VAE(変分オートエンコーダ):
- 潜在空間から画像へのデコード
- 高解像度の画像生成を実現


📚 ② 拡散プロセスと逆拡散プロセス

Stable Diffusion では、
ガウスノイズ を画像に加える拡散過程と
ノイズを除去して画像を復元する逆拡散過程 を利用します。


📚 【拡散プロセス(Forward Diffusion)】

[ q(x_t | x{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x{t-1}, \beta_t I) ]

  • β_t: ノイズスケジュール(拡散率)
  • x_t: t ステップ後のノイズ画像

目的:
- 画像 x_0 にノイズを徐々に加えることで潜在表現 z に変換


📚 【逆拡散プロセス(Reverse Diffusion)】

[ p(x{t-1} | x_t) = \mathcal{N}(x{t-1}; \mu_\theta(x_t, t), \sigma_t2 I) ]

  • μ_θ(x_t, t): 逆拡散の平均値
  • σ_t2: ノイズの分散

目的:
- ノイズからリアルな画像 x_0 を再構成


📚 ③ テキストと画像の潜在空間マッピング

Stable Diffusion では、
CLIPエンコーダ(Contrastive Language-Image Pretraining) によって
テキストプロンプト画像の潜在空間表現
同じベクトル空間にマッピング します。


📚 【CLIPエンコーダの役割】

  • テキストプロンプトから潜在ベクトル z を生成
  • U-Net で逆拡散時にガイド情報として利用

CLIPの学習:
- テキストと画像のペアデータで学習
- 意味的に近いテキストと画像の類似度を最大化


📚 ④ VAE(変分オートエンコーダ)で高解像度化

Stable Diffusion は、
低次元の潜在空間 z で画像を表現し、
VAE デコーダで高解像度画像に変換
します。


📚 【VAEの役割】

  • 画像を潜在空間 z にエンコード
  • 潜在空間から高解像度画像 x をデコード

画像生成の最終ステップとして高解像度化


📊 2. Stable Diffusionの動作フロー


🎯 ① Stable Diffusionの生成フロー

Stable Diffusion の画像生成は、
ノイズ除去の反復プロセス によって行われます。


🎨 【Stable Diffusionの生成プロセス】

[テキストプロンプト] → [CLIPエンコーダ] → [潜在空間 z の初期化] → 
[ノイズ除去の反復] → [VAEで画像復元] → [生成画像]

1. テキストプロンプトのエンコード
- CLIPエンコーダ でテキストの潜在ベクトル生成

2. ガウスノイズの初期化
- 潜在空間 z に完全なノイズを加える

3. 逆拡散の反復(Tステップ)
- U-Net でノイズ除去を T 回反復
- テキストプロンプトによる潜在空間のガイド

4. VAEデコードで高解像度画像生成
- 潜在空間 z から画像 x をデコード


📚 ② 逆拡散プロセスの制御

Stable Diffusion では、
逆拡散の際にテキストプロンプトの重みを調整 することで、
生成画像のスタイルを制御 できます。

ガイダンススケール(Guidance Scale)

  • 高いガイダンススケール: プロンプトに忠実な画像生成
  • 低いガイダンススケール: よりランダムで多様性のある画像生成

📚 ③ DDIM(Denoising Diffusion Implicit Models)

Stable Diffusion では、
DDIM(高速化手法) を導入して
計算効率と画像生成速度を向上 させています。

DDIMの特徴:

  • ステップ数を大幅に削減(50〜100ステップ)
  • 生成速度の向上と精度維持

🤖 3. Stable Diffusionの実装(Pythonで画像生成)


📚 ① 必要なライブラリのインストール

pip install diffusers transformers torch torchvision numpy pillow matplotlib

📚 ② Stable Diffusionモデルの読み込み

from diffusers import StableDiffusionPipeline
import torch

# Stable Diffusionモデルの読み込み
model_id = "CompVis/stable-diffusion-v1-4"
pipe = StableDiffusionPipeline.from_pretrained(model_id)
pipe = pipe.to("cuda")  # GPU対応

モデルのロードが完了!


📚 ③ 画像生成の実行

# テキストプロンプトの定義
prompt = "a fantasy landscape with mountains and castles, 4K resolution"

# 画像生成
generated_image = pipe(prompt, guidance_scale=7.5).images[0]

# 画像の保存
generated_image.save("generated_image.png")

# 画像の表示
generated_image.show()

テキストプロンプトからリアルな画像が生成されました!


📚 ④ 生成結果の可視化

import matplotlib.pyplot as plt

# 画像の表示
plt.imshow(generated_image)
plt.title("Generated Image by Stable Diffusion")
plt.axis("off")
plt.show()

Stable Diffusion による高解像度画像の可視化が完了!


📚 ⑤ 画像補完(インペインティング)の実装

from diffusers import StableDiffusionInpaintPipeline
from PIL import Image

# インペインティングモデルの読み込み
inpaint_pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting")
inpaint_pipe = inpaint_pipe.to("cuda")

# 画像とマスクの読み込み
init_image = Image.open("input_image.png").convert("RGB")
mask_image = Image.open("mask_image.png").convert("RGB")

# インペインティングの実行
inpaint_result = inpaint_pipe(prompt="a fantasy castle", 
                               image=init_image, 
                               mask_image=mask_image, 
                               guidance_scale=7.5).images[0]

# 結果の保存
inpaint_result.save("inpainted_image.png")
inpaint_result.show()

画像補完による欠損部分の自動修復が成功!


📚 4. Stable Diffusionの応用とユースケース


🎯 ① テキストから画像生成(Text-to-Image Generation)

応用:
- テキストプロンプトに基づく高解像度画像生成
- DALL·E 2、Midjourney、Stable Diffusion などの競合モデル

ユースケース:
- デジタルアート、広告制作、ゲーム開発


🎨 ② インペインティング(Inpainting:画像補完)

応用:
- 画像の欠損部分を自動で補完・修正
- 背景の拡張・物体の追加・画像修復

ユースケース:
- 写真の自動補正、映像の修復、映画・アニメ制作


📚 ③ アウトペインティング(Outpainting:画像拡張)

応用:
- 既存画像の外側部分を拡張・追加生成
- 高解像度のパノラマ画像生成

ユースケース:
- 風景写真の拡張、背景生成、VRコンテンツ開発


📊 ④ スタイル変換と画像編集

応用:
- 特定のスタイル・雰囲気の画像生成
- 写真をアート作品風に変換

ユースケース:
- ファッション・インテリアのデザイン生成、映画ポスター制作


🎁 まとめ:Stable Diffusionでテキストから画像生成の未来を探求しよう!

Stable Diffusionは、拡散モデルとCLIPエンコーダを組み合わせた、最先端のテキストから画像生成モデル。
オープンソースモデルとして誰でも利用可能で、クリエイティブなコンテンツ生成が容易に実現できる。
インペインティング、アウトペインティング、スタイル変換など、多様な応用分野で革命を起こしている。
PyTorch で Stable Diffusion の実装をマスターし、AIによる画像生成の可能性を広げよう!

Best regards, (^^ゞ