StyleGAN 논문은 PGGAN 구조에 Style transfer 개념을 적용하여 재구성한 논문이다. 그리해 StyleGAN을 정리하기 앞서 PGGAN을 간단하게나마 정리해보았다.
[PGGAN]

PGGAN는 낮은 해상도부터 높은 해상도까지 점진적으로 생성하는 생성모델로, z(노이즈 벡터, latent vector)를 정규화 후에 바로 Generator에 입력해 이미지 생성한다. 즉 z가 가진 모든 차원이 이미지의 모든 요소를 동시에 책임진다.
- z의 1번 값이 머리카락에만 영향을 주고
- z의 2번 값이 안경 여부에만 영향을 주고…
이런 식의 역할 분담이 없다. 이러한 역할 분담이 없는 것을 latent space가 뒤엉켜 특징 구분이 어려운 상태로, entangled라고 한다.
PGGAN의 Generator는 학습 데이터의 분포에 맞춰 이미지를 만드는데 이때 입력으로 사용하는 z는 Generator에게 직접 전달되기 때문에 Z 공간 자체가 학습 데이터의 확률분포를 따라간다. Z는 데이터 분포에 종속된 공간이라 말할 수 있다.
그런데 실제 데이터셋에는 특정 조합이 존재하지 않는 경우가 매우 많다. 예를 들면, 데이터에 검은 머리 + 안경 조합은 존재할 수 있으나, 검은 머리 + 안경 X 조합은 존재하지 않을 수 있다. 이런 경우 Generator는 해당 조합은 학습 데이터의 분포에 존재하지 않으니까 latent 공간을 구부려서라도 존재하지 않는 영역을 없애버려야겠다라고 생각한다. 따라서 latent space Z가 비틀리고(warped), 꺾이고(curved), 휘어진다.
하지만 앞서 언급했듯이 z는 특징 구분이 어려운 상태인 entangled하므로 어떤 차원을 움직이면 특정 특징만 변해야하는데, 여러 특징이 동시에 꼬여서 튀어나오는 문제가 발생한다. 예를 들면 검은 머리를 금발로 바꾸려고 시도하면 안경이 등장하거나 사라지고, 안경만 빼고 싶은데 눈 모양도 같이 바뀌고, 피부 색도 갑자기 변하는 문제이다. 이런 식으로 특징을 독립적으로 조절하는 것이 거의 불가능했다. 이러한 한계점은 StyleGAN에서 개선된다.
[StyleGAN]
StyleGAN은 PGGAN(Progressive Growing GAN) 구조 위에서 스타일을 이미지 생성 과정에 직접 주입할 수 있도록 Generator 구조를 재설계한 모델이다. 쉽게 말해 특징 단위의 조절(scale-specific control)을 가능하게 만든 첫 아키텍처라고 볼 수 있다.

StyleGAN의 핵심 아이디어는 z를 그대로 쓰지 않고, 먼저 정리된 공간(W)으로 변환해서 사용하는 방법으로, 기존에는 z → Generator 과정이었다면, StyleGAN은 z → Mapping Network → w → Style 을 각 레이어에 전달하는 과정으로 변경되었다. 여기서 Mapping Network는 8개의 MLP로 구성된 작은 신경망으로, z의 뒤틀린(entangled) 구조를 비선형적으로 펴고 데이터 분포와 더 잘 맞는 형태로 재정렬하며 특징들을 서로 다른 방향으로 분리해주는 역할을 하기 때문에 W 공간은 Z보다 훨씬 더 명확하게 특징이 분리되고(disentangled) 선형적으로 조절 가능한 latent space가 된다.

