본문 바로가기
딥러닝/CV 논문

[GAN] pix2pix HD

by 혜 림 2022. 2. 10.

pix2pix 도 모르는 GAN 초짜지만 가보자구

 

 

[reference]

https://arxiv.org/abs/1711.11585

https://github.com/NVIDIA/pix2pixHD

 

결과 스포

High-Resolution Image Synthesis and Semantic Manipulation

with Conditional GANs

 

Abstract

고화질 이미지를 생성하기 위해서 conditional GAN 을 이용하고자 한다. 본 모델의 핵심: (1) novel adversarial loss (2) new multi-scale generator and discriminator architectures. 이 GAN 모델을 이용해서 사용자가 이미지를 편집할 수 있도록 (1) incorporate instance seg info (2) generate diverse result given the same input 

 

1. Intorduction

 

 실제같은 사진을 만들기 위해서 graphics를 이용하는데, 이는 현실적인 이유로 이용하기 어렵다. 왜냐하면 매번 새로운 가상환경 virtual world를 만들어야 하기 때문이다. 이 graphic rendering 하는 과정을 모델이 학습하고 추론하는 과정으로 바꾼다면 우리는 효율적으로 photo-realstic 한 사진을 만들어낼 수 있다. 즉, creating new virtual world 대신에 creating new dataset의 관점으로 이미지 생성을 보겠다는 것이다.

 

 본고에서는 semantic label map으로부터 고화질 이미지를 생성하는 새로운 접근법을 소개한다. 이런 접근법은 생성된 이미지를 편집하기에 유리하다. 

 

 semantic label map을 생성하기 위해서 pix2pix 모델을 기반으로 한다. 이는 image-to image translation 프레임워크다. 하지만 이 모델은 학습이 불안정하다는 한계가 있다. 대안으로 perceptual loss를 이용한 연구도 있었는데, 여기서는 모델이 자세한 부분은 생성하지 못한다는 한계가 있었다. 

 

 따라서 이 두 가지 문제 (1) GAN으로는 고화질 이미지를 만들어 내기 어려움 (2) 고화질을 다뤘던 연구는 detail까지는 생성하지 못했음 을 해결하기 위해서 본고에서는 (1) new objective loss (2) new multi scale generator and discriminator를 도입한다. 

 

 나아가서, 이미지 편집을 용이하게 하고자 (1) instance-level segmentation info를 활용 (2) same input으로부터 diverse output을 내도록 했다. 

 

 

2. Relatined work

 

@Generative adversarial network

 GAN은 natrual image의 분포를 흉내내는 이미지를 만들도록 하는 모델이다. 이 GAN을 응용하여 고화질과 디테일 모두를 잡는 모델을 만들고자 했다고 한다 

 

@Image-to-image translation

 

 입력 이미지를 특정 도메인의 이미지로 변환시키고, 이걸 또 다시 원하는 도메인으로 변화시키는 과정을 의미한다. 위 이미지의 경우 segmentation label map을 이용해서 photo-realstic image를 만들고 있는 것을 확인할 수 있다. (pix2pix 참고) 기존에 이용한 L1 loss는 흐릿한 이미지를 생성했던 반면, advarsarial loss 는 비교적 좋은 결과를 냈다. loss를 바꿔서 좋은 결과를 낼 수 있었던 것은 discriminator 역시 학습을 할 수 있었기 때문이다. 

 

 conditional GAN은 학습 불안정성과 최적화 문제로 고화질 이미지는 잼병이었다. 이걸 극복하기 위해서 perceptual loss를 썼는데 그럭저럭 고화질은 만들어냈지만 디테일이 모자라서 썩 만족스럽지는 않은 이미지였다.

 

@Deep visual manipulation

 

읽어봐!

 

3. Instance-Level image synthesis 

 

section 3.1: pix2pix 의 베이스라인, 그리고 한계점

section 3.2: 어떻게 photo-realism, resolution을 올렸는지 - objective function, network design

sectino 3.3: image quality를 높이기 위해서 무엇을 이용했는지 - instance-level object semantic info

