newhaneul

[Seoul National Univ: Computer Vision] Lecture 21. Generative Adversarial Networks 2 본문

2. Artificial Intelligence/Seoul National Univ. Computer Vision

[Seoul National Univ: Computer Vision] Lecture 21. Generative Adversarial Networks 2

뉴하늘 2025. 6. 27. 16:41
728x90

본 포스팅은 서울대학교 이준석 교수님의 M3224.000100 Machine Learning for Visual Understanding을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

 

https://youtu.be/tFQYLT6itBw?si=_9-ADeRIqeu-Iawq

 

GANs for Image-to-Image Translation

Image Translation

 Image translation task는 입력되는 이미지의 의미(형태)는 유지한 채 변환하고 싶은 이미지의 스타일로 입력 이미지를 변환하는 작업을 의미한다. 

1. GANs for Image-to-Image Translation: Pix2pix (2016)

 Pix2pix은 입력으로 이미지 쌍 (x, y)를 받고, 도메인 X의 이미지 x를 도메인 Y의 스타일 y로 변환하는 모델이다. 

 

Pix2pix: Generator

  • 입력 이미지 x를 도메인 Y의 스타일의 이미지 G(x)로 변환한다.
  • Discriminator를 속이기 위해 실제와 비슷한 이미지를 생성하는 것을 목표로 한다.

Pix2pix: Discriminator

  • 입력이 실제 이미지 쌍 (x, y)인지 또는 생성된 이미지 쌍 (x, G(x)) 인지를 구분한다.
  • 일반 GAN과는 달리, 입력으로 이미지 쌍을 받는다.

Pix2pix: Objective Function

 

Adversarial Loss

Discriminator

  • 전체 이미지 쌍 (x, y)에 대해서는 D(x, y)가 1이 되도록 학습 → 첫 항을 최대화
  • 생성된 이미지 쌍 (x, G(x))에 대해서는 D(x, G(x))가 0이 되도록 학습 → 두 번째 항을 최대화

Generator

  • 생성된 이미지 쌍 (x, G(x))에 대해서 D(x, G(x))가 1이 되도록 학습  두 번째 항을 최소화

Reconstruction Loss (L1 distance)

  • 생성된 이미지 G(x)와 GT 간의 픽셀 단위 차이를 L1 distance를 사용하여 최소화한다.
  • GT와 비교함으로써 단순히 현실적인 이미지를 만드는 것뿐 아니라 실제 이미지와 유사하게 만들도록 학습이 진행된다.

Pix2pix: Implementation Details

 Pix2pix의 Generator는 DeconvNet + Skip-connection U-Net을 사용한다. 이때 skip-connection은 encoder의 중간 feature map을 decoder에 그대로 연결하여 정보 손실을 줄이는 역할을 한다.

 

 Pix2pix의 Discriminator는 전체 이미지를 작은 패치 단위로 나누어 진짜인지 가짜인지를 판별하는 PatchGAN을 사용한다. 각 patch 마다 손실을 전달하기 때문에 Generator는 더 세부적인 피드백을 제공받을 수 있다. 이때 patch size가 작을수록 고품질 이미지를 생성해내게 되고, patch size가 크면 전체적으로 흐릿해져 보이게 된다.

Pix2pix: Examples

Pix2pix: Summary

 Pix2pix는 adversarial loss 덕분에 실제 사진과 비슷하게 image-to-image 변환이 가능하였고, 다양한 image-to-image translation에 적용가능한 모델이다.

 

 그러나 훈련 과정에서 이미지 쌍을 입력받아야 한다는 한계가 존재한다. 대부분의 style transfer task는 이미지 쌍을 보유하고 있지 않기 때문에 학습할 수 있는 데이터의 한계가 존재한다.

Image-to-Image Translation with Cycle Consistency

2. CycleGAN (2017)

 

 CycleGAN은 Pix2pix 모델이 훈련 시에 이미지 쌍을 입력으로 받았던 문제점을 개선한 모델이다. CycleGAN은 두 개의 Generator를 사용하여 이미지 쌍이 아닌 데이터들로 훈련이 가능하다. Input으로는 Domain X {x1, x2, x3 ... xM}와 Domain Y {y1, y2, y3 ... yM}을 입력으로 받고 이 두 도메인 간에는 쌍이 존재하지 않는다.

 

Adversarial Loss

  • Pix2pix의 Adversarial Loss와 동일한 구조이다.
  • Generator가 생성한 이미지 G(x)가 도메인 Y와 구별되지 않도록 학습한다.
  • Discriminator는 G(x)를 가짜 이미지로, y를 실제 이미지로 판단하도록 학습한다.

Cycle Consistency Loss

  • Generator가 생성한 이미지 G(x)를 원래 도메인 X로 되돌리는 작업을 진행한다.
  • 즉, 다시 되돌렸을 때의 이미지 F(G(x))는 원본 이미지와 같아야 한다.
  • 이 Loss를 통해 이미지의 의미적 정보가 보존되도록 한다.

