Paper Review

[논문 리뷰] Positional Encoding as Spatial Inductive Bias in GANs

슈넌 2021. 9. 7. 17:47

Positional Encoding as Spatial Inductive Bias in GANs


Abstract

 

SinGAN과 같은 translation invariant convoluitional generator가 어떻게 전반적인 구조를 잡는지 생각해보게 된다. 이 논문에서는 SinGAN과 SinGAN2가 zero padding으로부터 implicit position information을 얻는 것을 보여준다. 이러한 position encoding은 이미지를 생성할 때 필수 요소이다. 그리고 이것은 SinGAN 뿐만 아니라 DCGAN, PGGAN에서도 마찬가지이다. 또한, zero padding은 unblanced spatial bias를 제공한다. 이를 해결하기 위해 여기서는 다른 몇 가지 방법을 제시한다. Multi-scale training strategy와 explicit position encoding 방법이 있다.


1. Introduction

 

앞서 말한 것처럼 SinGAN과 StyleGAN은 translation-invariant convolutional network에 기반한 generator이다. 이 뜻은 어느 위치에 있어도 영향을 받지 않는다는 것이다. 그래서 생각해보면 당연히 SinGAN이 이미지를 생성하면 아래 사진처럼 다양한 위치에 여러 가지 사물이 그려져야 한다.

하지만 사실 SinGAN으로 이미지를 생성하면 아래와 같은 위치가 잘 잡힌 이미지가 생성된다.

여기서 위 사진과 아래 사진의 차이점은 zero padding의 유무이다. 이를 통해 zero padding이 border 부분에 추가되면서 Convolution Operator를 거치면서 implicit position encoding이 된다는 것을 알 수 있다. 이러한 현상은 다른 unconditional generative architectures에서도 나타난다.

 

이러한 연구에 이어서 한 가지 더 밝혀진 점은 zero padding이 이미지 공간에 대해서 unblanced spatial bias를 준다는 것이다. Zero padding이 border나 corner에 생기기 때문에 center 쪽에는 effect가 적은 것을 확인하였다. 아래 사진을 보면 border 부분에는 이미지 생성이 제대로 되었지만 중앙 쪽에는 잘 되지 않은 것을 볼 수 있다.

 이러한 문제를 해결하기 위해서 이 논문에서는 두 가지의 explicit positional encoding 방법을 소개한다. Cartesian spatial grid와 2D sinusoidal positional encoding이다. 이것들은 모두 blanced spatial bias를 준다. 그리고 아래 사진은 이것들을 각각 적용했을 때 생성되는 이미지이다.

Explicit position encoding을 좀 더 flexible 하게 하기 위해 generator model을 redesign 한다. 아까 말했던 Multi-Scale training with Position Encoding(MS-PIE) 방법이다. 원래는 여러 scale의 generator에서 여러 upsample block을 사용하여 만들었다면 이번에는 한 개의 fully convolutional generator로 multi-scale traninig을 하는 것이다. 그리고 이것이 SOTA 성능을 내었고 1024x1024의 큰 resolution까지도 생성할 수 있게 되었다.

 

Contribution을 요약하면, (1) zero padding이 implicit position encoding을 한다는 것을 밝혔고, (2) 두 가지 방법의 explicit position encoding을 통해 blanced spatial bias를 얻어 성능 개선을 하였다. (3) Multi-Scale training strategy를 통해 high-quality의 영상 합성을 할 수 있게 되었다.

 


2. Related Work

 

1. Padding Effects

여러 연구들을 통해 CNN에서 zero padding을 사용하면 위치 정보를 학습하고 이 정보를 통해 Object Detection이나 Semantic Segmentation과 같은 task를 잘하는 것을 밝혀냈다. 우리가 잘 아는 ResNet, VGG에서도 위치 정보를 학습하는 것이 밝혀졌다. Object detection에서 가려져 있는 부분을 찾을 때 위치 정보가 사용된다.

 

2. Sinusoidal Positional Encoding

원래 SPE는 NLP(Natural Language Processing) 자연어처리에서 사용이 되는 개념이다. 요즘 NLP에서 많이 사용되는 transformer에서 SPE를 통해 단어 위치의 순서들 정보를 함께 embedding한다. Sinusodial function을 통해 각각 다른 값들을 위치 정보로 이용해서 사용한다.

 

3. Cartesian Grid

이것은 말 그대로 직교좌표를 grid로 표현한 것이다. Transformer networks에도 사용이 되고 널리 쓰인다. 이 논문에서는 normalized cartesian grid가 사용된다.

 


3. Methodology

 

1. Translation Invariance in Generative Models

먼저 GAN 모델이 translation invariance 한 것을 증명하기 위해 통계적인 방법과 개념을 사용한다. Expectation과 autocorrelation 개념을 통해 증명한다. Autocorrelation은 두 개가 얼마나 관련이 있는지를 보는 것이다.

위의 공식은 convolution layer를 거치고 나온 feature map의 expectation을 구하는 식이다. 여기서 우리는 인풋을 아래와 같이 입력하였다. 표준편차 1에 평균은 0이다. 그러므로 위의 식에서 확률 밀도 함수의 expectation을 구하는 식은 0이 된다. (적분을 했는데 평균은 0이니까) 그러므로 첫 번째 convolution layer는 bias의 영향만 받게 된다.

