안녕하세요 모카의 머신러닝 입니다. 이번에는 SinGAN이라 불리는 SinGAN: Learning a Generative Model from a Single Natural Image, ICCV 2019 에 대해 리뷰합니다.
SinGAN 방법 요약
하나의 자연적연 이미지로부터 학습 가능한 unconditional generative model를 제안한다.
이미지의 패치에 대한 내부 분포를 파악는 방법으로 더 좋은 퀄리티, 이미지의 같은 시각적 콘텐츠를 가지는 다양한 샘플들을 생성 할 수 있다.
구조
- fully-convolution GAN의 피라미드 구조이다. 이 구조를 통해이미지의 다양한 스케일에서 패치 분포를 학습한다.
장점
- 상당한 변동성을 가진 임의의 사이즈와 종횡비의 새로운 샘플들을 생성할 수 있고, 학습 이미지의 전체적인 구조나 자세한 texture 들은 유지할 수 있다.
- 이전의 single image GAN 방법들과 비교하여, 우리의 방법은 texture 이미지나 conditional에 국한하지 않는다.
- 유저 스터디를 통해 실제 이미지와 혼동될 수 있다는 것을 보임
- SinGAN은 이미지 매니퓰레이션 작업에 사용될 수 있다.
SinGAN 이전의 연구
- conditional natural single image translation
natural image 한장으로부터 생성하는 사전 연구가 있으나 conditional GAN 이라서 image에서 image를 맵핑해야 하고, 랜덤 샘플을 생성하기 위함이 아니라는 한계가 있다.
논문에서 제안하는 프레임워크는 랜덤 노이즈에서 샘플을 생성하는 것이다. 다른 다양한 이미지 매니퓰레이션 작업에 더 적합하다.
- unconditional texture single image generation
또한 unconditional 한 방법으로 single 이미지를 학습하는 이전 연구가 있지만 이는 texture 이미지에 국한된다. 이전 연구의 모델에 natural 이미지를 학습하면 결과가 좋지 한다.
texture 이미지 생성 뿐만 아니라 다양한 자연적인 이미지에 적용 가능하다.
SinGAN 핵심 방법: Multi Scale Architecture
모델은 의 생성자의 피라미드 구조로 구성되어 있다.
이미지 또한 의 버전으로 되어 있다.
$x_{n}$은 이미지 $x$ 의 다운샘플된 버전으로 downsample factor 에 의해 다운샘플 된댜.
각 생성자 $G_{n}$은 이에 상응하는 $x_{n}$에 대한 이미지를 학습하고, 판별자 $D_{n}$는 생성된 이미지의 패치와 $x_{n}$ 이미지로부터의 패치를 구분하도록 시도한다.
coarse-to-fine 학습 (전체에서 세밀한 부분으로)
coarse-to-fine 하게 학습한다.
직역하면 거친것부터 → 세밀한 것. 즉 이미지의 전반적인 구조를 먼저 학습하고 점점 세밀한 구조를 학습한다.
가장 처음은 전체적인 구조 (coarsest scale)에서 시작한다.
coarsest scale에서는 $G_{N}$이 $z_{N}$가우시안 노이즈를 이미지 샘플 $\tilde{x}_{N}$으로 맵핑한다.
더 세밀한 스케일의 생성자 $G_{n}$ $(n < N)$은 이전의 스케일에서 생성되지 않은 디테일이 들어감
각 생성자 $G_{n}$은 이전의 더 거친 스케일의 이미지 버전을 업스케일 하려고 시도한다.
Generator 구조: Single Scale Generation
모든 생성자는 이와 비숫한 구조를 가지고 있다.
생성자의 오퍼레이션은 다음과 같다.
생성자는 동시에
- 업스케일 하면서
- 생성한다.
$\psi_{n}$는 Conv(3x3)-BatchNorm-LeakyReLU로 구성된 5개의 컨볼루션 블록으로 이루어진 fully convolutional net이다.
Training Loss
다음과 같이 Adversarial loss와 Reconstruction loss로 구성되어 있다.
Adversarial loss는 WGAN-GP Loss를 사용한다.
Reconstruction loss는 생성한 이미지와 원래의 이미지 간의 차이를 줄이는 방향으로 학습하기 위함이다.
Results
지금까지 SinGAN논문 리뷰를 해보았습니다. 저도 논문을 읽으며 공부해나가는 단계라 부족한 점이 있을 수 있습니다. 같이 잘 공부해나가요! 질문이나 지적, 요청해주실 부분이 있다면 댓글이나 메일 부탁드립니다.
읽어주셔서 감사합니다. 😃