주제: 8-2 StyleGAN (스타일 기반 잠재공간 제어)
분류: generative
타입: concept
난이도: 중급
선수지식: 있음 — GAN, CNN, Latent Vector
문제 설정
기존 GAN은 다음 방식으로 이미지를 생성합니다.
z → Generator → Image
문제:
- latent vector z가 이미지 속성을 직접적으로 제어하기 어려움
- 특정 속성(머리 스타일, 조명 등)을 조절하기 힘듦
StyleGAN은 이 문제를 해결하기 위해 스타일 기반 생성 구조를 도입했습니다.
1. StyleGAN 핵심 아이디어
기존 GAN:
z → Generator → Image
StyleGAN:
z → Mapping Network → w
↓
Style Control
↓
Generator
↓
Image
핵심은 latent space를 분리하여 이미지 스타일을 제어하는 것입니다.
2. Latent Space 구조
StyleGAN은 두 가지 latent space를 사용합니다.
| 공간 | 설명 |
|---|---|
| Z space | 입력 노이즈 공간 |
| W space | 스타일 제어 공간 |
변환:
기호 의미
- z : noise vector
- f : mapping network
- w : style vector
왜 필요한가
더 disentangled한 latent representation을 만들기 위해서입니다.
주의점
Z 공간보다 W 공간이 더 의미 있는 표현을 제공합니다.
3. Mapping Network
Mapping network는 z를 w로 변환하는 MLP입니다.
z → MLP → w
수식:
왜 필요한가
latent 공간을 더 구조화된 표현으로 변환합니다.
4. Style Injection
StyleGAN은 각 convolution layer에 스타일을 주입합니다.
이 과정은 AdaIN (Adaptive Instance Normalization)으로 수행됩니다.
기호 의미
- x : feature map
- μ(x) : 평균
- σ(x) : 표준편차
- s, b : style parameters
왜 필요한가
각 레이어에서 이미지 스타일을 제어할 수 있습니다.
주의점
style parameter는 latent vector w에서 생성됩니다.
5. Multi-Scale Style Control
StyleGAN은 레이어마다 다른 스타일을 적용합니다.
| 레이어 | 이미지 속성 |
|---|---|
| 초기 레이어 | 얼굴 구조 |
| 중간 레이어 | 눈/코/입 |
| 후반 레이어 | 색상/텍스처 |
직관
초기 layer는 global structure를 제어하고 후반 layer는 세부 스타일을 제어합니다.
6. Noise Injection
StyleGAN은 추가적으로 noise를 feature map에 주입합니다.
왜 필요한가
이미지의 세부적인 랜덤 디테일을 생성합니다.
예:
- 머리카락
- 주름
- 피부 질감
7. Style Mixing
StyleGAN은 서로 다른 latent code를 섞을 수 있습니다.
z1 → early layers
z2 → later layers
결과
- 얼굴 구조 → z1
- 색상 스타일 → z2
왜 중요한가
latent disentanglement를 촉진합니다.
8. StyleGAN 구조
z
↓
Mapping Network
↓
w
↓
Style Injection (AdaIN)
↓
Noise Injection
↓
Generator
↓
Image
9. StyleGAN 장점
- 고해상도 이미지 생성
- latent space disentanglement
- 세밀한 스타일 제어
10. StyleGAN 한계
- 학습 비용 높음
- 데이터 편향 문제
- 모드 붕괴 가능성
코드-수식 연결
| 개념 | 코드 | 설명 |
|---|---|---|
| noise 생성 | torch.randn(latent_dim) |
z vector 생성 |
| mapping network | MLP(z) |
z → w 변환 |
| style injection | AdaIN() |
style modulation |
자주 하는 오해 5개
- StyleGAN은 기존 GAN과 동일한 구조라고 생각한다
- latent vector 하나만 사용한다고 생각한다
- 스타일은 마지막 레이어에서만 적용된다고 생각한다
- AdaIN은 단순 normalization이라고 생각한다
- StyleGAN은 항상 완벽한 disentanglement를 제공한다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- StyleGAN에서 Z space와 W space의 차이는 무엇인가?
- Mapping network는 어떤 역할을 하는가?
- AdaIN은 어떤 방식으로 스타일을 제어하는가?
- 왜 레이어별 style control이 가능한가?
- Style mixing은 어떤 목적을 가지는가?