Stable Diffusion은 잠재 확산 모델(Latent Diffusion Model) 기반의 텍스트 투 이미지 생성 모델이다. 오픈소스로 공개되어 커스터마이즈가 자유롭고, LoRA, ControlNet, Inpainting 등 다양한 확장 기술이 발전했다.
아키텍처 구성요소
| 컴포넌트 | 역할 |
|---|
| VAE | 이미지를 잠재 공간으로 인코딩/디코딩 |
| U-Net | 노이즈 예측 (확산 과정의 핵심) |
| CLIP Text Encoder | 텍스트 프롬프트를 임베딩으로 변환 |
| Scheduler | 노이즈 제거 알고리즘 (DDIM, DPM++ 등) |
diffusers 라이브러리 활용
python
from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
import torch
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16,
use_safetensors=True,
)
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda")
pipe.enable_attention_slicing()
image = pipe(
prompt="a beautiful korean landscape, photorealistic, 8k",
negative_prompt="ugly, blurry, low quality, deformed",
num_inference_steps=25,
guidance_scale=7.5,
width=512,
height=512,
).images[0]
image.save("output.png")
ControlNet 사용 (포즈 제어)
python
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
import torch
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-openpose",
torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
torch_dtype=torch.float16,
)
image = pipe(
prompt="professional dancer, studio lighting",
image=pose_image,
num_inference_steps=20,
controlnet_conditioning_scale=0.8,
).images[0]
기본 모델 가중치 W (동결)
LoRA: delta_W = A x B
A: (d x r), B: (r x k), r << min(d, k)
추론: W' = W + alpha * A * B
파라미터 절감: 90%+ 감소
관련 문서