[GAN] SinGAN 논문 리뷰

2022.01.30 21:33 3,388 Views

기존의 GAN의 경우, 완벽히 한 쌍을 이루는 데이터만 사용해 학습할 수 있었습니다.

하지만, 완벽히 같은 조건을 지니는 데이터를 구하기 매우 어렵다는 한계점이 존재합니다. 


이러한 한계점을 극복한 모델로 CycleGAN이 있지만, CycleGAN 역시 학습 데이터셋의 분포가 불균형하다면 제대로 학습되지 않는다는 단점이 존재합니다. 

오늘은 단 1장의 이미지로 학습할 수 있는 SinGAN에 대한 논문을 간단하게 리뷰 해보겠습니다. 



1. Introduction

GAN을 통해 새로운 이미지를 생성할 때에는 대량의 학습 데이터셋으로부터 이미지의 스타일 분포를 학습 후 해당 분포로부터 이미지를 생성합니다. 

반면에 SinGAN은 하나의 이미지만 학습하여 학습한 정보를 바탕으로 input 이미지와 비슷한 새로운 이미지를 생성합니다.


물론 기존에도 하나의 이미지로부터 새로운 이미지를 얻어내려는 시도가 있었지만 fine texture를 재현해내는 데 그쳤으며,

PSGAN이나 Deep Texture Synthesis 등의 방식은 input으로 들어온 이미지의 texture를 학습한 뒤

이를 반복적으로 적용하는 형태로 실제와 같은 이미지를 만들어 내는 데에는 한계가 있었습니다.


image.png (698×508)



2. Multi-Scale architecture

SinGAN은 대량의 이미지로부터 공통의 분포를 학습하는 것이 아니라 하나의 이미지에서

해당 이미지를 생성하기 위한 충분한 정보를 학습하기 위해 여러 개의 Generator와 Discriminator를 쌓아 반복적으로 이미지를 학습합니다. 


이러한 피라미드 구조는 작은 스케일에서는 세부적인 텍스처를 큰 스케일에서는 전반적인 특징을 학습하여

기존 이미지의 특성을 효과적으로 학습할 수 있도록 만듭니다.


image.png (1280×579)


가장 큰 스케일인 Gn에서 이미지를 학습 후 생성된 이미지를 다음 스케일의 input으로 사용하는 방식으로

스케일이 작아질수록 이전에 학습하지 못한 세밀한 정보를 학습하고 동시에 Discriminator는 원본 이미지를

같은 스케일로 축소한 후 생성된 이미지와 구분하게 됩니다.


이때, 첫 단계인 Gn은 이전 단계가 존재하지 않기 때문에 노이즈만 입력받아 discriminator를 속이기 위한 학습을 진행합니다.

이후 Generator Gn-1 ~ G0는 이전 단계의 output(x)에 새로운 노이즈(z)를 추가로 입력받아,

이를 통해 이전 단계에서 학습하지 못한 정보를 학습할 수 있습니다. 


따라서 기존의 데이터를 유지하면서 새로운 데이터를 학습하는 잔여 학습의 형태로, 다음과 같이 표현할 수 있습니다.


image.png (475×41)


3. Loss Function

Loss는 GAN의 minimax objective function(L_adv)과 reconstruction loss(L_rec)로 정의됩니다. 


L_adv는 생성된 이미지와 원본 이미지와의 차이를 패치 단위로 계산해 평균값을 적용하여

실제 이미지의 패치와 가짜 이미지의 패치의 분포가 같도록 학습합니다. 


L_rec은 노이즈를 통해 생성된 이미지와 실제 이미지 간의 차이를 계산하며 이 값이 클수록 디테일을 많이 추가하도록 합니다.


image.png (489×71)


4. How to use

학습된 SinGAN의 생성자를 사용할 때에는 원하는 scale부터 시작할 수 있도록 설정할 수 있으며,

Gn부터 이용한다면 다양한 이미지를 만들 수 있으나 input으로 노이즈가 들어오기 때문에 원본 이미지와 매우 다른 형태의 이미지가 생성될 수 있습니다. 


따라서, Gn-1의 input으로 노이즈로부터 생성된 이미지대신 원본을 다운 샘플링한 이미지를 넣고