그 이후 LeakyReLU를 거친 다음 convolution layer를 한 번 더 거치게 된다. 여기서 나온 feature map의 expectation을 구해보면 아래와 같은 식이다. 보면 알 수 있듯이 확률 밀도 함수 적분 계산식이 상수 취급이 되면서 이번에도 bias의 영향만 받게 된다.

이번에는 두 개의 위치 관계를 보기 위해 autocorrelation을 분석한다. 이를 수식으로 표현하면 아래와 같다.

여기서 뜻하는 것은 두 개의 autocorrelation을 볼 때 두 개의 위치 벡터에 의존하는 것이 아니라 i벡터에서 j벡터를 뺀 벡터에 의존한다는 것이다. (이것이 수식적으로 어떻게 증명되는지는 논문 뒤에 있는 Appendix를 보면 확인할 수 있다.) 결론적으로 어떤 위치에 있는지 중요하지 않고 어느 위치에 있는지 학습하지 못하는 것을 의미한다.

 

2. Padding as Spatial Inductive Bias

위에서 위치 정보를 학습하지 못하는 것을 밝혔고, 이번에는 zero padding을 통해 어떻게 위치 정보를 학습하는지 알아본다. 위에서 나왔던 expectation, autocorrelation 공식에서 zero padding을 추가했을 때 공식은 아래와 같다.

위의 공식을 통해 알 수 있듯이 Convolution operator가 padding을 만나게 되면 0의 값을 가지기 때문에 padding의 양을 통해 위치 정보를 학습할 수 있는 것이다. 

 

 

3. Analysis on Implicit Positional Encoding

Zero padding 방식의 position encoding을 분석해본다. 앞에서 zero padding은 unblanced spatial bias를 준다는 것을 언급했었다. 아래 사진을 보면 이를 이해할 수 있다. 왼쪽 위 부분은 padding이 많이 포함되어 있어 위치 정보를 많이 학습하지만 center 부분은 padding이 없기 때문에 학습이 어렵다.

또한 border 부분에서는 frozne structure 경향이 있다는 것을 StyleGAN을 통해 확인한다. 아래 사진은 generator에 input으로 identical value를 준 것이다. 아래 사진 중 위에는 zero padding이 있는 것인데, border 부분이 잘 표현된 것을 확인할 수 있다. 아래는 zero padding을 제거한 것인데, 어떠한 패턴이 모든 이미지에 전체적으로 퍼져있는 것을 확인할 수 있다.

이것을 통해 implicit position encoding의 문제점을 확인 할 수 있다.

 

4. Explicit Positional Encoding for GANs

Learnable Constant Input :

StyleGAN에서 generator의 인풋으로 4 x 4 x 512 learnable constant를 받는다. 고유한 512-dimension 벡터를 인풋으로 받는데 이는 4 x 4 input space로 position encoding이 되어 있는 상태이다. 아래 사진은 learnable constant input을 통해 spatial space를 그린 것이다. 이를 보면 성능이 좋지 않은 것을 확인할 수 있다.

 

Cartesian Spatial Grid :

Transformer network에서 position encoding을 할 때 사용되는 방법으로 직교좌표를 hard coding해서 값을 주는 것이다. 너무 큰 값을 피하기 위해 normalize된 값을 사용한다. Normalize 공식은 아래와 같다.

여기서 특징은 corner와 center의 값이 고정되어 있고 H와 W에 따라 간격이 변한다는 점이다. 이로 인해 발생하는 Cartesian Grid의 특징은 좀 더 global한 구조를 보기에 적합하다는 것이다.

Sinusoidal Positional Encoding :

SPE 방식은 자연어처리에서 널리 사용되는 방식이다. Height dimension과 width dimension으로 position encoding해서 concatenate하는 방법이다. 아래 식과 같이 sin과 cos의 조합으로 이루어지는데, frequency를 달리해서 값이 겹치지 않도록 한다.

SPE는 아래 사진처럼 이미지를 expand해도 position encoding 간격이 변하지 않는다. 이러한 현상은 위에서 물고기 사진을 비교했을 때 확인할 수 있는데 SPE의 경우에는 물고기의 크기가 늘어나는 것이 아니라 반복된 패턴이 생기는 것을 확인할 수 있다.

 

 

 

5. Multi-scale Training with Positional Encoding

새로운 학습 방법으로 muti-scale training을 하지만 하나의 fully convolutional generator를 사용하는 방법을 제시한다. 원래 전형적인 방법으로는 4x4의 고정된 값을 받고 다양한 숫자의 upsampling block을 통해 multi-scale image를 생성한다. 이와 달리 여기서는 Convolution operator 앞에 position encoding을 추가해주었다. 이를 MS-PIE라고 부른다. 이렇게 했을 때 256x256의 이미지를 좋은 quality로 생성했을 뿐만 아니라 512x512, 1024x1024까지도 생성하였다. 그리고 zero padding을 제거했을 때는 Cartesian Grid에 있는 spatial anchor가 중요하다는 것을 밝혀냈다.

 


