Style-Based GAN 논문은 이전에 리뷰한 논문들보다 어려운 계념들을 담고 있어서 리뷰를 하지 않으려고 했지만, 현재까지의 GAN 기술의 기초를 완성시키는 의미가 있는 논문이기에 이전 GAN 시리즈와 함께 리뷰를 완성하려고 한다.
1. Style-Based GAN 이란?
Styly GAN 이 무엇인지는 위 동영상으로 깔끔하게 정리된다.
The new architecture leads to an automatically learned, unsupervised separation of high-level attributes (e.g., pose and identity when trained on human faces) and stochastic variation in the generated images (e.g., freckles, hair), and it enables intuitive, scale-specific control of the synthesis.
The new generator improves the state of the art in terms of traditional distribution quality metrics, leads to demonstrably better interpolation properties, and also better disentangles the latent factors of variation.
- Abstract 중 일부 -
굉장히 어렵고, 추상적인 말들로 초록이 기재되어 있지만, 간단하게 요약하면
한 이미지의 특정 스타일을, 다른 이미지의 특정 스타일로 적용시킬 수 있다는 것이다.
Source B - 성별, 나이, 머리길이, 안경, 자세
Source A - Source B 에서 지정한것 외에 모든것
그래서 이게 어떻게 가능할까?
2. Introduction
Style GAN 논문에서는 기존 GAN 에 의해 생성된 이미지의 해상도, 품질 등이 급속한 발전을 보였다고 이야기 한다. 하지만 여전히 생성기(Generator) 는 Black-Boxes 형태로 작동하기에 이미지 합성 프로세스를 여러 방면에서 이해하기에는 매우 부족하다고 이야기한다.(뭘 어떻게해야 '머리카락 색', '눈동자 색', '눈썹의 형태' 를 바꿀 수 있지?)
일반적으로 이전 방식들(PGGAN)에선 입증된 잠재 공간 보간은 서로 다른 생성기를 비교하는 정량적인 방법을 제공하지 않았었기 때문에 문제가 있던 것이다.
때문에 Style-GAN 논문을 통해 생성기는 학습된 상수 입력에서 시작하여, 잠재 코드를 기반으로 각 컨볼루션 레이어에서 이미지의 스타일을 조정하여 서로 다른 스케일에서 이미지 기능의 강도를 직접 제어한다. 이러한 아키텍처의 변화는 네트워크에 직접 주입된 노이즈와 결합되어 생성된 이미지의 확률적인 변동(e.g 주근깨, 머리카락)에서 높은 수준의 속성을 자동적으로(감독되지 않고)분리하고, 직관적인 스케일별 혼합 및 보간 작업을 가능하게 한다.
결국 어떠한 추가적으로 판별기(Discriminator)나 손실함수(Loss Function)를 수정하지 않는다.
Style-GAN 에서 제안하는 생성기는 input latent code(입력 잠재 코드)를 중간 잠재 공간에 내장한다. 이러한 과정은 네트워크에서 변동 요인이 어떻게 표현 되는지 지대한 영향을 미친다. 논문은 생성기의 이러한 측면을 정량화하기 위해 지각 경로 길이(perceptual path length) 와 선형 분리성(linear separability) 이라는 두 가지 새로운 자동화된 메트릭을 제안한다. 이러한 메트릭을 사용하여 기존의 생성기 아키텍처에 비해 생성기가 다양한 변동 요인에 대해 더 선형적이고 덜 얽힌 표현을 사용할 수 있게 한다.
추가적으로 논문에서는 고해상도 데이터 세트보다 훨씬 높은 품질을 제공하고 상당히 광범위한 변형을 다루는 새로운 인간 얼굴 데이터 세트(Flickr-Faces-HQ, FFHQ) 를 제시한다.(사실 이건 별로 관심없다)
3. 설계
우선 style-based generator 는 크게 두가지 네트워크로 구성되어 있다.
그림1 (b)의 좌측이 바로 Mapping Network 이고, 우측이 Synthesis Network 이다.
- $z$ 는 letent vector(잠재 백터)를 나타냄
- $A$는 학습된 affine 변환을 나타냄
- $B$는 학습된 채널당 스케일링 계수를 노이즈 입력에 적용.
- $f$는 매핑 네트워크의 레이어가 몇개로 구성되는지를 뜻한다.
- $g$는 합성 네트워크의 레이어가 몇개로 구성되는지를 뜻한다.(각 해상도 $4^2 - 1024^2$ d에 대해 두개씩 총 18레이어로 구성됨)
- 마지막 레이어의 출력은 Karras et al 와 유사하게 $1 x 1$ Convolution 레이어를 사용하여 RGB로 변환됨.
전통적인 생성기(a)이 입력 계층을 통해서만 latent code($z \in Z$)를 입력하는 반면
Style-Based GAN(b)는 입력을 intermediate latent space $W$에 매핑한 다음 적응형 인스턴스 정규화(AdaIN)를 통해 생성기를 제어한다.
3-1. Mapping Network
매핑 $f$는 8계층 MLP(Multi Layer Perceptron, 우측 이미지 상의 FC(Fully connected Layer))를 사용하여 구현되며, 이러한 FC 계층은 512차원의 $z$를 512차원의 $w$로 변환하기 위한 역할을 수행한다. 이러한 것을 그림 1(b) 에서는 mapping network 라고 지칭하는데, 이는 disentanglement(얽힌것을 품) 를 위해서이다. 즉, Attribute 를 '분리할 수' 있게 하기 위해서 사전 작업을 거치는 것이다.
$z \in Z$ 를 왜 곧바로 사용하지 않고 $w \in W$ 로 변환해서 사용할까?
위에서 말한 것처럼 남성의 '수염' 은 일종의 Attribute 라고 볼 수 있다. 원래 수염이 없던 남성에게 수염이란 Attribute 를 추가하여 수염을 가진 남성의 이미지를 만들 수 있다.
이를 이해하기 위해서 $z$ 에 좀 더 집중해 보자. $z$ 는 letent vector 로서 일종의 '랜덤 백터' 라고 생각해도 좋다. 이는 letent vector 가 랜덤한 가우시안 분포에서 샘플링되기 때문이다. 이는 마치 노이즈 상태와 같으며, 때문에 일반적으로 GAN 을 통해 생성한 이미지는 일정하지 않다. 결론적으로 $z$의 각 차원은 이미지의 특정 요소(포즈, 카메라를 바라보는 각도, 표정, 수염의 여부 등)를 나타낼 수 있는데, 여기서 각 차원을 조금만 변경하면 이미지의 전체적인 구조가 변할 수 있다.
이러한 문제를 해결하기 위해 StyleGAN 은 letent vector $z$를 시각적 품질에 더 적합한 'Style Vector' $w$로 변환한다. 이 변환 과정에서 $z$에 있는 각 차원의 값은 $w$에 대응하는 여러개의 스케일링된 요소로 변환된다. 이로 인해 $w$의 각 차원은 특정 이미지의 다른 요소를 '개별적으로' 지닐 수 있기에, $w$의 각 차원을 조절한다고 해서 이미지의 전체적인 구조가 크게 변하지 않게 되는 것이고, 이를 통해 생성되는 이미지의 품질 및 안정성을 향상시킬 수 있다.
여기서 이전의 고전적인 GAN의 형태를 얽혀있다(entangle)고 지칭한다. 이렇게 얽힌 상태에서는 '수염만' 따로 요소화 시켜 추가, 제거하는 것은 불가능 하다. 수염을 건들려면 다른 속성들이 함께 '얽혀있기' 때문에 같이 조정되는 효과를 낳는다.
추가로 아래 이미지를 살펴보자.
- (a) 일부조합(장발남성)이 빠진 예제 훈련세트
- (b) 고전적인 GAN(PGGAN) 에서 억지로 데이터셋에 '장발 남성' 이 존재하지 않는데 이미지를 생성하려 할 경우 $Z$(letent vector)에서 이미지 특징으로의 매핑이 '곡선으로 변형되어 있는 상황' 이 발생함, 해당 곡선의 변형은 유효하지 않은 조합을 생성하지 않도록 한다.(아니 장발남성 내가 학습 안했다니까?!)
- (c) $Z$에서 $W$(style vector)로의 학습된 매핑이 이러한 곡선 변형을 '되돌린다'. 즉 $W$를 사용하여 유효한 조합인 '장발남성' 과 같은 이미지를 다시 생성할 수 있게 된다. 이렇게 학습된 매핑은 $Z$→$W$로의 매핑을 통해 유효하지 않은 조합을 제거하고, 유효한 이미지 조합에 더 가까운 결과를 만들 수 있도록 돕는다.
위 내용을 좀 더 쉽게 설명하자면, 훈련된 데이터셋에 '장발 남성' 은 없다고 가정하자. 그렇다면 이전 PGGAN 에서는 가진 데이터 셋 만으로 '장발 남성' 이미지를 만드는것은 불가능에 가까울 것이다. 머리를 기르려면 → 얽혀있기에 이미지가 점점 여성스러운 모습으로 변경될 것이기 때문이다. 때문에 최대한 노력해도 '중성적인' 느낌의 사람이 장발을 한 이미지를 추출하는 것이 한계일 것이다.
3-2. Synthesis Network
CNN 기반 구조를 지닌 Synthesis Network 는 Style-Vector $W$와 Noise-Vector 를 입력받아 → 이미지를 생성하는 역할을 수행한다.
Synthesis Network는 $W$와 Noise-Vector 를 결합하여 초기 특징맵을 생성한다. 이후 Upsampling 과정을 통해 이미지의 해상도를 높여가며(like PGGAN) 이미지를 생성한다. 이때 각 해상도 단계에서는 블록 기반의 아키텍처인 StyleGAN 의 Generator 모듈을 사용하여 이미지의 세부적인 특징을 생성한다. 더하여 AdaIN(Adaptive Instance Normalization) 레이어를 사용하여 입력 이미지의 스타일을 조절한다.
AdaIN레이어는 Style-Vector와 Noise Vector 를 조합하여 이미지를 생성하는 과정에서 매우 중요한 역할을 수행한다.
AdaIN 식은 아래와 같다.
$$ AdaIN(x_{i}, y) = y_{s,i} {x_{i} - \mu(x_{i}) \over \sigma(x_{i})} + y_{b,i} $$
- $x_{i}$ - input feature map 을 나타냄.
- $y$ - $x$에 입힐 style-vector
- $y_{s,i}$ - style-vector의 scale 요소로, style-vector($y$)의 $i$번째 scaling 요소를 나타냄.
- $y_{b,i}$ - style-vector의 bias 요소로, style-vector($y$)의 bias 요소를 나타낸다.
- $x_{i}-\mu(x_{i}$ - input feature map $x_{i}$에서 평균을 뺸 값
- $\sigma(x_{i})$ - input feature map $x_{i}$의 표준 편차
- $y_{s,i} {x_{i} - \mu(x_{i}) \over \sigma(x_{i})} + y_{b,i}$ - 스케일링된 feature map 에 style-vector의 바이어스 요소를 더한 값
여기서 스케일(scale)이란 style-vector 의 feature map 크기 조절을 담당한다. 직접적으로 픽셀 값 범위를 조절하는 역할을 수행하며, scale 값이 작으면 픽셀 값 범위가 작아지고, 크면 넓어진다. 스케일링(scaling)은 스타일 벡터의 스케일 요소를 특징 맵에 적용하여 크기를 '조정하는 과정' 그 자체를 스케일링이라 지칭한다.
바이어스(bias)는 feature map 의 평균 이동을 지칭한다. feature map 의 각 픽셀값에 바이어스 요소를 더하여 평균을 이동시키는 역할을 하며, 이를 통해 feature map 의 밝기나, 색조 등을 조절하는것이 가능하다.
위와 같은 형식으로 AdaIN 수식을 통해 input feature map $x_{i}$를 style-vector $y$의 스케일 요소와 바이어스 요소를 사용하여 정규화 및 변환한다. 이를 통해 input feature map 의 style 을 조절하고, style 전이를 수행할 수 있다.
4. Stochastic variation
인물 사진에는 머리카락이나, 수염, 주근깨, 피부의 모공 등과 같은 요소들이 있는데, 이러한 요소들은 '정확한' 위치는 존재하지 않고 좀 '확률론적' 인 측면이 있다. 때문에 크게 벗어나지 않고 올바른 분포를 띄는 한 이미지의 품질에 영향을 주지 않기에, 이를 '랜덤화(randomized)' 할 수 있다고 지칭한다.
기존 생성자는 확률적인 변동을 구현하기 위해, input layer 를 통해 네트워크로 전달되는 유일한 입력이 있다고 가정할 때, 네트워크는 이전 활성화 값들로부터 공간적으로 다양한 의사난수를 생성하는 방법을 만들어야 한다. 이는 네트워크의 용량을 소비할 뿐더러, 생성된 신호의 주기성을 숨기는것이 어려울 뿐더러, 심지어 이러한 방식은 '항상 성공적인 방법' 역시 아니다.
노이즈의 인위적으로 생략하면 "회화적(painterly)" 모습으로 이어지는 것을 볼 수 있다. 거친 노이즈(d)는 머리카락의 곱슬거림과 더 큰 배경을 유발하는 반면(인물 주변의 넓은 배경의 특징이 더 강조됨), 미세한 노이즈(c)는 미세한 머리카락의 곱슬거림, 미세한 배경 디테일 및 피부 모공이 강조된다.
전체적으로 살펴보면 그림 4는 동일한 이미지의 확률적인 실현을 보여주며, 노이즈가 어떻게 생성되는지 예시를 보여준다. 노이즈는 확률적 측면에만 영향을 미치고, 전체 구성과 정체성과 같은 거시적인 측면은 그대로 유지한다.
그림 5는 레이어의 서로 다른 하위 집합에 확률적 변화를 적용한 효과를 잘 보여주는 이미지이다. 이러한 효과는 애니메이션에서 가장 잘 볼 수 있다.
5. Conclusion
결국 이러한 원리를 통해 이미지를 style-mixing 할 수 있다.
단순히 주어진 하나의 잠재 코드에서 다른 코드로 전환하기만 하면 된다, 합성 네트워크(Synthesis Network) 에서 무작위로 선택된 지점에서 Mapping Network를 통해 두 개의 잠재 코드 $z1$, $z2$를 실행하고, $w1$, $w2$가 스타일을 제어하여 교차점 앞에 $w1$이 적용되고 교차점 뒤에 $w2$가 적용되도록 하여 생성한다.
5. 마치며
논문내 상세한 설명이 많이 생략되어 있어서 해당 논문을 읽었다고 바로 코드로 구현할 수 있는것은 아니다. 어디까지나 전체적인 틀의 형상만 확인하는 과정이므로 코드로 구현하려면 또 많은 시간을 소모해야 할 듯 싶다.
'Artificial Intelligence > Article' 카테고리의 다른 글
[리뷰] GAN(Generative Adversarial Networks) (0) | 2023.11.23 |
---|---|
[리뷰] wav2vec 2.0 (0) | 2023.08.21 |
[리뷰] StarGANv2-VC (0) | 2023.07.29 |
[리뷰] PGGAN(Progressive Growing of GANs) (0) | 2023.06.24 |
[리뷰] Attention Is All You Need (0) | 2023.05.12 |