Gn-1부터 이용하면 원본 이미지의 가장 coarse한 내용은 유지한 상태로 세밀한 정보를 다양하게 변경할 수 있습니다.


N-k Scale Inference?

image.png (1067×570)


N scale에서 inference를 하는 것은 노이즈로부터 생성을 하는 것을 의미하고

N-k scale에서 inference를 하는 것은 input image를 다운 샘플링한 뒤 N-k 번째 Generator의 input으로 넣어주는 방식을 의미합니다.



5. Application

image.png (470×469)


모델에 이미지를 학습시킨 후 어느 scale에서 generation을 시작하는지에 따라 다양한 output을 얻어낼 수 있으며

사용하는 scale이 많아질수록 이미지의 global structure를 유지할 수 있습니다.


가장 coarse한 단계 (scale N)부터 생성을 하면 random noise로부터 시작을 하기 때문에 원본과 많이 다른 이미지가 생성이 될 수 있지만,

얼룩말 그림처럼 실제론 존재하지 않는 다리 모양을 가지게 되는 부작용이 발생합니다.


반대로, scale N-2의 결과를 보면 texture나 배열의 변화가 매우 적은 것을 확인할 수 있습니다.



6-1. Super Resolution

image.png (731×172)

SRGAN과 같이 외부 데이터셋으로 학습하는 방법과 비교해도 좋은 성능을 확인할 수 있었습니다. 


6-2. Paint-to-Image

image.png (840×251)

Coarse Level Scale 중 (N-1 혹은 N-2) 하나의 입력으로 클립 아트를 넣어 그림을 이미지로 변환합니다.

이때, 클립 아트의 global structure은 유지된 상태로 세밀한 텍스처가 추가됨을 확인할 수 있습니다.


6-3. Harmonization

image.png (615×333)

기존의 이미지에 없던 새로운 오브젝트를 삽입하고 싶다면, 먼저 background가 될 이미지에 대해 SinGAN을 학습시킨 다음

오브젝트가 삽입된 이미지를 다운 샘플링해 모델에 입력하면 기존 이미지에 자연스럽게 매칭되는 방향으로 이미지가 생성됩니다.


6-4. Image Editing

image.png (477×373)

학습 이미지를 원하는 대로 수정한 후(b) downsampling하여 큰 스케일의 generator에 입력하면

SinGAN이 generator를 스케일마다 반복하며 이미지를 자연스럽게 만들기 위한 디테일을 적용시킵니다.


이러한 방식으로 생성을 하면 scale이 N-1일 때 더욱 input image와 유사한 모양과 배열을 갖는 이미지가 생성이 될 것입니다.


6-5. Image Animation

image.png (845×131)


한 장의 Image로부터 짧은 video clip을 생성하는 것을 의미합니다.

생성된 비디오 클립 : https://www.youtube.com/watch?v=xk8bWLZk4DU&ab_channel=TamarRottShaham



7. Conclusion

SinGAN은 하나의 이미지로부터 새로운 이미지를 생성하기 위한 충분한 정보를 학습한다는 데 의의가 있으며

이를 구현하기 위해 스케일 별로 GAN을 쌓아 네트워크를 형성한다는 발상이 KeyPoint입니다.


SinGAN은 기존 이미지의 전체적인 구조를 유지하면서 자연스러운 이미지를 생성해야 할 때 대량 데이터셋을 사용하지 않고

모델 그 자체로만 이미지를 생성해낼 수 있을 뿐만 아니라 여러 응용 사례 모두 한 장의 image에 대해 학습이 끝나면

추가적인 architecture의 변화나 fine tuning 등을 필요로 하지 않는다는 특징을 지닙니다.


.

.

.


Reference

[1] https://www.youtube.com/watch?v=WxVvSXtRJqA&ab_channel=동빈나

[2] https://hoya012.github.io/blog/ICCV-2019_review_2


논문 원문 : https://arxiv.org/abs/1905.01164

Official Code : https://github.com/tamarott/SinGAN


  • 아직 배우는 입장으로 부족한 점이 많습니다. 수정해야하거나, 추가해야할 점이 있다면 댓글로 조언 부탁드립니다.
  • 본 게시글은 데이콘 서포터즈 ‘데이크루’ 1기 활동의 일환입니다.