본문 바로가기

VISION

[논문] SinGAN: Learning a Generative Model from a Single Natural Image

Literature Review

 GAN을 이용해 새로운 이미지를 생성할 때, 보통 대량의 training set에서 이미지/오브젝트의 스타일 분포를 학습한 후 그 분포에서 이미지를 생성한다. 하지만 이 논문에서는 하나의 이미지만으로 학습을 진행하며, 학습한 정보를 바탕으로 input 이미지와 비슷한 새로운 이미지를 생성해낸다. 이전에도 하나의 이미지로 새로운 이미지를 얻어내려는 시도가 있었지만 fine texture를 재현해내는 데 그쳤다. PSGAN, Deep Texture Synthesis 등의 방식은 training input으로 들어온 이미지의 특정 텍스처를 학습한 뒤 이를 반복적으로 적용하는 형태이다. 이런 경우 예술적인 이미지를 만들어주지만 실제와 같은 이미지를 만들어 내기는 어려웠다.

 

 

SinGAN

 SinGAN은 대량의 이미지로부터 공통의 분포를 학습하는 것이 아니라, 하나의 이미지에서 그 이미지를 생성하기 위한 충분한 정보를 학습하고자 한다. 이를 위해 여러 개의 Generator와 Discriminator를 쌓아 여러 스케일에서 반복적으로 이미지를 학습한다. 작은 스케일에서는 세부적인 텍스처를, 큰 스케일에서는 global feature를 학습하여 기존 이미지의 특성을 효과적으로 학습할 수 있게 된다. 먼저 Gn에서 시작해 가장 큰 스케일에서 이미지를 학습한 후, 학습을 마치면 생성된 이미지를 다음 Gn-1에 보내는 방식이다. 스케일이 작아질수록 이전에 학습하지 못한 디테일들을 학습하며, 동시에 Discriminator는 원본 이미지를 같은 스케일로 축소한 후 생성된 이미지와 real/fake 여부를 구분한다.

 

 첫 단계인 Gn은 이전 단계가 존재하지 않으므로 노이즈만 입력받아 discriminator를 속이기 위한 학습을 진행한다. 이후의 Generator Gn-1 ~ G0는 이전 단계의 output(x)에 새로운 노이즈(z)를 추가로 입력받는데, 이를 통해 이전 단계에서 학습하지 못한 정보를 학습할 수 있다. 따라서 기존의 데이터를 유지하면서 새로운 데이터를 학습하는 residual learning의 형태로 다음과 같이 표현할 수 있다.

 여기서 Ψ는 Generator 네트워크를 구성하는 Convolutional block으로, filter 수는 32개에서 시작해 스케일이 작아질수록 더 많은 feature map을 생성하도록 설계되었다. Training은 큰 스케일에서부터 순차적으로 진행되어야 하며, 한 번 학습된 GAN의 학습정보는 그대로 고정된다.

 

 

Loss function

 Loss는 GAN의 minimax objective function (L_adv)과 reconstruction loss (L_rec)로 정의된다. L_adv는 생성된 이미지와 원본 이미지와의 차이를 패치 단위로 계산해 평균값을 적용한다. L_rec은 노이즈를 통해 생성된 이미지와 실제 이미지 간의 차이를 계산하며, 이 값이 클수록 디테일을 많이 추가하도록 한다.

 

 

Performance

 생성된 이미지의 실제성을 확인하기 위해 정성평가를 진행하였는데, 약 47%정도의 confusion rate을 보여주었다. 즉 47%정도는 generated 이미지를 실제 이미지로 판단하였다는 의미로, 실제와 같은 이미지를 생성하는 데 있어 성능이 높음을 확인할 수 있었다. Inception Network에 통과시켜 layer output 간의 차이를 비교하는 SIFID 정량평가 점수도 매우 낮게(좋게) 나타났다.

 

 

 

Applications

 모델에 이미지를 학습시킨 후 test time에 어느 스케일에서부터 generation을 시작하는지에 따라 다양한 output을 얻어낼 수 있다. 사용하는 스케일이 많아질수록 이미지의 global structure를 유지할 수 있다. 이를 이용해 논문에서는 super resolution, paint to image, editing, harmonization 등 여러 태스크에 적합한 설정을 찾아 내었다.

 

 

1. Super Resolution

 이미지의 고해상도화를 위해, generator를 지날 때마다 input image의 해상도를 높인다(upsampling). 여전히 SRGAN만큼의 성능을 보여주지는 않지만 대량의 데이터셋에 training되지 않은 것을 감안하면 이전의 방식보다는 향상된 성능의 이미지를 생성해낸다.

 

 

2. Paint-to-Image

 Paint로부터 이미지를 생성해내는 paint-to-image task에서는 원하는 형상의 그림을 다운샘플링하여 큰 스케일(N-1 또는 N-2)에 입력한다. 이미지의 전체적인 구조를 적용하는 방향으로 그림이 이미지화된다.

 

 

3. Harmonization

 기존의 이미지에 없던 새로운 오브젝트를 삽입하고 싶은 경우, 먼저 background가 될 이미지에 대해 SinGAN을 학습시킨 후 test time에 오브젝트가 삽입된 이미지를 다운샘플링해 모델에 입력하면 기존 이미지에 자연스럽게 매칭되는 방향으로 이미지가 생성된다. 기존의 타 방식과 비교하면 오브젝트가 지나치게 이미지화되지 않고 특성이 더 잘 살아있는 것을 확인할 수 있다.

 

 

4. Editing

 이미지 내 오브젝트의 형태를 자유롭게 수정하고 싶은 경우, 원하는 패치대로 모양을 대강 잡아놓고(b) 다운샘플링해 큰 스케일의 generator에 입력한다. SinGAN이 generator를 스케일마다 반복하며 이미지를 자연스럽게 만들기 위한 디테일을 적용시킨다.

 

 

Conclusion

 이 모델은 하나의 이미지로부터 새로운 이미지를 생성하기 위한 충분한 정보를 학습한다는 데 의의가 있다. 또한 그를 구현하기 위해 스케일 별로 GAN을 쌓아 네트워크를 형성한다는 아이디어가 새로웠다. 비록 세부 태스크에서 SOTA를 달성하거나 아주 실제적인 이미지를 생성해내지는 못하지만, single image training 환경에서 큰 성과를 거둔 논문으로 보인다. 기존 이미지의 전체적인 구조를 유지하면서 자연스러운 이미지를 생성해야 할 때 대량의 데이터셋을 사용하지 않고 모델 그 자체로만 이미지를 생성해낼 수 있어 유용할 것이다.