본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

Stable Diffution이란? : Text Encoder, Latent Space, UNet, VAE


Stable Diffution

텍스트 프롬프트를 입력받아 새로운 이미지를 생성하는 생성형 AI 모델이다 .

from diffusers import StableDiffusionPipeline
import torch

pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
)

pipe = pipe.to("cuda")

image = pipe(
    "A cute cat wearing glasses"
).images[0]

image.save("cat.png")

 

 

주요구성 요소로 Text Encoder, Latent Space, UNet, VAE가 있다. 

고품질 이미지를 생성하고 다양한 스타일을 표현하는 텍스트 기반 생성 이미지 편집, 인페이팅, 아웃페인팅 모델이며 로컬 환경에서도실행이 가능하다. 다양한 오픈소스 모델과 확장성이 좋다. 

핵심은 이미지를 직접 생성하지 않고, 잠재 공간(Latent Space)에서 노이즈를 제거(Denoising)하여 이미지를 생성한다

#Text Encoder 텍스트 프롬프트를 의미 벡터(Embedding)로 변환

from transformers import CLIPTokenizer
from transformers import CLIPTextModel

tokenizer = CLIPTokenizer.from_pretrained(
    "openai/clip-vit-large-patch14"
)

text_encoder = CLIPTextModel.from_pretrained(
    "openai/clip-vit-large-patch14"
)

prompt = "A cute cat wearing glasses"

inputs = tokenizer(
    prompt,
    return_tensors="pt"
)

embedding = text_encoder(**inputs).last_hidden_state

print(embedding.shape)
# UNet 노이즈 제거
from diffusers import UNet2DConditionModel
import torch

unet = UNet2DConditionModel.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    subfolder="unet"
)

latent = torch.randn(1, 4, 64, 64)

text_embedding = torch.randn(1, 77, 768)

noise_pred = unet(
    latent,
    timestep=500,
    encoder_hidden_states=text_embedding
).sample

print(noise_pred.shape)
# VAE (Variational AutoEncoder) 잠재 공간(Latent)을 실제 이미지로 복원
from diffusers import AutoencoderKL

vae = AutoencoderKL.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    subfolder="vae"
)

latent = torch.randn(1, 4, 64, 64)

image = vae.decode(latent).sample

print(image.shape)
Text Encoder (CLIP) 프롬프트를 의미 벡터로 변환 텍스트 Text Embedding
Latent Space 이미지를 압축된 잠재 표현으로 저장하고 생성 수행 노이즈 또는 잠재 벡터 Latent Feature
UNet 노이즈를 반복적으로 제거하며 잠재 이미지를 생성 Latent + Text Embedding Denoised Latent
VAE (Encoder/Decoder) 이미지↔잠재 공간 변환 Latent 또는 이미지 이미지 또는 Latent

 

 

핵심 아이디어는 픽셀 공간에서 직접 이미지를 생성하지 않고, 압축된 잠재 공간(Latent Space)에서 UNet이 노이즈를 점진적으로 제거한 뒤, 마지막에 VAE Decoder가 이를 고해상도 이미지로 복원한다는 것입니다. 이는 계산량을 크게 줄이면서도 높은 품질의 이미지를 생성할 수 있게 해주는 Stable Diffusion의 핵심 원리