Diffusion model

ququwuqqq·2026년 1월 6일

Diffusion model

Diffusion model 에 대해 간략하게 설명하겠다.

노이즈로부터 이미지를 생성하는 모델이다.

Forward process와 Reverse process를 활용하여 학습한다.

Forward Process

Data(x0x_0)로부터 표준정규분포(xTx_T) 방향으로 Noise를 조금씩 더해가는 과정이다.

xt=1βtxt1+βtϵ,ϵN(0,I)x_t = \sqrt{1-\beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)

표준정규분포 방향으로 노이즈를 βt\sqrt{\beta_t}만큼 섞어간다.

Reverse Process

완전한 노이즈(xTx_T)에서 시작하여 노이즈를 걷어내며, 다시 이미지(x0x_0)로 돌아가는 과정이다.

pθ(xt1xt)p_\theta (x_{t-1} | x_t)

Training

특정 시점(tt)을 랜덤 샘플링 하여 원본(x0x_0)과 tt단계 노이즈 이미지(xtx_t) 사이의 노이즈(ϵ\epsilon)를 예측하도록 학습한다.

  1. Random Sampling: 11단계부터 NN단계 중 아무 숫자나 하나(예: 33단계)를 무작위로 뽑는다.
  2. Forward Process: 가우시안 분포의 성질을 이용해, 원본(x0x_0)에서 곧바로 33단계 노이즈 이미지(x3x_3)를 만들어 낸다.
  3. Prediction: 모델에게 x3x_3를 보여주고 노이즈를 예측하도록 시킨다.
  4. Loss Calculation: 모델이 예측한 노이즈(ϵθ\epsilon_\theta)와 실제로 넣은 노이즈(ϵ\epsilon)를 비교해서 오차를 줄인다.

Inference

학습된 모델을 사용하여 완전한 노이즈(TT단계)부터 00단계까지 순차적으로 노이즈를 제거한다.

  1. 랜덤 노이즈(예: 55단계)에서 시작한다.
  2. 모델: 55단계 노이즈 예측 및 제거 \rightarrow 44단계 된다. (실제 모델 예측은 505 \rightarrow 0 예측)
  3. 모델: 44단계 노이즈 예측 및 제거 \rightarrow 33단계 된다.
    ...
  4. 모델: 11단계 노이즈 예측 및 제거 \rightarrow 원본(x0x_0) 완성한다.

실제 모델 예측은 0단계로부터 섞인 n단계의 노이즈를 예측한다.
하지만, 한 번에 노이즈를 제거하는 것보다 단계별로 한 단계씩만 이동하는게 더 정밀한 결과를 낼 수 있어서 여러 단계에 걸쳐 노이즈를 제거한다.

Model Architecture

  • Reverse Process를 위한 모델 구조

  • 기본적으로는 UNet 구조를 쓰며, 본 논문에서도 UNet 구조를 사용한다.

    • 입력 (Input): 노이즈 낀 이미지 (xtx_t)
    • 출력 (Output): 예측된 노이즈 (ϵθ\epsilon_\theta)

Image Prompt Adapter

  • 이미지와 텍스트를 입력하여 생성되는 이미지를 조정할 수 있다.
  • 이미지와 텍스트들은 UNet 중간중간 Cross Attention을 통해 주입되어 이미지 생성에 관여할 수 있다.
  • 아래는 예시 구조로 Frozen, Trainable은 무시해도 된다.

Cross Attention

  • Input을 제외하면 Self Attention과 차이가 나지 않는 동일한 계산 방법이다.
  • 서로 다른 Input A,BA, B에 대해 Attention 연산 시 AA에서 생성된 QQ를 사용하고, BB에서 생성된 V,KV, K를 사용하여 연산하는 방법이다.
    • Query (QQ): 이미지의 특징 (UNet 내부 Feature)
    • Key (KK) & Value (VV): 프롬프트(텍스트) 임베딩 또는 이미지 임베딩

Video Diffusion

  • 원론적으로는 이미지 생성 때와 같지만, 시간 축을 하나 더하여 이미지 한 장의 노이즈가 아니라 FF장의 전체 프레임 노이즈를 예측하도록 한다.

    • 이미지: C,H,WC, H, W (채널, 높이, 너비)
    • 비디오: F,C,H,WF, C, H, W (프레임 수, 채널, 높이, 너비)
  • 이렇게 되면 기본 UNet 구조에서의 2D Convolution3D Convolution이 되어야 하지만, 이것은 계산 복잡도가 급격히 늘어나 비효율적이다.

  • 하여 시공간을 분리한 Convolution 연산을 따로 진행한다.

    • Spatial Convolution (2D): 각 프레임을 독립적인 이미지로 보고 특징을 추출
    • Temporal Convolution (1D): 공간 정보(H,WH, W)는 고정한 채, 시간 축(FF)으로만 연산을 수행

0개의 댓글