section 3.4: 이미지 manipulation을 더 용이하게 한 것 

 

의 순서로 이루어진다. 

 

@The pix2pix Baseline

 

 pix2pix는 conditional GAN 의 일종으로 image-to-image translation을 목표로 한다. 

 G는 semantic label map을 실제 같은 이미지로 변환하고 D은 실제 같은 이미지와 진짜 이미지를 구분한다.

 지도학습으로 G와 D는 학습한다. 즉 데이터는 ($s_{i}, x_{i}$) 로, $s_{i}$는 semantic feature label로 input var, $x_{i}$는 real image로 target var 이다.

 

 이 모든 과정은 아래의 함수를 minmax 게임에 따라 학습하면서 이루어진다.

latex보다 캡쳐에 길들여진 나

 

위의 loss는 아래와 같이 정의한다. 

 

G로는 U-Net을 이용하고, D로는 patch-based FCN을 이용한다. 

D의 input은 semantic label map과 해당하는 이미지 의 channel-wise concatenation 이다. 

 

 

@Improving Phtorealism and Resolution

 

 - Coarse- to -fine generator

 

 총 두 개의 G가 있다. global Generator인 $G_{1}$ 과 local generator인 $G_{2}$가 있다. 

$G_{1}$에는 낮은 해상도의 이미지(1024 * 512), $G_{2}$에는 높은 해상도의 이미지(2048 * 1024) 가 들어간다. 

 

 

$G_{1}$은 또 크게 3개로 나눌 수 있다. 앞에서 U-Net의 구조라고 하지 않았는가? 줄어드는 과정인 convolutional front-end : $G_{1}^{f}$, residual block를 통칭 $G_{1}^{R}$, 그리고 upsampling하는 과정인 transposed convolutional back-end $G_{1}^{B}$ 가 있다. 

 

$G_{2}$ 역시 마찬가지 이다. $G_{2}^{f}$, $G_{2}^{R}$, $G_{2}^{B}$ 가 있다. 한편 이때 $G_{2}^{R}$ 은 조금 특이하다. 여기서는 두 가지의 특성맵을 element-wise 하게 더해준다: $G_{2}^{f}$ 와 함께 $G_{1}^{B}$

-> 이를 통해서 global information을 담고 있는 $G_{1}$을 $G_{2}$에게 전달해 주는 것이다. 

 

 훈련은 (1) $G_{1}$ (2) $G_{2}$ (3) jointly fine-tune all the network. 

 

downsampling 해서 나온 feature map 과 기존 고해상도의 이미지에서 나온 feature map이 동일하다는 것이 핵심

 

 - Multi-scale discriminators

 

 고해상도 이미지를 D에 넣는 것도 일이다. 왜냐하면 큰 receptive field가 필요하기 때문이다. 

 그래서 큰 receptive field를 쓰는 것 대신에 multi-scale discrimator를 쓰기로 한다. 

 즉 구조적으로 완전히 똑같은 애를 2개를 더 가져다 쓴다는 말이다. 

 

$D_{1}$, $D_{2}$, $D_{3}$ 인데 뒤에 있는 두 친구는 $D_{1}$ 에 들어가는 input image를 2배, 4배 down sample 해서 넣어주는 애들이다. 그래서 가장 고화질을 보게 되는 친구는(operate at coarest scale)은 제일 큰 receptive field를 가지는 것이고, 가장 저화질을 보는 친구는(operate at finest scale)은 제일 작은 receptive field를 가지는 것이다. 

 

(*receptive field는 나 원래 filter의 size로만 알고 있었는데 생각해보니 filter size를 바꾸는 것과 image 를 down sampling 하거나 up sampling 하는 게 똑같은 효과인 셈이네.!)

 

 우리의 험난한 여정에 따라 loss는 다시 정의된다. 왜냐하면 D가 3개니까!

 

 

- Improved adversarial loss

 

 feature matching loss도 같이 썼다고 자랑하고 있다. 

T는 레이어의 총 갯수 $N_{i}$는 각 레이어의 element 의 총 갯수