4. Experiments

1. Implementation Details

Remove Padding:

generator에서 padding을 모두 제거하고 실험하였다. 그리고 변하게 된 feature map의 크기는 interpolate 방식으로 맞춰주었다. 하지만 Transposed convolutional layer에 의한 padding은 제거할 수 없었다. PGGAN에서는 이를 interpolation에 convolutional layer를 합쳐서 대체하였다.

 

Architectures and Training Configurations: 

실험 모델로는 SinGAN뿐만 아니라 StyleGAN, DCGAN, PGGAN을 사용하였다. StyleGAN을 통해 MS-PIE 방식의 성능을 입증하였다. 4.3에서 다룰 예정이다. 

 

2. Effects of Padding in Existing GANs

StyleGAN2: 

먼저 (b)를 확인하면 Deconv 대신에 Upsample + Conv를 한 것이 FID가 더 낮게 나왔다. 또한 padding을 제거하면 FID가 높아지는 것을 확인했는데, Cartesian grid나 SPE를 추가함으로써 FID가 다시 낮아진 것을 확인할 수 있다. 

 

PGGAN and DCGAN:

PGGAN

먼저 PGGAN을 확인했을 때 padding을 제거한 것과 SPE를 추가한 것이 많은 차이가 나는 것을 확인할 수 있다. 기존 모델보다는 성능이 떨어지지만 SPE가 위치 정보를 전달하고 있음을 알 수 있다.

PGGAN

위의 사진은 위의 Table3에 나온 실험을 각각 사진으로 본 것이다. (b)에서 zero padding을 제거하면서 모양이 많이 일그러지는 것을 확인할 수 있는데, (c)에서 SPE를 추가하면서 어느 정도 성능을 회복하는 것을 눈으로 볼 수 있다.

 

DCGAN

다음으로 DCGAN을 보면 padding을 제거했을 때가 가장 성능이 안 좋고 SPE를 추가했을 때 기존 모델보다 성능이 좋아지는 것을 확인할 수 있다. 이것을 통해 explicit position encoding이 implicit position encoding보다 성능이 좋은 경우가 있다는 것을 알 수 있다.

 

3. MS-PIE in StyleGAN2

(f)에서 가장 큰 성능 향상을 보여주었다. Zero padding을 제거하지 않고, position encoding을 SPE로 하고 upsampling을 expand로 했을 때 가장 좋은 성능을 보여주었다. 하지만 (d)나 (e)를 보았을 때 position encoding 방식이나 upsampling 방식에 따라 원래보다 성능이 안 좋아지는 것도 확인할 수 있다.

 

Without Padding:

Padding을 제거했을 때 Cartesian Grid에서 가장 큰 성능을 보여주고 있다. 이는 Cartesian Grid의 spatial anchor가 MS-PIE 방식에 필요하기 때문이라고 말한다.

 

Lite Model:

(g)의 경우에는 (f)에서 특정 채널 수를 절반으로 줄인 것인데, 표에서 나와 있듯이 성능 저하가 크지 않으면서 모델은 가벼워졌다.

 

Qualitative Results:

위에서 가장 성능이 좋았던 (f)를 사진으로 보면 아래와 같다. 사진에서 볼 수 있듯이 높은 화질에서도 좋은 성능을 내고 있는 것을 확인할 수 있다.

 

 

4. SinGAN with Positional Encoding

이제 SinGAN에서 보헤미안 랩소디의 한 장면을 extrapolate 하는 것을 통해 차이를 볼 것이다.

위의 사진은 왼쪽부터 원본, 기존의 SinGAN, Cartesian grid 추가, SPE를 추가한 것이다. 원래 SinGAN은 머큐리의 모습이 지워져 있고, 성능이 좋지 않은 것을 확인할 수 있다. 하지만 Cartesian grid를 추가했을 때 깔끔하게 되는 것을 확인할 수 있지만 머큐리의 체중이 늘어난 것처럼 보인다. SPE의 경우에도 좋은 성능을 보여줬지만 머큐리의 위치가 오른쪽으로 이동하였고, 천막의 개수도 늘어나게 되었다. 이를 통해 알 수 있는 것은 Cartesian grid는 사진을 늘리게 되면 비율이 늘어나게 되고 SPE는 패턴이 반복된다.


5. Conclusion

이 연구를 통해 zero padding이 imperfect spatial bias를 준다는 것을 알아내었고, explicit position encoding 방법으로 SPE와 Cartesian grid를 사용하였다. 이러한 position encoding 방식에 새로운 학습 방법인 MS-PIE를 도입하여 높은 성능을 보여주었다.

 


후기

수식도 많이 어렵고 컨셉도 쉽지 않아서 읽기 많이 어려웠던 것 같습니다. 하지만 position encoding을 성공적으로 사용했다는 점에서 의미가 있고, 여러 가지 explicit position encoding을 시도했다는 점에서 의미가 있는 것 같습니다. 아무래도 저도 많이 알지 못해 오류도 많을 것으로 예상됩니다. 에러가 있다면 편하게 댓글로 알려주시면 감사하겠습니다.