추가적으로 StyleGAN은 기존 GAN처럼 첫 레이어에만 latent를 넣는 것이 아니라, 이미지 생성의 모든 단계(4×4 ~ 1024×1024)에 w에서 만들어진 style(그림의 A)을 주입한다. 각 레이어에서는 AdaIN(Adaptive Instance Normalization)이 적용되는데, scale(ys)과 bias(yb) 값이 하나의 style로 작동한다.
→ 저해상도 레이어(coarse)는 포즈, 얼굴형 같은 큰 특징
→ 중간 레이어(middle)는 눈, 코, 입 모양 같은 중간 특징
→ 고해상도 레이어(fine)는 피부결, 머리카락 결 같은 미세 특징
을 담당하게 된다. 이 구조로 처음으로 scale-specific control이 가능해졌다.
머리카락 결이나 피부 질감, 수염이나 주근깨의 위치, 배경의 작은 질감같은 부분은 랜덤하게 만들어줘도 자연스러운 부분이다. 따라서 이런 것들을 stochastic variation라고 부르는데, 이런 디테일을 GAN이 직접 학습해서 만들려고 하면 너무 많은 capacity가 필요하고 디테일이 일정한 패턴을 만들어 오히려 부자연스러울 수 있다.
그리해 StyleGAN은 각 레이어마다 독립된 Gaussian noise(그림의 B)를 넣는다. coarse layers(낮은 해상도)는 큰 패턴(머리털 뭉치 위치 등)을 변화시키고, fine layers(높은 해상도)는 미세한 머리카락 결, 피부결을 변화시킨다. noise는 피쳐맵 전체에 똑같이 쓰이는 게 아니라 각 feature map에 learned scale factor(B) 로 조절된다. noise → (학습된 scale) → Conv 결과에 더해진다. 이러한 방식은 noise가 어느 정도 영향을 줄지 자동으로 학습된다.
[AdaIN]
AdaIN은 쉽게 말해 정규화와 스타일 입히기를 동시에 하는 레이어다.
1) 정규화 역할 (Normalization)
신경망은 레이어를 지나가면서 feature의 평균과 분산이 계속 변해 학습이 불안정해진다. 그래서 CNN에서는 BatchNorm이나 InstanceNorm, LayerNorm과 같은 정규화를 적용한다.

StyleGAN에서는 AdaIN이 이러한 정규화 역할을 대신 한다. AdaIN에서 위 수식은 정규화 역할을 담당하며, 각 채널별 feature를 평균 0, 분산 1로 정규화(InstanceNorm) 한다.
2) 스타일 입히기 (Style Injection)
정규화된 feature의 style에서 나온 두 개의 값(ys, yb)을 적용한다.

- ys,i = 이 채널을 얼마나 키울지(scale), 스타일의 강도
- yb,i = 이 채널을 얼마나 이동시킬지(bias), 스타일의 방향
을 의미한다.
그런데 style(y)를 어떻게 만들까?

latent vector w(W 공간의 벡터)를 Affine Transform(A)이라는 작은 FC layer에 넣으면 w → Affine(A) → [ys, yb]로, 512차원 w에서 각 채널마다 필요한 스타일값 2개(ys, yb) 를 학습해 반환한다.
AdaIN은 “정규화된 feature를 ys, yb로 조정”한다. 각 레이어에서 단 하나의 스타일만 영향을 주게 되어 특징들이 scale 기준으로 자연스럽게 분리된다:

- coarse layer에는 coarse 스타일만 적용됨, 포즈/얼굴형은 저해상도 레이어
- middle layer에는 middle 스타일만 적용됨, 눈/코/입은 중간 레이어
- fine layer에는 fine 스타일만 적용됨, 피부결·머리카락 결은 고해상도 레이어
에서만 바뀌는 현상이 나타난다.
[Style Mixing Regularization]
Style Mixing은 StyleGAN의 latent 스타일들이 서로 섞이지 않고, 깨끗하게 분리되도록(disentangled) 도와주는 Regularization 기법으로, 각 레이어가 담당하는 스타일을 확실하게 분리시키기 위해 학습 중 일부 이미지들을 여러 latent에서 섞어서(style mix) 학습시키는 방법이다.
하나의 latent z만 계속 쓰면 스타일들이 얽혀 버리는(entangled) 문제가 발생한다. StyleGAN에서 입력 z는 Mapping Network를 지나 w가 된다. 그런데 항상 동일한 w만을 이용해 전체 레이어를 학습하게 되면, 앞서 언급한 coarse layer, middle layer, fine layer 레이어들이 서로 상관관계(correlation)가 생겨버릴 수 있다.
하나의 예시로
데이터셋에서 대머리 = 항상 선글라스 착용 같은 bias가 있다면
→ Generator는 대머리 = 선글라스라는 잘못된 상관관계를 학습하고,
→ 나중에 latent를 바꿔도 대머리를 만들면 선글라스를 항상 넣는 문제가 발생한다.
즉 각 스타일이 서로 독립적으로 학습되지 않고 서로 얽히는 문제가 발생한다.
그리해 Style Mixing은 학습 중 일부 배치에서 잠깐 스타일을 섞어버린다.