CycleGAN: Objective Function

 

Adversarial Loss

  • Discriminator가 실제 이미지 y에 대해서는 1에 가까운 점수를 출력하도록 학습한다.

  • Discriminator가 생성된 이미지 G(x)에 대해서는 0에 가까운 점수를 출력하도록 학습한다.
  • Generator는 생성된 이미지 G(x)를 판별하는 D(G(x))가 1에 가까운 점수를 출력하도록 학습한다.

Cycle-Consistency Loss

  • 입력 이미지 x를 도메인 Y 스타일의 이미지로 변환했다가 다시 원래 도메인 X 스타일의 이미지로 되돌렸을 때, 원본과 최대한 비슷하게 만들도록 학습한다.
  • L1 normalization으로 차이를 줄이도록 학습한다.

CycleGAN: Implementation Details

Generator는 ResNet을 사용해 residual connection으로 정보 손실을 최소화하고, Discriminator는 PatchGAN 70 x 70을 사용한다.

 

 기존의 GAN이 사용했던 Cross entropy loss는 vanishing gradient 문제를 일으킬 수 있기 때문에 Least-Square GAN를 사용한다. 

CycleGAN: Examples

CycleGAN: Summary

 CycleGAN은 Pix2pix와 달리 이미지 쌍을 입력으로 받지 않아도 된다. 그리고 고해상도 이미지를 생산해내고 style transfer가 꽤 잘 작동되는 모델이다.

 

 하지만 Generator가 2개인 큰 네트워크 구조이기 때문에 학습 속도가 느리다는 단점이 있다. 또한 이미지의 형태 변화에는 성능이 좋지 못하다.

3. DiscoGAN (2017)

 DiscoGAN은 CycleGAN과 동일한 아이디어를 사용해 두 개의 Generator, 두 개의 Discriminator 구조를 가진 모델이다.심지어 같은 loss function도 사용하였지만, 결정적으로 실험 목적과 설정이 달라 다른 결과를 내었다. 

 

 CycleGAN은 스타일 변화에 중심인 모델이었다면, DiscoGAN은 형태 변화를 중심으로한 모델이다. 

DiscoGAN: Implementation Details

 DiscoGAN의 Generator는 Encoder-Decoder 구조로, DeconvNet을 사용하여 Upsampling을 진행하였다. CycleGAN은 ResNet의 Skip connection을 사용하였지만, DiscoGAN은 이를 사용하지 않아 정보 손실이 발생하는 문제가 있었다. 따라서 고해상도 이미지 보다는 저해상도 이미지를 만들어낸다.

 

 저해상도 이미지 특성상 형태 변화에 더 유연하게 대응이 가능했고, 단순한 네트워크 구조로 학습 속도도 더 빨랐다.

DiscoGAN: Examples

4. StarGAN (2017)

 StarGAN은 CylceGAN/DiscoGAN의 도메인 개수 증가에 따른 비효율성 문제를 해결하기 위해 제안된 구조이다. 기존의 모델들은 도메인이 N이면, 총 N(N-1) 개의 Generator가 필요하였다. 즉, 도메인 각각의 변환을 위한 모델이 따로 필요했다.

 

 StarGAN는 모든 도메인간 image-to-image translation을 하나의 단일 Generator로 통합하는 것을 목표로 한다.

StarGAN: Main Idea

먼저 여러 개의 이미지 데이터셋을 사용할 수 있고, 각 데이터셋은 다른 label 세트를 가질 수 있다고 가정한다.

 

 Generator는 입력으로 이미지와 one-hot vector 혹은 multi-hot vector로 이루어진 Target 도메인 라벨을 받는다. 그러면 이미지를 입력으로 받은 도메인 정보를 바탕으로 변환하여 가짜 이미지를 생성한다. 이 가짜 이미지는 원래 이미지의 도메인과 함께 Generator의 입력으로 다시 들어가서 원래 이미지처럼 보이도록 변환한다. (Reconstruction Loss)

 

 Discriminator는 Generator가 만든 이미지와 실제 이미지를 구분하여 실제 이미지인 경우 1에 가까운 점수를 주고, 가짜 이미지인 경우 0에 가까운 점수를 주도록 학습한다. 추가로 StarGAN에서는 Discriminator가 입력 이미지의 도메인을 올바르게 분류하도록 학습하는 Domain Classification Loss가 존재한다. 

StarGAN: Objective Function

 

Adversarial Loss

  • Discriminator는 진짜 이미지 D(x)에 대해서는 1에 가까운 값을 출력하도록, 가짜 이미지 G(x, c)에 대해서는 0에 가까운 값을 출력하도록 학습한다.
  • Generator는 D(G(x, c))가 1에 가까운 값을 출력하도록 학습한다.

