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의 핵심 원리