🤖 AI/ML

Stable Diffusion

스테이블 디퓨전

Stability AI의 오픈소스 이미지 생성 모델입니다. Latent Diffusion Model(LDM) 아키텍처를 기반으로 텍스트 프롬프트에서 고품질 이미지를 생성하며, 로컬 GPU에서도 실행 가능한 효율성으로 이미지 생성 AI의 대중화를 이끌었습니다.

📖 상세 설명

Stable Diffusion은 Stability AI가 개발한 Latent Diffusion Model(LDM) 기반의 텍스트-이미지 생성 모델입니다. 기존 Diffusion Model이 픽셀 공간에서 직접 작동하여 계산 비용이 높았던 반면, Stable Diffusion은 VAE(Variational Autoencoder)로 압축된 잠재 공간(latent space)에서 노이즈 제거 과정을 수행하여 효율성을 크게 개선했습니다.

2022년 8월 Stable Diffusion 1.4가 오픈소스로 공개되면서 AI 이미지 생성의 민주화가 시작되었습니다. DALL-E나 Midjourney와 달리 누구나 무료로 모델 가중치를 다운로드하여 로컬에서 실행하거나 커스텀 학습(Fine-tuning)을 할 수 있었습니다. 이후 SD 1.5, SD 2.0, SDXL, SD3 등 지속적으로 발전하며 해상도, 프롬프트 이해력, 이미지 품질이 향상되었습니다.

핵심 아키텍처는 세 가지 컴포넌트로 구성됩니다: (1) VAE - 이미지를 잠재 공간으로 인코딩/디코딩, (2) U-Net - 잠재 공간에서 노이즈 예측 및 제거, (3) Text Encoder - CLIP 기반으로 텍스트 프롬프트를 임베딩으로 변환. 생성 과정은 순수 노이즈에서 시작하여 텍스트 조건에 맞게 점진적으로 노이즈를 제거하는 역확산(reverse diffusion) 과정입니다.

실무에서 Stable Diffusion은 다양한 워크플로우에 활용됩니다: Text-to-Image(텍스트 프롬프트로 이미지 생성), Image-to-Image(기존 이미지를 변형), Inpainting(이미지 일부 수정), ControlNet(포즈, 엣지 등 조건부 생성), LoRA/DreamBooth(특정 스타일이나 객체 학습). 오픈소스 특성상 ComfyUI, Automatic1111, Forge 등 다양한 커뮤니티 도구와 결합되어 프로덕션 파이프라인에 통합됩니다.

💻 코드 예제

Hugging Face Diffusers를 사용한 Stable Diffusion 이미지 생성 예제입니다.

# Stable Diffusion XL 이미지 생성 예제
from diffusers import StableDiffusionXLPipeline
import torch

# SDXL 파이프라인 로드 (약 6.5GB VRAM 필요)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16"
)
pipe.to("cuda")

# 메모리 최적화 (VRAM이 부족한 경우)
pipe.enable_model_cpu_offload()
pipe.enable_vae_slicing()

# 이미지 생성
prompt = "A majestic mountain landscape at sunset, photorealistic, 8k uhd"
negative_prompt = "blurry, low quality, distorted, artifacts"

image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    num_inference_steps=30,  # 품질과 속도 트레이드오프
    guidance_scale=7.5,      # CFG scale: 높을수록 프롬프트에 충실
    width=1024,
    height=1024,
    generator=torch.Generator("cuda").manual_seed(42)
).images[0]

image.save("output.png")


# Image-to-Image 변환
from diffusers import StableDiffusionXLImg2ImgPipeline
from PIL import Image

img2img_pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16,
    use_safetensors=True
).to("cuda")

init_image = Image.open("input.png").resize((1024, 1024))

result = img2img_pipe(
    prompt="Convert to anime style, vibrant colors",
    image=init_image,
    strength=0.7,  # 0-1: 높을수록 변화가 큼
    num_inference_steps=30
).images[0]