아래처럼 두 개의 latent를 뽑아서:
z1 → mapping → w1
z2 → mapping → w2
중간 레이어를 기준으로 스타일을 섞어 버린다.
4×4 ~ 32×32 : w1의 스타일 사용
64×64 ~ 1024×1024: w2의 스타일 사용
하나의 이미지 생성 과정에서 두 개의 스타일이 반씩 들어가는 crossover를 강제로 수행하는 것.
split이 middle 앞에서 끊긴 경우
[ coarse layers ] = w1
[ middle layers ] = w2
[ fine layers ] = w2
다른 경우도 가능하다.
split이 coarse 영역 중간에서 끊긴 경우
[ coarse 일부 ] = w1
[ coarse 나머지 ] = w2
[ middle ] = w2
[ fine ] = w2
split이 middle 레이어 안쪽에서 끊긴 경우
[ coarse ] = w1
[ middle 일부 ] = w1
[ middle 나머지 ] = w2
[ fine ] = w2

이런 방식을 적용하게 되면, 학습하는 Generator 입장에서 레이어마다 스타일이 계속 바뀌기에 어떤 스타일을 어느 레이어에서 써야 하는지 정확히 분리해야겠다라는 학습 압력이 생긴다. 따라서 아래와 같이 자연스럽게 레이어별 책임 분담이 이루어진다:
- coarse layer는 coarse 스타일만 처리하도록
- middle layer는 middle 스타일만 처리하도록
- fine layer는 fine 디테일만 처리하도록
[Measure]
StyleGAN은 이미지의 다양한 특징을 서로 독립적으로 조절할 수 있는지, latent space가 얼마나 disentangled 되어 있는지가 더 중요했기에 이를 정량적으로 평가하기 위해 논문에서는 두 가지 지표를 제안했다.
① Perceptual Path Length (지각적 경로 길이)
Perceptual Path Length는 latent 공간에서 벡터를 조금씩 움직였을 때 이미지 변화가 얼마나 부드럽고 일관적인지를 측정하는 지표이다. 만약 latent space가 entangled된 상태라면, latent 값을 아주 조금만 바꿔도 이미지가 갑자기 확 변하거나 여러 속성이 동시에 요란하게 바뀌는 현상이 발생한다.
이 문제를 평가하기 위해 논문에서는 latent interpolation을 사용한다. 두 개의 latent w₁, w₂를 정한 뒤 그 사이를 아주 작은 간격으로 보간하며 이미지를 생성하고, 각 단계에서 이미지가 얼마나 자연스럽게 변화하는지를 측정한다. 단순 픽셀 차이가 아닌, 사람 눈이 보는 방식과 가장 유사한 지각적 차이를 반영하기 위해 pretrained VGG16의 중간 레이어 feature를 사용해 이미지 간 거리를 계산한다. 이 거리 변화가 부드럽게 이어지면 path length가 짧아지고, 갑작스럽게 요동치면 path length가 길어진다. 따라서 path length가 짧을수록 latent space가 더 disentangled되어 있다는 의미가 된다. 실제로 논문에서는 Z 공간보다 W 공간의 path length가 훨씬 짧았고, Style Mixing까지 적용했을 때 가장 좋은 값을 보였다.

latent interpolation 보간법에는 두 가지 방법이 있는데, 이때 어떤 보간 방식을 쓰느냐에 따라 결과가 크게 달라질 수 있기 때문에
논문에서는 두 가지 보간 방법을 서로 다르게 적용했다.
- Linear interpolation (LERP)
- Spherical interpolation (SLERP)

- Z-space에서는 SLERP 사용
Z 공간은 정규분포에서 샘플되는 벡터이기 때문에 분포가 구 중심을 기준으로 대칭적이며, 길이가 일정한 고차원 구(hypersphere) 형태를 띈다. 이런 공간에서는 두 점을 단순 직선으로 잇기보다, 구의 곡면을 따라 이동하는 SLERP가 더 자연스럽다. 그래서 논문에서도 Z-space path length를 측정할 때는 SLERP를 사용했다.
- W-space에서는 LERP 사용
반면 W 공간은 Mapping Network를 통해 학습된 비정형적 공간으로, Z처럼 구면적 분포를 가지지 않는다. 일반적인 유클리드 공간처럼 평평하고(flat), 길이나 방향에 일정한 제약이 없다. 이런 공간에서는 구면 보간(SLERP)을 사용할 이유가 없기 때문에 단순한 LERP(직선 보간) 을 사용한다.그리해 논문에서도 W-space path length를 평가할 때도 LERP가 사용된다.
② Linear Separability (선형 분리성)
두 번째 측정법은 latent space에서 이미지의 속성들이 얼마나 선형적으로 분리되는지를 확인하는 지표다.
만약 latent space가 정말 disentangled되어 있다면, 성별이나 나이, 웃는 정도, 안경 착용 여부와 같은 속성들이 서로 다른 방향에 깔끔하게 정렬되어 있어야 한다. 이렇게 속성이 서로 다른 직선 방향으로 구분되는 공간을 선형 분리(linearly separable)하다고 한다.
측정 방법은 StyleGAN이 생성한 이미지들을 pretrained classifier로 분석해 성별, 안경, 표정 같은 속성으로 라벨링한다. 그 다음 latent vector w와 속성 라벨을 사용해 아주 간단한 선형 분류기(SVM이나 Linear Regression)를 학습시키고 이 분류기의 정확도를 측정한다. 만약 latent space가 잘 disentangled되어 있다면 단순한 선형 분류기만으로도 속성을 잘 구분할 수 있게 된다. 논문 결과에서도 W 공간은 Z 공간보다 훨씬 높은 선형 분리성을 갖는 것으로 나타나 Mapping Network와 Style Mixing이 실제로 disentanglement 향상에 기여하고 있음을 보여준다.
[Limitations]