그래서 minmax game을 따르는 전체 loss는 아래와 같다. 

 

 

@Using Instance map

 

 지금까지는 input으로 semantic label map만 이용했다. 이 경우 도로 같이 물체가 다닥다닥 붙어있는 경우 같의 class의 다른 object는 구분하지 못한다는 문제점이 있다. 반면 instance-elvel semnatic label map은 서로 다른 object 사이의 경계를 포함하고 있다는 장점이 있다. 그래서 이 instace map을 이용하고 싶은데, 그러자니 각 클래스별로 object가 몇 개있는지 미리 알 수 있는 방법이 없어서 효율적으로 네트워크를 짜기 어려워진다. 

 

 이 instance map이 포함하고 있는 중요한 정보는 서로 다른 object간의 boundary이다. 그래서 본고에서는 instance level semanticf label map을 뽑아내는 대신(모든 물체의 class ID + individual ID) 대신에 boundary만 추출하는, boundary map을 이용할 것을 제안한다. 

 

 먼저 instance boundary map을 계산한다. 만약 주위에 있는 4개의 픽셀 값의 object ID 와 현재 위치의 픽셀값이 다르다면 1, 같다면 0을 넣는다. 이렇게 만든 instance boundary map 은 semantic label map과 concatenate 시켜서 G에 넣어준다. 마찬가지로 D의 input 역시 살짝 변한다: instance boundary map, semantic label map and real/synthesized image. 

 

 

 이렇게 input을 변형시키면 결과가 다음과 같이 변한다. 

 

 

@Learning an Instance-level Feature Embedding 

 

 semantic label map -> realistic image는 one-to-many matching 문제이다. 이렇게 하기 위해서 input에 또 새로운 무언가를 추가해준다. low-dimensional feature channels as the input to the generator network. 이를 통해서 유연하게이미지를 manipulation 할 수 있다. 

 

 

 그 low - dimensional feature를 만들어내기 위해서 우리는 또 새로운 network(E)를 만든다. 이 E 는 기본적인 인코더-디코더의 형태를 가지고 있다. 각 instance 내의 feature가 동일하도록 object instance에 average feature를 계산하기 위해 인코더의 출력값에 instance-wise average pooling layer를 추가한다. 

 

 이제 G(s)는 G(s, E(x))로 변한다. 인코더는 G와 D 와 함께 학습시킨다. encoder가 학습이 끝나고 나면, 각 object class 별로 k-means clustering을 한다. 이 과정을 통해서 모든 cluster는 특정  style, feature를 포함하게 된다(예: 아스팔트). inference 할 때는 이 cluster의 센터 중 하나를 랜덤하게 골라서 encoded feature로 이용하게 된다. 

 

 이렇게 생성한 feature는 label map과 합쳐서 G의 input으로 이용한다.

 

 쉽게 생각해서 특정 label의 대표 feature를 뽑아서 그걸로 해당 mask를 통일시킨다..? 의 느낌이다. 이 대표 feature를 뽑는게 k-means clustering 이고. 

 

 

4. Results

 

 기억남는 것만 정리해보면

 

- feature matching loss를 이용은 critical하다. 

 - perceptual loss는 critical 하지 않다.

- instance map을 함께 이용할 때 더 realistic 하다.

- manipulation은 데모를 공개하고 있으니 그걸 참고하길 바람

 

 

 

[정리]

 

 

 

 

예컨대 정리하자면 기존의 pix2pix 의 한계를 극복해서 고화질 이미지를 생성할 수 있는 모델을 고안해냈다. (1) multi scale의 G와 D를 이용 (2) feature matching loss (3) input : semantic label map + boundary map 정도로 핵심을 정리할 수 있겠다. 

 

 

 

 

'딥러닝 > CV 논문' 카테고리의 다른 글

[Classification] ResNet 요약  (0) 2022.07.10
[Object Detection] CenterNet2 요약  (0) 2022.03.21
[Classification] VGGNet 요약  (0) 2022.02.10
[Object Detection] CenterNet 요약  (0) 2022.01.28
[SuperResolution] EDRS  (0) 2021.09.29

댓글