Stable Diffusion with Python 파이썬으로 배우는 확산 모델
Chapter 01 목차
제1부 · 빠른 소개 — 1·2장

Stable Diffusion이라는 새로운 붓

무작위 노이즈에서 출발해 한 걸음씩 디테일을 쌓아 올리는 딥러닝 모델. 그 진화의 계보를 더듬고, 실제로 손에 쥐기 위한 작업 환경을 갖춘다.

Diffusion CLIP Transformer CUDA PyTorch

Section 01확산이라는 발상

Stable Diffusion은 가이드된 지시와 이미지로부터 고품질 아트워크를 만드는 딥러닝 모델이다. OpenAI의 DALL-E 2 같은 다른 생성 모델과 달리, 이 모델은 무작위 노이즈 latent tensor에서 시작해 점진적으로 세부 정보를 추가하는 방식으로 작동한다.

추가되는 세부 사항의 양은 수학 방정식에 지배되는 확산(diffusion) 프로세스가 결정한다. 최종 단계에서 모델은 latent tensor를 픽셀 이미지로 디코딩한다. "말을 타는 우주 비행사의 사진" 같은 프롬프트 한 줄은, 엔터 키를 누르기 전에는 세상에 존재하지 않던 이미지를 만들어낸다. 사람과 모델의 협업인 셈이다.

텍스트-이미지 생성뿐 아니라, 자연어만으로 사진을 편집할 수도 있다. 자동 생성된 마스크와 프롬프트를 사용하면 우주 배경을 파란 하늘과 산으로 교체할 수 있다. 마우스 클릭도, Photoshop 같은 유료 소프트웨어도 필요 없다. 순수 Python과 Stable Diffusion이면 충분하다.

ConceptStable Diffusion의 핵심 특징

텍스트 설명에서 고품질 이미지를 생성한다. 다른 방법보다 안정적이고 신뢰할 수 있는 확산 프로세스에 기반한다. 1만 개 이상의 대규모 사전 훈련 공개 모델을 활용할 수 있고, 그 위에 새로운 연구가 끊임없이 쌓인다. 무엇보다 오픈 소스이며 누구나 사용할 수 있다.

Intuition — 열역학에서 빌려온 단어 "확산"이라는 용어는 열역학에서 차용되었다. 본래 의미는 고농도 영역에서 저농도 영역으로 입자가 퍼지는 현상이다. 머신러닝 연구자들은 이 발상을 노이즈 제거·샘플링 프로세스에 적용했다. 이미지에 노이즈를 퍼뜨려 망가뜨릴 수 있다면, 그 과정을 거꾸로 되돌리는 모델도 학습할 수 있지 않을까 — 이것이 출발점이다.

Section 02Transformer에서 CLIP까지

Diffusion 모델은 하루아침에 등장하지 않았다. 그리 오래전이 아니라, 합성곱 신경망(CNN)과 잔차 신경망(ResNet)이 컴퓨터 비전을 지배했다. 이들은 객체 감지와 얼굴 인식에서 매우 효과적이었지만 결정적 단점이 있었다 — 훈련 세트에 포함된 객체만 인식할 수 있다는 점이다. 새 객체를 다루려면 레이블을 추가해 재훈련해야 했다.

Google이 개발한 Transformer 모델은 이 판도를 바꿨다. 미리 정의된 레이블에 의존해 손실을 계산하던 기존 방식과 달리, Transformer는 Attention 메커니즘과 함께 선구적인 개념을 도입했다 — 훈련 데이터 자체를 훈련과 레이블링 목적 모두에 활용하는 것이다.

자기지도 학습 — 다음 단어 예측 STEP 01 / 5
space 재생 · → 다음 · R 리셋

OpenAI 연구자들은 이 힘을 포착해 CLIP을 만들었다. Attention 메커니즘과 Transformer 아키텍처를 사용해 이미지 분류 모델을 훈련했고, 레이블된 데이터 없이도 광범위한 이미지를 분류할 수 있게 했다. 인터넷에서 추출한 4억 개의 이미지-텍스트 쌍으로 훈련된 최초의 대규모 이미지 분류 모델이다.

CLIP 논문의 저자들은 이렇게 말한다: "약하게 감독된 모델과 자연어에서 직접 이미지 표현을 학습하는 최근 탐구 사이의 중요한 차이점은 규모다." 다른 모델이 20만 장을 사용할 때 CLIP 팀은 4억 장을 동원했고, 결과는 놀라웠다.