StyleGAN은 매우 뛰어난 이미지를 생성하지만, 완벽한 모델은 아니다. 논문에서도 언급되었듯이 생성된 이미지 일부에서는 물방울처럼 뭉친 blob 형태의 이상 패턴이 나타나는 경우가 종종 관찰된다. 이는 AdaIN으로 인해 특징이 지나치게 정규화되면서 레이어 간 정보 흐름이 비정상적으로 강해지고, 특정 영역에서 불규칙적인 패턴이 생기는 현상으로 알려져 있다. 이 문제는 다음 버전인 StyleGAN2에서 언급되어있다.
[Conclusion]
StyleGAN은 고해상도 이미지 생성 분야에서 큰 전환점을 만든 모델이다. 기존 GAN과 달리, 각 레이어에 스타일(style)을 직접 주입하는 구조를 도입함으로써 이미지를 특정 스타일 방향으로 정교하게 조절할 수 있는 강력한 생성 능력을 보여준다. 특히 Mapping Network를 통해 Z 공간을 disentangled한 W 공간으로 변환하는 접근 방식은 latent 공간 구조를 깊이 있게 이해하고 재설계했다는 점에서 매우 혁신적이다. 또한 AdaIN을 통한 스타일 제어, Noise를 활용한 디테일 생성, Style Mixing Regularization을 통한 스타일 분리 등은 기존의 단일 latent 입력 구조에서는 불가능했던 다양한 편집 능력을 가능하게 만들었다. 이러한 요소들이 결합되어 StyleGAN은 고해상도 이미지 생성뿐 아니라, 이미지 편집, 스타일 조합, 특징 제어 같은 여러 응용 분야에서도 매우 뛰어난 성능을 보여주는 모델로 자리 잡았다.
StyleGAN의 작동 결과가 궁금해서 NVIDIA가 공개한 StyleGAN2-ADA PyTorch 공식 구현(https://github.com/NVlabs/stylegan2-ada-pytorch) 을 클론해 구글 코랩 환경에서 실행해 보았다.
- ffhq.pkl 모델을 사용해서, seed 0부터 7까지 총 8장의 이미지를 생성

- rows에 있는 latent는 coarse 스타일(큰 구조), cols에 있는 latent는 fine/middle 스타일(세부 특징)을 제공해서 스타일이 섞인 이미지 표를 생성

- 차례로 stochastic noise 강도를 0.3, 0.5, 0.8로 조절함. stochastic noise 강도를 조절해 피부결, 머리카락, 질감 같은 fine 디테일만 변화시킴



- 각 레이어 별로 노이즈를 주입해본 결과:
- 초기 레이어는 레이아웃, 얼굴형 같은 큰 구조
- 중간 레이어는 눈, 코, 입 같은 facial features
- 후기 레이어는 색감, 질감, 조명 같은 fine detail
을 담당한다는 것을 직접 확인할 수 있었다.



[참고]
https://www.youtube.com/watch?v=HXgfw3Z5zRo&t=241s
https://circle-lab.tistory.com/17
'ML&DL > 논문리뷰' 카테고리의 다른 글
| Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks (0) | 2025.12.29 |
|---|---|
| VAE: Auto-Encoding Variational Bayes (0) | 2025.12.23 |
| CycleGAN: Unpaired Image-to-Image Translationusing Cycle-Consistent Adversarial Networks (0) | 2025.11.19 |
| R-CNN: Regions with CNNfeatures (0) | 2025.11.18 |
| GAN: Generative Adversarial Nets (0) | 2025.11.17 |