Reconstruction Loss (Cycle-consistency)

  • 원본 이미지와 되돌린 이미지를 비교하는 Loss이다.
  • G(x, c)는 입력 이미지를 domain c로 변환한 1차 이미지이고, G(G(x, c), c')은 1차 이미지를 원래 domain c'으로 변환한 2차 이미지이다.

Domain Classification Loss

  • Discriminator는 실제 이미지 x의 domain c'을 맞추도록 학습한다.

  • 또한 Discriminator는 Generator가 생성한 이미지 G(x, c)의 domain이 원래 domain c' 임을 알아채서 분류하도록 학습한다.

StarGAN: How it works

StarGAN: Examples

GANs for Style Transfer 

5. StyleGAN (2018)

 

 StyleGAN은 지금까지 black-box 구조여서 해석이 불가능했던 Generator의 구조를 개선한 모델이다. StyleGAN은 latent space z에서 잠재요인(hidgh-level attributes, stochastic variation)을 분리하는 것을 목표로 한다. latent space z에서 잠재적 요인들을 잘 분리하게 되면 해석이 가능할 것이다.

 아래 슬라이드는 기존 Generator 구조를 보여준다. Conv을 진행하다 Upsampling을 통해 출력 해상도를 점점 증가시키는 전형적인 U-Net 구조이다. 이 구조는 각 Conv layer이 데이터셋에서 어떤 feature를 중요하게 반영하고 있는지를 알 수 없다. StyleGAN은 인위적인 개입을 통해 feature를 조절하고자 한다.

 

 첫 번째 아이디어는 기존 Generator의 구조 중간마다 Adaptive Instance Noramlization(AdaIN)을 추가하는 것이다. Generator는 latent vector z를 입력으로 받아서 스타일 벡터 y로 변환하는 역할을 한다. AdaIn은 feature map과 style vector를 입력으로 받아 기존의 feature의 style을 지우고 style vector의 style을 반영하도록 하는 역할을 한다.

 

AdaIN

  • 각 Layer에서 얻은 feature map을 해당 feature map의 채널별 평균, 표준편차로 정규화한다.
  • 그 후 style vector y를 사용해 다시 denormalize를 진행한다. (스타일 적용)
  • 이를 통해 각 Layer의 출력 feature map에 직접적인 영향을 미칠 수 있다.

 그런데 첫 번째 아이디어에서 y를 어떻게 학습할지에 대한 문제가 존재한다. 이를 해결하기 위해 정규 분포를 따르는 latent vector z로부터 Affine transformation을 진행해 style vector y를 분리하도록 강제한다. 그 후 style vector를 각 layer에 주입함으로써, feature를 조절한다.

 

Affine Transformation

  •  Affine transformation은 weighted average 방식으로 동작한다.
  • 전체적으로 1이 되도록 normalize 되지만, 개별 weight는 > 1 또는 < 0이 될 수 있다.

 

 latent vector z는 정규 분포를 갖기 때문에 여러 요인들이 얽혀있는 상태이다. 따라서 z로부터 직접적으로 style을 분리하는 것이 어렵다. 이를 해결하기 위해 z를 다수의 FC layer에 통과 시켜 중간 latent space w를 얻고, 이 w에 affine transformation을 적용하여 style vector y를 얻어낸다. 정리하면 w는 의미 있는 속성들이 잘 조절되어져 있는 상태이다.

 

1. Mapping networks f:

  • latent space z w로 mapping
  • f는 다수의 FC layer로 구성
  • w는 데이터셋의 분포들이 잘 조절되어져 있는 상태

2. Affine Transform A:

  • 각 layer마다 w에 affine transformation을 진행하여 style vector y를 얻는다.
  • 얻은 style vector y는 AdaIN에 주입되어 layer의 feature map에 직접적으로 영향을 가한다.

3. Noise injection B:

  • 픽셀 단위의 세부적 묘사를 위해 random noise를 준다. 이때 noise는 spatial한 shape을 갖는 random tensor이다.
  • 여기서 B는 학습 가능한 per-channel scalar

StyleGAN: Disentangled Features

(a) Training Feature Distribution

  • 실제 학습 데이터셋에 존재하는 조합만으로 구성된 latent space
  • 즉, 데이터 분포가 불균일하며, 특징 조합은 결측되어져 있다.

(b) Mapping from z feature

  • z는 학습 데이터셋의 latent space를 정규 분포 형태로 만든 latent vector이다.
  • 정규 분포 형태로 변환하면서 공간 구조를 잃어버려 학습 중 실제로 존재하지 않는 조합을 만드는 문제가 발생한다.
  • 따라서 Generator는 그 공간을 비선형적으로 뒤틀어(disentangle)야 한다.

(c) Mapping from w feature

  • mapping network를 거쳐 나온 중간 latent vector w
  • latent vector w는 fully connected layer를 통과하여 학습 데이터셋의 공간 구조를 잘 반영하면서도 비선형적 형태를 띤다.

StyleGAN: Examples

Further Reading: Alias-free GAN (StyleGAN v3)

 

728x90