Section 01확산이라는 발상
Stable Diffusion은 가이드된 지시와 이미지로부터 고품질 아트워크를 만드는 딥러닝 모델이다. OpenAI의 DALL-E 2 같은 다른 생성 모델과 달리, 이 모델은 무작위 노이즈 latent tensor에서 시작해 점진적으로 세부 정보를 추가하는 방식으로 작동한다.
추가되는 세부 사항의 양은 수학 방정식에 지배되는 확산(diffusion) 프로세스가 결정한다. 최종 단계에서 모델은 latent tensor를 픽셀 이미지로 디코딩한다. "말을 타는 우주 비행사의 사진" 같은 프롬프트 한 줄은, 엔터 키를 누르기 전에는 세상에 존재하지 않던 이미지를 만들어낸다. 사람과 모델의 협업인 셈이다.
텍스트-이미지 생성뿐 아니라, 자연어만으로 사진을 편집할 수도 있다. 자동 생성된 마스크와 프롬프트를 사용하면 우주 배경을 파란 하늘과 산으로 교체할 수 있다. 마우스 클릭도, Photoshop 같은 유료 소프트웨어도 필요 없다. 순수 Python과 Stable Diffusion이면 충분하다.
텍스트 설명에서 고품질 이미지를 생성한다. 다른 방법보다 안정적이고 신뢰할 수 있는 확산 프로세스에 기반한다. 1만 개 이상의 대규모 사전 훈련 공개 모델을 활용할 수 있고, 그 위에 새로운 연구가 끊임없이 쌓인다. 무엇보다 오픈 소스이며 누구나 사용할 수 있다.
Section 02Transformer에서 CLIP까지
Diffusion 모델은 하루아침에 등장하지 않았다. 그리 오래전이 아니라, 합성곱 신경망(CNN)과 잔차 신경망(ResNet)이 컴퓨터 비전을 지배했다. 이들은 객체 감지와 얼굴 인식에서 매우 효과적이었지만 결정적 단점이 있었다 — 훈련 세트에 포함된 객체만 인식할 수 있다는 점이다. 새 객체를 다루려면 레이블을 추가해 재훈련해야 했다.
Google이 개발한 Transformer 모델은 이 판도를 바꿨다. 미리 정의된 레이블에 의존해 손실을 계산하던 기존 방식과 달리, Transformer는 Attention 메커니즘과 함께 선구적인 개념을 도입했다 — 훈련 데이터 자체를 훈련과 레이블링 목적 모두에 활용하는 것이다.
OpenAI 연구자들은 이 힘을 포착해 CLIP을 만들었다. Attention 메커니즘과 Transformer 아키텍처를 사용해 이미지 분류 모델을 훈련했고, 레이블된 데이터 없이도 광범위한 이미지를 분류할 수 있게 했다. 인터넷에서 추출한 4억 개의 이미지-텍스트 쌍으로 훈련된 최초의 대규모 이미지 분류 모델이다.
CLIP 논문의 저자들은 이렇게 말한다: "약하게 감독된 모델과 자연어에서 직접 이미지 표현을 학습하는 최근 탐구 사이의 중요한 차이점은 규모다." 다른 모델이 20만 장을 사용할 때 CLIP 팀은 4억 장을 동원했고, 결과는 놀라웠다.
Section 03DALL-E 2와 Stable Diffusion
2020년 6월, Jonathan Ho 등의 논문 "Denoising Diffusion Probabilistic Models"가 이미지 생성을 위한 확산 기반 확률 모델을 소개했다. 노이즈가 있는 이미지로 시작해 노이즈를 제거함으로써 점진적으로 깨끗한 이미지로 변환하는 방식이다. 그래서 이름이 노이즈 제거 확산 확률 모델(DDPM)이다.
2022년 4월, OpenAI는 "Hierarchical Text-Conditional Image Generation with CLIP Latents" 논문과 함께 DALL-E 2를 출시했다. 같은 달, CompVis는 "High-Resolution Image Synthesis with Latent Diffusion Models" 논문을 발표했다. CompVis의 작업을 기반으로 CompVis·Stability AI·LAION의 연구자들이 협력하여, 2022년 8월 DALL-E 2의 오픈 소스 대응물 — Stable Diffusion을 출시했다.
| 구분 | DALL-E 2 / Midjourney | Stable Diffusion |
|---|---|---|
| 라이선스 | 클로즈드 소스 | CreativeML Open RAIL-M (오픈 소스) |
| 소스 코드 | 비공개 | 읽고 수정·기능 추가 가능 |
| 커스텀 모델 | 불가 | 커뮤니티 공유 모델 무수히 활용 |
| 생성 제어권 | 제한적 | Python으로 완전 제어 |
DALL-E 2 같은 다른 모델과 달리, Stable Diffusion은 무작위 노이즈에서 출발해 점진적으로 세부 정보를 쌓는다 — 역방향 노이즈 제거(reverse denoising) 과정이다. 그 흐름을 한눈에 따라가 보자.
Section 04왜 이 책인가
Stable Diffusion GUI 도구는 환상적인 이미지를 만들지만 사용성은 제한적이다. 수십 개의 노브와 특정 용어 때문에 고품질 이미지 생성이 때때로 추측 게임이 된다. 반면 Hugging Face의 Diffusers 패키지는 Python으로 완전한 제어권을 주지만, 커스텀 LoRA·Textual Inversion 로딩, 커뮤니티 모델 활용, 스케줄링·가중치 프롬프트, 무제한 프롬프트 토큰, 고해상도 수정·업스케일링 같은 핵심 기능이 빠져 있다.
이 책의 목표는 두 가지다. 첫째, Diffusion 모델의 내부 관점에서 모든 복잡한 용어와 노브를 이해하게 돕는다. 둘째, Diffusers의 한계를 극복하고 누락된 기능을 직접 구현하여, 완전히 커스터마이즈되고 산업 수준에 이르는 Stable Diffusion 애플리케이션을 만들 수 있게 한다.
Section 05실행 환경 구축
Stable Diffusion은 토크나이저를 제외한 모든 구성 요소가 신경망 가중치 데이터로 이루어진다. 이론적으로 CPU도 추론을 처리할 수 있지만, 최상의 경험은 CUDA를 갖춘 NVIDIA GPU에서 나온다.
Tokenizer — 텍스트 프롬프트를 토큰 시퀀스로 변환한다.
Text Encoder — CLIP 텍스트 인코더. 토큰을 텍스트 임베딩으로 인코딩한다. SDXL에서는 더 큰 OpenCLIP 텍스트 인코더도 함께 쓰인다.
VAE (Variational Autoencoder) — 이미지를 latent space로 인코딩하고 다시 이미지로 디코딩한다.
UNet — 노이즈 제거 프로세스가 일어나는 곳. 노이즈·time step·컨디셔닝 신호를 받아 노이즈 잔차를 예측한다.
| 구성 | 최소 | 권장 |
|---|---|---|
| GPU VRAM | 4GB (512×512만, 느림) | 8GB 이상 (SDXL은 15GB) |
| 시스템 RAM | 16GB | 32GB 이상 |
| 스토리지 | 1TB NVMe SSD | 2TB 이상 |
책의 코드는 8GB VRAM의 RTX 3070Ti와 24GB VRAM의 RTX 3090에서 테스트되었다. 소프트웨어로는 CUDA, Python 3.10+, PyTorch가 필요하다. Linux에서는 NVIDIA가 제공하는 Bash 스크립트로 CUDA 설치를 자동화할 수 있다.
# Windows — Chocolatey로 Python 설치 choco install python --version=3.10.6 # 가상 환경 생성 및 활성화 pip install virtualenv python -m virtualenv venv_sd_p310 venv_sd_p310\Scripts\activate python -m ensurepip python -m pip install --upgrade pip
GPU가 없다면 Google Colab이 대안이다. Colab은 클라우드에서 GPU 런타임을 무료로 제공하므로, 로컬 하드웨어 없이도 Stable Diffusion 파이프라인을 실험할 수 있다.