[Paper] SinGAN: Learning a Generative Model from a Single Natural Image (2024)
11 Dec 2020 #cv
Shaham, Tamar Rott, Tali Dekel, and Tomer Michaeli. “Singan: Learning a generative model from a single natural image.” Proceedings of the IEEE/CVF international conference on computer vision. 2019.
Background
GAN은 현실감 있고 질 좋은 이미지를 생성하는 성공적인 결과를 보여주었다. 그러나 이 장점은 모델이 특정한 클래스 내 데이터를 학습하여 해당 클래스에 속하는 이미지를 생성하는 것에 국한된다는 한계를 동반한다. 여러 개의 클래스를 갖는 다양한 데이터에서 어떠한 분포를 찾아내는 것은 여전히 어려운 문제이다. 이를 해결하기 위해 생성할 때 다른 input signal을 추가하여 조절하거나 모델을 특정한 task에 맞게 학습시키는 것이 요구된다.
이 논문에서는 기존의 한계점을 벗어나기 위해 “Unconditional generation learned from a single natural image” 를 제안한다. 단일 이미지(single image) 내부 패턴의 통계량만을 가지고도 충분히 생성 모델을 학습시킬 수 있다는 것이 이 논문의 아이디어이다. 이미지 하나에서 충분히 복잡한 구조와 질감을 얻어낼 수 있기 때문이다. 이런 방식으로 GAN 모델을 학습할 수 있다면 같은 클래스에 속하는 여러 개의 이미지 데이터에 의존할 필요가 없다.
Single image를 다루는 기존의 모델들은 이미지를 생성할 때 저마다의 한계를 갖는다. InGAN은 최초로 Single image를 다룬 GAN 기반의 모델이다.
핵심적인 아이디어는 Generator가 입력 이미지인 $x$를 가지고 생성된 이미지인 $y$를 “retarget”하게 한다는 것이다. 그러나 InGAN은 입력 이미지에 conditional하다는 한계를 갖는다. 입력 이미지가 있어야 이미지를 생성할 수 있다. unconditional한 single image GAN 모델의 경우 texture generation에 관하여만 존재했다[3, 4, 5]. 이 모델들은 texture에 국한된 이미지만 생성할 수 있을 뿐, 보통 이미지라고 인식될 만큼의 자연스러운 결과물의 생성이 불가하다.
Image manipulation task를 다루는 최근의 생성 모델들은 대부분 GAN을 기반으로 한다. 관련 task는 teractive image editing, sketch2image, image-to-image translation, super resolution 등이다. 그런데 기존 모델들은 특정한 클래스의 데이터를 학습하게 되어 있어 다양한 task를 유연하게 해결하지 못하는 등의 한계가 있다.
이 논문에서 제안하는 SinGAN 모델은 기존의 한계점을 해결할 수 있다. SinGAN은 unconditional하게 입력 이미지 없이 noise만으로 이미지를 생성한다. 그러면서도 기존의 unconditional texture generation 모델과 달리 자연스러운 이미지를 생성할 수 있다. 나아가 특정한 클래스의 데이터의 공통적인 특성을 학습하는 것에 주력하지 않고, 하나의 이미지를 가지고 scale을 변화시키며 내부적인 특성을 학습한다. 이는 모델이 한정되지 않은 다양한 task를 수행하면서도 좋은 성능을 가지게끔 한다.
Method
SinGAN은 하나의 입력 이미지의 내재된 통계량을 가지고 unconditional하게 이미지를 생성하도록 만들어진 모델이다. 학습 방식의 핵심적인 부분은 이미지의 scale을 여러 단계를 거칠 때마다 변화시키며 이미지의 특성을 파악하게끔 한다는 것이다. 아래는 모델의 전체적 구조를 나타낸 것이다.
모델의 구조는 전반적으로 데이터 scale이 위로 올라갈수록 정교해지는 pyramid 형태를 갖는다. Generator $G: {G_0, …, G_N}$는 입력 이미지인 $x:{x_0, …, x_N}$로 학습된다. $x_n$은 값 $r_n (r>1)$에 따라 원본 이미지를 downsampling한 것으로, $x_N$은 제일 coarse한 scale을 갖는다. 각 $G$는 이전 단계에서 생성된 이미지 $\tilde{x}$와 해당 단계의 scale에 맞는 noise $z$를 입력 받는다. 그리고 대응되는 Discriminator $D :{D_0, …, D_N}$를 속이는 방향으로 이미지를 생성하며 학습한다. D는 원본 이미지 $x_n$를 $G$가 생성한 $\tilde{x}_n$와 비교하여 판별해내는 방향으로 학습된다. 이 때 $x_n$과 $\tilde{x}_n$ 이미지 전체를 기준으로 비교하는 것이 아니라 이미지의 일부분을 두고 비교하는데, 마치 이미지 위에 겹쳐져 비교할 부분을 가리키는 것을 patch라고 한다. 이 patch size는 pyramid 단계에서 올라갈수록 작아진다.
Scale이 제일 coarse한 단계의 $G_N$은 white gaussian noise $z_N$만을 입력으로 받아 이미지를 생성한다.
\[ \tilde{x}_N=G_N(z_N) \]
맨 처음 단계의 patch size는 보통 원본 이미지 높이의 절반 정도가 된다. 따라서 $\tilde{x}_N$은 이미지의 대략적인 배치와 구조를 나타내게 된다. 이후 단계가 올라갈수록 이전 단계에서 표현되지 못한 디테일들을 가지는 이미지가 생성된다. 이것을 위해 $G_n$의 입력으로 $z_n$과 함께 이전 단계에서 생성된 이미지를 upsampling한 이미지가 주어진다.
\[ \tilde{x}_n=G_n(z_n, (\tilde{x}_{n+1})\uparrow^r), n<N \]
각 단계에서 $G_n$의 내부적 구조는 5개의 Conv-block으로 이뤄져 있다. 아래의 그림과 같다.
\[ \tilde{x}_n=(\tilde{x}_{n+1})\uparrow^r+\psi_n(z_n, (\tilde{x}_{n+1})\uparrow^r) \]
$z_n$을 $(\tilde{x}_{n+1})\uparrow^r$ 에 더하는 데, 이것을 Convolutional layer 이전에 하여 $G$가 noise를 누락하지 못하게 한다. 종종 randomness를 조건으로 다루는 GAN 연구에서 발생하는 문제점을 이렇게 해결하였다. 또한 데이터를 5개의 Conv-block을 통과시킨 후 $(\tilde{x}_{n+1})↑^r$을 한 번 더 더해주는 residual learning 방식을 사용한다. 각 Conv layer는 Conv(3X3), BatchNorm, LeakyReLU로 구성되어 있다. 오로지 Conv layer만 사용한 점은 test 시 noise의 차원을 변경하여 다양한 크기의 이미지를 생성할 수 있다는 이점을 주기도 한다. 한편 $D_n$의 구조는 $G_n$의 5-Conv net과 동일하다.
각 단계의 Loss function은 Adversarial Loss와 Reconstruction Loss으로 이뤄져 있다.
\[ min_{G_n}max_{D_n}L_{adv}(G_n, D_n)+{\alpha}L_{rec}(G_n) \]
Adversarial loss는 xn과 $\tilde{x}_n$의 분포 차이를 작게 하기 위해 사용된다. Reconstruction loss는 이미지를 생성할 때 필요한 원본 이미지의 중요한 특징 정보들을 보존하게끔 하기 위해 사용된다.
Adversarial loss로는 WGAN-GP Loss[6]를 사용했다. WGAN-GP는 Wasserstein GAN(WGAN)의 weight clipping의 문제점을 해결하기 위한 방법으로 gradient penalty를 도입한 모델이다. GAN은 원본 이미지와 $G$에 의해 생성된 이미지 분포의 차이로써 Jensen-Shannon divergence를 사용한다. $G$는 이것을 최소화 하도록 학습된다. 그런데 이 과정이 반복되다보면 $D$가 포화되면서 gradient vanishing 문제가 발생한다. WGAN은 이 문제를 해결하기 위해 분포 간 차이의 척도로서 Wasserstein-1 distance를 사용한 것이다. 또한 $D$-해당 논문에서는 ‘the critic’-는 1-Lipschitz Function으로, 미분 계수가 거의 모든 곳에서 1을 넘지 않는다. 이 Lipschitz constraint를 강화하기 위해 $D$의 weight를 콤팩트 공간에 가둬두는 weight clipping이 더불어 제시되었다. 이것으로 gradient vanishing 문제가 발생하는 것을 방지한다.
WGAN-GP는 weight clipping이 모델 최적화를 어렵게 한다는 것을 보이면서, 이 문제를 해결하기 위해 만들어졌다. Gradient penalty는 weight clipping 대신 $D$의 Lipschitz constraint를 강화하기 위한 장치로서 제시되었다. 1-Lipschitz function인 D의 미분 계수를 입력값에 따라 직접적으로 제한하는 방식이다.
SinGAN에서는 학습 안정성이 높은 WGAN-GP를 사용하였다. 또한 loss function을 patch 몇 개가 아닌 이미지 전체에 걸쳐 적용하였는데, 이것으로 모델이 boundary condition을 학습하게끔 했다.
Reconstruction loss는 원본 이미지를 생성하는 noise map의 존재를 가정하기 위함이다. $\tilde{x}_n^{rec}$은 $n$번째 단계에서 noise map ${z_N^{rec}, z_{N-1}^{rec}, …, z_0^{rec}}={z^*, 0, …, 0}$을 가지고 생성된 이미지이다. $z^*$은 학습 내내 고정되는 noise map이다.
\[\begin{aligned} L_{rec} &= \lVert G_n(0, (\tilde{x}\_{n+1}^{rec}\uparrow^r))-x_n \rVert^2, \ n<N \\ L_{rec} &= \lVert G_N(z^*)-x_N \rVert^2, \ n<N \end{aligned}\]Result
SinGAN은 Single image를 학습하여 이미지를 자연스럽고도 다양하게 생성하였다. 원본 이미지의 전반적인 배치와 패턴 구조를 보존하여 현실감 있는 결과물을 만들어 냈다. 그림자, 물에 반사되는 모습 등이 자연스럽게 표현되었다. 그러면서도 patch의 새로운 조합을 생성하여 원본 이미지와 완전히 다른 이미지를 만들거나, 학습한 이미지보다 더 높은 화질을 갖는 이미지를 생성하기도 했다.
Scale이 pyramid 형태인 모델 구조는 좋은 결과를 보였다. 학습 시 설정하는 scale 수에 따라 모델이 이미지를 생성하는 데에 이미지의 특성을 반영하는 정도가 결정되는 것을 볼 수 있었다. Scale 수가 작으면 coarse한 단계의 patch가 작아지므로 집약적인 디테일을 학습한다. Scale 수가 증가할 수록 patch가 커져 이미지의 전반적인 배치나 특성을 보존하도록 학습한다. 이것을 시험하기 위해 scale을 지정하여 원본 이미지를 얼마나 변화시켜 생성할 것인지 결정하였다. n=N일 때 얼룩말의 모습은 n=N-1, n=N-2일 때보다 부자연스럽다.
모델이 생성한 이미지가 얼마나 자연스러운지를 평가하기 위해 두 가지 metric이 사용되었다. 첫 번째 방법은 user study이다. 고용된 사람들에게 두 가지 질문을 했다. 하나는 원본 이미지와 생성된 이미지를 한 번에 1초 간 보여준 뒤 어떤 것이 가짜인지 묻는 paired case이다. 다른 하나는 하나의 이미지를 1초 간 보여준 뒤 그것이 가짜인지 아닌지를 묻는 unpaired case이다. 50개의 가짜 이미지를 랜덤하게 제공했다. 한편 coarsest scale을 N과 N-1로 달리하여 이미지를 준비하기도 했다.
결과적으로 비교 기준이 없는 unpaired case에서, coarsest scale에 관해서는 전반적 구조가 더 보존되는 N-1일 때 사람들이 더 헛갈려 했다. 그러나 N일 때에도 40% 이상의 혼동율로, 분간할 수 없는 수준을 가리키는 50%에 근접하였다. SinGAN이 생성한 이미지가 사람이 보기에 꽤 자연스럽다는 것을 알 수 있다.
두 번째 방법은 Single Image Frechet Inception Distance(SIFID) metric이다. Frechet Inception Distance(FID)는 원본 이미지와 생성된 이미지 feature 분포의 편차를 측정하는 것이다. SIFID는 원본 이미지의 통계량을 얼마나 보존하였는지를 측정하기 위해 이 논문에서 제안한 것이다. SIFID는 FID가 이미지 당 하나의 vector를 사용하는 것과 달리, 이미지 내 위치 당 하나의 vector를 사용하여 원본 이미지와 그것으로부터 생성된 이미지 feature 간의 통계량 차이를 비교하는 기준이다.
Coarsest scale에 관해서는 user study의 경우와 같이 N-1일 때가 결과가 더 좋았다. 한편 user study와 달리 paired case의 결과가 더 좋았는데, SIFID는 원본과 생성 이미지를 비교하여 계산되기 때문이다.
SinGAN은 이미지 생성 뿐만아니라 다양한 image manipulation task에 사용될 수 있다. 모델 구조를 바꾸거나 fine-tuning을 적용하지 않고도 super resolution, editing, paint-to-image 등의 여러 task를 수행한다. 단 입력 이미지와 같은 특징 분포를 갖는 이미지만을 생성할 수 있다. n번째 scale 단계에서 down sampled된 이미지를 넣어 해당 이미지의 patch들의 분포에 맞게 학습해 나가는 방식이다. 성능 또한 각 task를 목적으로 만들어진 모델들에 비해 성능 또한 떨어지지 않는다. 예를 들어 super resolution의 경우 SRGAN, EDSR, DIP, ZSSR과 SinGAN을 비교했는데, single data 기반 SOTA 모델인 DIP, ZSSR 및 dataset 기반 모델인 EDSR보다 성능이 좋았고, SRGAN과는 거의 근접한 성능을 보였다.
Discussion
SinGAN은 Single image로 GAN을 학습하여 자연스러운 이미지를 생성하고, 다양한 이미지의 변용이 가능한 장점이 있다. 우선 SinGAN은 입력 데이터 하나만으로도 학습이 가능하다. 기존의 모델들은 특정 클래스에 속하는 이미지를 생성하는 모델을 학습시키기 위해 해당 클래스의 많은 이미지 데이터가 필요했다. SinGAN은 이 점에서 많은 데이터를 구할 필요가 없어 학습이 용이하다. 그럼에도 SinGAN은 사람이 보기에도 자연스러운 이미지를 생성해낼 수 있다. 기존의 Single image 기반 GAN 모델은 texture 이미지 생성에만 국한되었다. 나아가 이미지의 전반적인 패턴과 특징을 유지하면서도 물체의 배치 등을 변화시켜 입력 이미지와 다른 다양한 이미지를 생성할 수 있다.
많은 image manipulation task를 다루는 모델들은 특정한 task를 수행하기 위한 목적으로 만들어졌다. 그러나 SinGAN은 모델 구조 수정이나 tuning 등의 추가 작업을 하지 않으면서도 다양한 task를 해결할 수 있다. Scale을 변화시켜 학습하고, 테스트 시 적절한 단계에 이미지를 입력함으로써 super resolution, editing, paint-to-image, single image animation 등을 수행한다.
다만 user study에서 볼 수 있듯 결과물이 실제 이미지와 비교하였을 때 가짜인지 구분이 되는 정도이다. 더 자연스러운 이미지를 생성해내는 성능을 위해 발전할 여지가 있다.