Key — CLIP만으로는 부족하다 CLIP에게 "사과를 그려라"라고 요청하면, 모델은 온갖 종류의 사과를 뒤섞어 반쯤 녹색이고 반쯤 빨간 사과를 만들어낼 수 있다. GAN은 사실적 이미지를 만들지만 텍스트 프롬프트를 활용하지 못한다. 가이드된 설명에 따라 이미지를 생성할, 새롭고 혁신적인 접근이 필요했다.

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을 출시했다.

Table 1.1 — 상업용 모델 대 Stable Diffusion
구분DALL-E 2 / MidjourneyStable Diffusion
라이선스클로즈드 소스CreativeML Open RAIL-M (오픈 소스)
소스 코드비공개읽고 수정·기능 추가 가능
커스텀 모델불가커뮤니티 공유 모델 무수히 활용
생성 제어권제한적Python으로 완전 제어
Intuition — "Stable Diffusion"이라는 이름의 모호함 Stable Diffusion이라 할 때, 실제로 무엇을 가리킬까. CompVis의 원본 GitHub 구현, Hugging Face의 Diffusers 라이브러리, AUTOMATIC1111의 WebUI, InvokeAI, ComfyUI — 모두 같은 이름으로 불린다. 이 책은 GUI 도구가 아니라 Stable Diffusion 모델 자체를, 그것도 순수 Python과 Diffusers로 다룬다.

DALL-E 2 같은 다른 모델과 달리, Stable Diffusion은 무작위 노이즈에서 출발해 점진적으로 세부 정보를 쌓는다 — 역방향 노이즈 제거(reverse denoising) 과정이다. 그 흐름을 한눈에 따라가 보자.

역방향 노이즈 제거 — 노이즈에서 이미지로 STEP 01 / 6
space 재생 · → 다음 · R 리셋
Key — 협업으로 태어나는 이미지 "말을 타는 우주 비행사의 사진"이라는 프롬프트 한 줄이 무작위 노이즈를 한 걸음씩 이미지로 빚어낸다. 우리가 설명을 제공하면, 모델은 그것을 이해할 뿐 아니라 디테일을 더한다. 이미지는 사람과 Stable Diffusion의 협업으로 태어난다.

Section 04왜 이 책인가

Stable Diffusion GUI 도구는 환상적인 이미지를 만들지만 사용성은 제한적이다. 수십 개의 노브와 특정 용어 때문에 고품질 이미지 생성이 때때로 추측 게임이 된다. 반면 Hugging Face의 Diffusers 패키지는 Python으로 완전한 제어권을 주지만, 커스텀 LoRA·Textual Inversion 로딩, 커뮤니티 모델 활용, 스케줄링·가중치 프롬프트, 무제한 프롬프트 토큰, 고해상도 수정·업스케일링 같은 핵심 기능이 빠져 있다.

이 책의 목표는 두 가지다. 첫째, Diffusion 모델의 내부 관점에서 모든 복잡한 용어와 노브를 이해하게 돕는다. 둘째, Diffusers의 한계를 극복하고 누락된 기능을 직접 구현하여, 완전히 커스터마이즈되고 산업 수준에 이르는 Stable Diffusion 애플리케이션을 만들 수 있게 한다.

Section 05실행 환경 구축

Stable Diffusion은 토크나이저를 제외한 모든 구성 요소가 신경망 가중치 데이터로 이루어진다. 이론적으로 CPU도 추론을 처리할 수 있지만, 최상의 경험은 CUDA를 갖춘 NVIDIA GPU에서 나온다.

ConceptStable Diffusion의 4대 구성 요소

Tokenizer — 텍스트 프롬프트를 토큰 시퀀스로 변환한다.

Text Encoder — CLIP 텍스트 인코더. 토큰을 텍스트 임베딩으로 인코딩한다. SDXL에서는 더 큰 OpenCLIP 텍스트 인코더도 함께 쓰인다.

VAE (Variational Autoencoder) — 이미지를 latent space로 인코딩하고 다시 이미지로 디코딩한다.

UNet — 노이즈 제거 프로세스가 일어나는 곳. 노이즈·time step·컨디셔닝 신호를 받아 노이즈 잔차를 예측한다.

Table 1.2 — 하드웨어 권장 사양
구성최소권장
GPU VRAM4GB (512×512만, 느림)8GB 이상 (SDXL은 15GB)
시스템 RAM16GB32GB 이상
스토리지1TB NVMe SSD2TB 이상

책의 코드는 8GB VRAM의 RTX 3070Ti와 24GB VRAM의 RTX 3090에서 테스트되었다. 소프트웨어로는 CUDA, Python 3.10+, PyTorch가 필요하다. Linux에서는 NVIDIA가 제공하는 Bash 스크립트로 CUDA 설치를 자동화할 수 있다.

Python 3.10 가상 환경 준비
# 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 파이프라인을 실험할 수 있다.