# ControlNet으로 포즈 제어
from diffusers import ControlNetModel, StableDiffusionXLControlNetPipeline
from controlnet_aux import OpenposeDetector

controlnet = ControlNetModel.from_pretrained(
    "thibaud/controlnet-openpose-sdxl-1.0",
    torch_dtype=torch.float16
)

pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    controlnet=controlnet,
    torch_dtype=torch.float16
).to("cuda")

# 포즈 추출 및 조건부 생성
pose_detector = OpenposeDetector.from_pretrained("lllyasviel/ControlNet")
pose_image = pose_detector(Image.open("reference_pose.png"))

image = pipe(
    prompt="Professional dancer in elegant dress",
    image=pose_image,
    controlnet_conditioning_scale=0.8
).images[0]

📊 성능 & 비용

모델별 성능 스펙

모델 기본 해상도 파라미터 VRAM 요구량
SD 1.5 512x512 860M ~4GB (FP16)
SD 2.1 768x768 860M ~5GB (FP16)
SDXL 1.0 1024x1024 6.6B ~8GB (FP16)
SD 3 Medium 1024x1024 2B ~10GB
SD 3.5 Large 1024x1024 8B ~16GB

Stability AI API 가격 (2025년 기준)

서비스 가격 (이미지당) 특징
SD 1.5 $0.006 레거시, 가장 저렴
SDXL $0.011 고해상도 기본 모델
SD 3 $0.037 향상된 프롬프트 이해력
SD 3.5 Large $0.065 (6.5 credits) 최신 고품질 모델
Stable Image Core $0.03 속도 최적화
Stable Image Ultra $0.08 최고 품질

로컬 실행 vs 클라우드 API

옵션 초기 비용 운영 비용 장점
로컬 GPU (RTX 4090) ~$1,600 전기료만 무제한 생성, 커스텀 모델
클라우드 GPU (A100) 없음 $1-2/시간 유연한 스케일링
Stability AI API 없음 이미지당 과금 관리 불필요

* Community License: 연 매출 $1M 미만 기업/개인은 SDXL, SD 3.5 등 핵심 모델을 무료로 셀프호스팅 가능

🗣️ 실무에서 이렇게 말하세요

미팅에서

"제품 이미지는 SDXL로 생성하고, 일관된 브랜드 스타일을 위해 LoRA를 학습시켜 적용하면 좋겠습니다."

기술 면접에서

"Stable Diffusion은 Latent Space에서 Diffusion을 수행해서 연산 효율이 높습니다. SDXL은 두 개의 Text Encoder를 사용해 프롬프트 이해력이 향상됐고요."

기술 토론에서

"ComfyUI로 워크플로우 구성하고, ControlNet으로 포즈 제어, IP-Adapter로 스타일 참조하면 일관된 캐릭터 생성이 가능해요."

⚠️ 흔한 실수 & 주의사항

❌ "Stable Diffusion이 Midjourney보다 무조건 나쁘다"

기본 모델만 비교하면 그럴 수 있지만, 커스텀 모델, LoRA, ControlNet 등을 활용하면 특정 도메인에서 더 우수한 결과를 낼 수 있습니다. 특히 일관된 스타일이 필요한 상업적 용도에서 강점을 발휘합니다.

❌ "높은 CFG Scale이 항상 좋다"

guidance_scale(CFG)을 너무 높이면 색상이 과포화되거나 이미지가 부자연스러워집니다. 일반적으로 7-10 범위가 적절하며, 스타일에 따라 조정이 필요합니다.

✅ 올바른 접근

프로젝트 요구사항에 맞는 모델을 선택하세요. 빠른 프로토타이핑은 SD 1.5, 고품질 결과물은 SDXL/SD3, 특정 스타일은 파인튜닝된 모델을 사용합니다. Negative Prompt와 적절한 Sampler(DPM++ 2M Karras 등) 설정도 품질에 큰 영향을 미칩니다.

🔗 관련 용어

📚 더 배우기