[카테고리:] 미분류

  • Stable Diffusion


    🔹 Stable Diffusion 기본 학습 과정

    Stable Diffusion은 기본적으로 **노이즈 추가-제거(역방향 과정)**로 학습된 건 맞습니다.
    이때, 그냥 이미지에 노이즈를 제거하는 게 아니라, **텍스트 프롬프트(문장)**를 조건으로 같이 줍니다.

    1. 텍스트 임베딩 준비

    • 먼저, 이미지에 대한 설명(캡션) 문장을 준비합니다. 예: “a cat sitting on a chair”
    • 이 문장을 텍스트 인코더(주로 CLIP의 텍스트 인코더)를 이용해 **벡터(임베딩)**로 변환합니다.
    • 이 벡터가 그림을 그릴 때 가이드 역할을 하게 됩니다.

    2. 이미지에 점점 노이즈 추가 (forward process)

    • 고양이 사진에 점진적으로 노이즈를 추가해, 점점 알아볼 수 없는 이미지로 만듭니다.
    • 각 단계에서 “이 정도 노이즈가 추가됐을 때, 원래 이미지로 복원하려면 어떻게 해야 할까?”를 학습하도록 만듭니다.

    3. 텍스트-이미지 연결 학습 (conditioning)

    • 여기서 중요한 포인트는:
      • 단순히 노이즈를 제거하는 걸 학습하는 게 아니라, “텍스트 설명에 맞게” 노이즈를 제거하도록 학습한다는 거예요.
      • 즉, 노이즈 제거 네트워크가 이미지의 특징뿐만 아니라 텍스트 임베딩도 입력으로 받도록 설계되어 있습니다.
      • “고양이”라는 텍스트가 주어졌을 때, 고양이에 어울리는 모양과 질감을 찾는 방식으로 훈련됩니다.

    🔹 Text-to-image 학습 요약

    과정설명
    1. 텍스트 준비이미지에 맞는 캡션 준비 (“a cat on a chair”)
    2. 텍스트 임베딩CLIP 등으로 텍스트를 벡터로 변환
    3. 이미지 노이즈화깨끗한 이미지에 점진적으로 노이즈 추가
    4. 노이즈 제거 학습노이즈 제거할 때, 텍스트 임베딩을 참고하도록 학습
    5. 텍스트-이미지 매핑 강화“이 텍스트면 이런 이미지”라는 연관성 학습

    🔹 핵심 포인트

    ❓ 기존 디퓨전 모델과 차이

    • 원래 디퓨전 모델은 그냥 이미지만 보고 노이즈를 제거하는 모델이었어요.
    • Stable Diffusion은 거기에 “텍스트 설명”이라는 조건을 추가해서, 원하는 이미지로 유도하는 방식입니다.

    ❓ 결국 Text-to-Image는?

    • 텍스트와 이미지의 관계를 배우는 과정 +
    • 노이즈 제거를 배우는 과정이 동시에 일어난 거예요.

    🔹 참고

    이 과정은 흔히 **조건부 확률 모델(Conditional Diffusion Process)**로 불립니다.
    Stable Diffusion은 CLIP 텍스트 인코더 + U-Net 노이즈 제거 네트워크를 결합해 이걸 구현한 거고요.

    요약하자면:

    “텍스트에 맞는 이미지를 만드는 법”을 배우는 것과
    “노이즈에서 텍스트에 맞는 이미지를 복원하는 법”을 동시에 훈련한 것!

    좋습니다! 그럼 Stable Diffusion 및 Text-to-Image 디퓨전 모델이 논문 레벨에서 어떻게 학습되는지, 핵심 수식을 포함해 디테일하게 설명해드릴게요. 🚀


    📚 1. 기본 개념: 확산 확률 모델 (Diffusion Probabilistic Models)

    정방향 과정 (Forward Process)

    이미지 x0x_0에 점진적으로 노이즈를 추가하는 과정입니다.
    시간 tt에 따른 노이즈화는 아래처럼 정의됩니다. q(xt∣xt−1)=N(xt;1−βt⋅xt−1,βt⋅I)q(x_t \mid x_{t-1}) = \mathcal{N}(x_t ; \sqrt{1 – \beta_t} \cdot x_{t-1}, \beta_t \cdot I)

    • βt\beta_t: 시간 tt에 따른 노이즈 스케줄 (작은 값부터 시작해 점점 커짐)
    • 이 과정은 주어진 깨끗한 이미지 x0x_0에서 점진적으로 노이즈를 추가해 xTx_T에 도달하는 마르코프 체인.

    역방향 과정 (Reverse Process)

    목표는 노이즈 xTx_T에서 점진적으로 노이즈를 제거해 원본 이미지로 복원하는 것.
    역방향 확률은 다음처럼 정의: pθ(xt−1∣xt)p_\theta(x_{t-1} \mid x_t)

    이 pθp_\theta를 예측하는 모델이 바로 U-Net 같은 디퓨전 모델 아키텍처입니다.
    (노이즈를 제거하는 네트워크)


    📚 2. Text-to-Image: 조건부 디퓨전 (Conditional Diffusion)

    조건 추가하기

    위의 노이즈 제거 모델 pθp_\theta는 단순히 이미지만 보는 게 아니라, “텍스트 설명”이라는 조건 yy도 함께 받도록 학습됩니다. pθ(xt−1∣xt,y)p_\theta(x_{t-1} \mid x_t, y)

    • yy는 텍스트 프롬프트 (예: “a cat on a chair”)
    • 이 조건 yy는 보통 CLIP 텍스트 인코더를 통해 임베딩 벡터로 변환
    • 즉, 노이즈를 제거할 때, 텍스트 정보가 “이 이미지에 고양이를 그려야 해”라는 신호를 주는 역할

    학습 손실 함수 (ELBO 기반)

    Stable Diffusion 및 대부분의 디퓨전 모델은 변분 추론 기반 학습을 합니다. 목표는 실제 역방향 분포 qq와 모델 분포 pθp_\theta의 Kullback-Leibler 발산을 최소화하는 것. L=Eq[∑t=1TDKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt,y))]L = \mathbb{E}_q \left[ \sum_{t=1}^T D_{KL}(q(x_{t-1} \mid x_t, x_0) \| p_\theta(x_{t-1} \mid x_t, y)) \right]

    • 각 시간 스텝 tt마다 KL 발산으로 정규화된 노이즈 제거 과정과 모델의 예측을 비교
    • 실제 훈련에서는 위 전체 ELBO 대신, 노이즈 예측 손실을 씁니다.

    노이즈 예측 목표로 단순화 (Noise Prediction Objective)

    디퓨전 학습의 핵심은 “노이즈 자체를 예측하는 것”으로 단순화할 수 있습니다. 이미지 x0x_0에서 노이즈화된 이미지 xtx_t를 만든 후, 모델은 다음을 예측: ϵθ(xt,t,y)\epsilon_\theta(x_t, t, y)

    • xtx_t: 시간 tt에서의 노이즈 이미지
    • yy: 텍스트 조건
    • ϵθ\epsilon_\theta: 현재 노이즈의 크기와 방향을 예측하는 모델 (U-Net)

    학습 손실 (실제 학습 시 사용하는 것)

    L=Ex0,t,ϵ[∥ϵ−ϵθ(xt,t,y)∥2]L = \mathbb{E}_{x_0, t, \epsilon} \left[ \|\epsilon – \epsilon_\theta(x_t, t, y)\|^2 \right]

    • 실제 노이즈 ϵ\epsilon과 모델이 예측한 노이즈 ϵθ\epsilon_\theta의 MSE 손실
    • 텍스트 yy가 들어가는 게 핵심
    • 모델은 이 손실을 최소화하면서, 텍스트에 맞는 노이즈 제거 방향을 배우게 됨

    📚 3. Text Conditioning 구체 메커니즘

    텍스트 임베딩

    • 텍스트 프롬프트 yy는 보통 CLIP 텍스트 인코더를 통해 벡터 E(y)E(y)로 변환
    • 이 임베딩은 디퓨전 모델의 모든 U-Net 블록에 Cross-Attention 형태로 들어감

    Cross-Attention

    각 디퓨전 블록에서 다음과 같이 텍스트 정보를 이미지에 주입: Attention(Q,K,V)=softmax(QKTd)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V

    • QQ: 이미지의 중간 표현
    • KK, VV: 텍스트 임베딩에서 온 토큰 표현
    • 텍스트가 이미지의 어떤 영역에 영향을 줄지를 학습하는 구조

    📚 4. Stable Diffusion의 Latent Diffusion Trick

    Latent 공간에서 디퓨전 수행

    • Stable Diffusion은 픽셀 공간에서 직접 노이즈 처리가 아니라, VAE로 인코딩한 latent 공간에서 디퓨전 진행
    • 훈련 데이터는 (이미지, 캡션) 쌍이지만, 이미지 대신 압축된 latent zz를 사용

    z=Encoder(x)z = \text{Encoder}(x) pθ(zt−1∣zt,y)p_\theta(z_{t-1} \mid z_t, y)

    • 메모리 절약 및 훈련 속도 향상 효과

    📚 5. 정리: 전체 학습 파이프라인

    1. (이미지, 텍스트 캡션) 쌍 수집
    2. 이미지 → VAE Encoder → latent 벡터 zz
    3. 텍스트 → CLIP → 텍스트 임베딩 E(y)E(y)
    4. zz에 forward process로 노이즈 추가
    5. U-Net이 ztz_t에서 노이즈 ϵ\epsilon 예측, 텍스트 임베딩으로 조건부 제어
    6. 노이즈 예측 손실로 학습

    📚 6. 참고 논문

    • DDPM: Denoising Diffusion Probabilistic Models (Ho et al., 2020)
    • GLIDE: Guided Language to Image Diffusion (Nichol et al., 2021)
    • Latent Diffusion Models (LDM) (Rombach et al., 2022) – Stable Diffusion의 기반 논문
    • https://arxiv.org/abs/2112.10752 (LDM 공식 논문)

    📚 7. 요약 한 줄

    Stable Diffusion은 노이즈 제거 모델을 텍스트 조건과 함께 학습하여, “텍스트에 맞는 이미지를 노이즈에서 복원하는 법”을 배우는 구조