:)
[Gen AI] Stable Diffusion 본문
Stable Diffusion
Stable Diffusion은 Latent Diffusion Model(LDM) 기반의 Text-to-Image 생성 모델.
일반적인 Diffusion 모델은 고해상도 이미지 픽셀 공간에서 노이즈를 주고 제거하는 과정을 학습함. 하지만 이 방식은 메모리와 연산량이 매우 크다는 단점이 존재함.
이를 해결하기 위해 Stable Diffusion은 이미지를 latent space로 압축 → 더 작은 차원에서 노이즈 제거 학습. 다시 디코딩해 고해상도 이미지 복원. 픽셀 공간이 아닌 latent space에서 diffusion을 수행하기 때문에 더 효율적.

모델 구조
- Text Encoder (CLIP / OpenCLIP)
- 사용자의 텍스트 프롬프트를 임베딩 벡터로 변환
- 이미지 생성 시 의미적으로 반영됨
- UNet 기반 Diffusion Model
- 잠재공간의 노이즈 제거 역할 수행
- 텍스트 임베딩을 Cross-Attention으로 주입
- Variational Autoencoder (VAE)
- 이미지 ↔ 잠재공간 변환
- 학습 시 이미지를 latent로 압축, 생성 시 latent를 다시 이미지로 복원
Stable Diffusion 3
- 모델 규모: SD3 Medium ≈ 2B 파라미터.
- 텍스트 인코더
- 3개 고정 인코더: CLIPs: OpenCLIP-ViT/G, CLIP-ViT/L, T5: T5-v1.1-XXL.
- VAE
- 16-채널 AutoEncoder(SDXL 계열과 유사) 사용.
- 디퓨전(트랜스포머)
- MMDiT(멀티모달 디퓨전 트랜스포머**)** 구조 + flow-matching 학습 목표. 규모는 위 파라미터 수에 해당.
Stable Diffusion 3.5
- 모델 규모: Large = 8.1B 파라미터, Medium = 2.5B 파라미터, Large Turbo: Large의 속도 최적화 버전.
- 텍스트 인코더
- 3개 고정 인코더: CLIPs: OpenCLIP-ViT/G, CLIP-ViT/L, T5: T5-v1.1-XXL.
- 컨텍스트 길이: CLIP 계열은 77 토큰, T5는 77 또는 256 토큰 지원로 명시.
- OpenCLIP-ViT/G: 모델 크기가 커서 여러 언어, 스타일까지 커버 가능하지만 데이터가 덜 정제됨
- CLIP-ViT/L: 작고 안정적, 영어 태그, 짧은 프롬프트에 강함
- T5-v1.1-XXL: 긴 문장, 구체적인 묘사, 관계에 강함
- 3개 고정 인코더: CLIPs: OpenCLIP-ViT/G, CLIP-ViT/L, T5: T5-v1.1-XXL.
- VAE
- 16-채널 사용 (= SD3 계열 특성).
- 디퓨전(트랜스포머)
- MMDiT-X (eXtended MMDiT)
- 초기 층에 Self-Attention 추가 → 입력 신호 안정화.
- QK Normalization 적용 → attention 계산을 안정화하고 학습 효율 높임.
- multi-resolution training→ 다양한 출력 크기에 더 잘 대응.
- 파라미터 수는 8.1B, 2.5B 모델 크기에 따라 달라짐.
- MMDiT-X (eXtended MMDiT)
FLUX.1
- 모델 규모: FLUX.1-dev = 12B, FLUX.1-schnell = 12B 파라미터 (둘 다 rectified flow transformer).
- 텍스트 인코더
- 2개 인코더: CLIP ViT-L/14 + T5-v1.1-XXL (듀얼 인코더).
- VAE
- 16-채널 사용 (Flux 계열 전반).
- 디퓨전(트랜스포머)
- Rectified Flow 기반 트랜스포머. dev/schnell 모두 12B급 트랜스포머.
| SD3.5 Large | FLUX.1-dev | |
| 파라미터 | 8.1B | 12B |
| 텍스트 인코더 | CLIP×2 + T5 | CLIP-L + T5-XXL (듀얼) |
| VAE/잠재 채널 | 16-채널 | 16-채널 |
| 트랜스포머 특징 | MMDiT | Rectified Flow Transformer |
| MMDiT (SD3/3.5) | Rectified Flow Transformer (FLUX.1) | |
| 방식 | 확산(스코어 매칭) | 플로우 매칭 |
| 텍스트 처리 | 텍스트+이미지 토큰 동시 트랜스포머 | 유사하지만 구조 단순화 |
| 강점 | 프롬프트 충실도, 디테일 묘사 | 빠름, 효율적 |
| 약점 | 느림, 계산량 큼 | 디테일한 속성 반영은 약할 수 있음 |

Prompt Adherence: SD 3.5 Large > FLUX.1 dev
Aesthetic Quality: SD 3.5 Large < FLUX.1 dev
yaml 설정
두 부분말고는 모두 동일.
datasets → resolution
- SD3.5: resolution: [1024] (단일)
- Flux: resolution: [512, 768, 1024] (멀티)
train 블록
- SD3.5만 timestep_type: "linear" 지정. (timestep_type: 학습 시 시간 t∈[0,1] 을 어떤 분포로 샘플링할지를 지정하는 옵션)
- Flux 쪽엔 없음.→ Flux는 rectified flow 특성상 timestep 샘플링 설정이 필요 없음.
'AI' 카테고리의 다른 글
| [LLM] LLM Fine-tuning: Unsloth 개요 (1) | 2025.10.04 |
|---|---|
| [MCP] Introduction to Model Context Protocol (0) | 2025.06.30 |
| [BE] ElasticSearch 개념 정리 (0) | 2025.02.07 |
| [CV] YOLO v3 (0) | 2025.02.07 |
| [Gen AI] Diffusion-based Video Generative Models (2) | 2025.01.09 |