Worth spreading

Image inpainting with GAN [논문참조] 본문

ABCD/Deep Learning

Image inpainting with GAN [논문참조]

annual 2018. 6. 26. 10:49

" 이 글은 Semantic Image Inpainting with Deep Generative Models 논문을 참조해 작성한 글입니다. "

다음 이미지들은 이 논문의 코드를 이용해 나와 지인들의 얼굴 그리고 논문에서 제공한 데이터셋의 얼굴들을 Inpainting한 결과이다.



랜덤으로 노이즈를 준 경우는 굉장히 좋은 결과를 보여준다. (포이즌블랜딩을 하고 안하고의 차이가 꽤나 있었다.)

반면 왼쪽을 통째로 날려버린 경우는 부드럽지만 원본과 차이가 있는 결과를 보여주었다. 


이 글에서는 GAN을 이용해 위와 같은 결과를 얻어 내는 방법에 대해서 알아볼 것이다.

 


Image inpainting

with GAN

 

1.   Introduction

 

 Image inpainting 기간동안 수많은 학자들로부터 연구된 유서 깊은 분야이다. 이미지의 특징들을 추출해 가려진, 혹은 보이지 않는 부분을 복원,생성해 낸다는 개념의 inpainting 편미분을 이용해 원하는 부분 주변의 기울기를 찾아내 방향성을 가지고 이미지를 만들어 내는 방법이 주로 사용되어왔다. 그러던 2014 Ian Goodfellow Generative Adversarial Networks(일명 GAN)라는 머신러닝 기반 이미지 생성 모델을 제안했고 이후 GAN 이미지처리 분야에서 가장 많이 연구되고 있는 이론 하나가 되었다. 생성자(Generator, 이하 G) 구별자(Discriminator, 이하 D) 구성된 GAN 이미지 데이터로부터 추출한 특징들을 이용해 실제와 유사한 이미지를 생성해 내는 것이 목표다. 우리는 이러한 GAN 특징을 inpainting 적용해보고자 한다.

 

2.   GAN

 

  전에 GAN 무엇인지를 알아보자. GAN 이미지처리 분야에서 주로 사용되는 딥러닝 알고리즘의 종류로 실제 존재하는 이미지 데이터를 학습해서 새로운 이미지를 만들어 내는 알고리즘이다.

 

 전체적인 구조는 아래의 그림과 같이 Generator Discriminator 경쟁적으로 학습을 시켜 Generator 만든 데이터가 진짜인지 가짜인지 구별하기 힘든 수준까지 발전시키는 구조이다.

 



3.   Training GAN

 

 Discriminator 실제 학습 데이터와 Generator 만든 가짜 데이터를 이용해 학습을 하며 입력데이터가 진짜인지 가짜인지 구별하는 역할을 하며 Generator 실제 데이터의 확률밀도를 이용해 가짜 데이터를 만들어 내는 역할을 한다. 둘은 서로 경쟁적으로 학습을 결국 Generator Discriminator 속일 있을 정도의 가짜 데이터를 만들어 있게 되며, Discriminator 또한 진짜/가짜를 판별하는 능력이

점점 개선된다.

 

 그런데 GAN 하나의 cost function 관리하면 되는 기존의 뉴럴넷들과 다르게Generator Discriminator 개의 function 관리해줘야 한다. 그렇기 때문에 학습은 다음과 같은 2단계로 진행된다.

 

1)     Generator 고정 시키고 Discriminator 학습 시킨다. Discriminator 어느 것이 진짜이고 어느 것이 가짜인지 이미 알고 있기 때문에 기존의 뉴럴넷의 지도학습(supervised learning) 동일한 방식으로 학습 시킬 있다.

2)     Discriminator 고정 시키고 Generator 학습 시킨다. Generator Discriminator 속일 있는 방향으로 학습 시킨다.

과정을 반복적으로 수행하다 보면 Discriminator Generator 내쉬 평형상태에 도달하게 된다. 그런데 이러한 내쉬평형에 이르기 위해서는 Discriminator Generator 서로 협동적으로 학습이 돼야 하는데 이것이 까다롭기 때문에 GAN 학습은 안정성이 떨어진다.

 

 또한 이것이 최적이라는 것을 판단할 명확한 기준이 부족하기 때문에 사람의 개입이 어느정도 필요하다.

 

 이러한 결함에도 불구하고 GAN 보여주는 결과는 이전의 Generative 알고리즘들에 비해 좋기 때문에 점점 많은 연구자들이 GAN 연구에 도전하고 있다.

  

4.   Inpainting with GAN

 

 우리는 이러한 특징을 가진 GAN Inpainting 문제에 적용시킬 것이다. 그런데 GAN inpainting 직접 적용할 수는 없다. 왜냐하면 GAN 생성하는 이미지는 랜덤이미지이기 때문에 따로 제약을 가하지 않는 이상 복원 하고싶은 그림과 다를 확률이 상당히 높기 때문이다.

 

 이러한 문제를 해결하기 위해 Back-propagation(이하 backprop)을 사용할 것이다. backprop을 이용해 입력으로 들어온 손상된 이미지에 가까운 Encoding vector z를 찾도록 학습시키는 것이다. 이를 위해 backproploss function 또한 새롭게 디자인 했다.

 

 

1)    Approach

 

 우선 손실된 부분을 채워넣기 위해서 정상적인 이미지로 학습한 GAND(Discriminator) G(Generator) 활용할 것이다. 학습된 G는 우리의 Backprob을 통해 입력 이미지와 유사한 이미지를 만들 수 있는  z를 구할 것이다.

 

 위에서 말햇듯이 우리는 z optimization problem을 통해 구할 것이다. 가려진 이미지를 y, missing part 이미지와 동일한 사이즈의 binary maskM이라고 부르겠다.

 

 

 

 Optimizez hat 다음과 같다.

 


L_c 이미지가 가려진 이미지 y 마스크 M 맞게 생성되도록 해줄 context loss 뜻한다. L_p prior loss 안좋은 결과에 패널티를 부여하기 위한 loss. 

 

2)   L_c

 

 Context loss는 손상되지 않은 이미지들을 이용해서 구한다. Context lossGanG 손상되지 않은 오리지널 이미지 간의 L2 norm을 이용해 구할 것이다. 그런데 L2 norm을 그대로 사용하면 마스크의 위치와 가깝건 멀건 동일한 가중치로 loss를 줄 것이다.

 

M과 같이 가운데 부분이 손상된 경우를 생각해보자. L2 norm loss 사용하면 가운데 공간과는 곳의 픽셀들도 loss 많은 영향을 있다. 인물사진에서 얼굴이 없어져서 얼굴을 복원하려는데 뒤의 배경 때문에 loss  증가할 있다는 것이다. 때문에 좀 더 올바른 encoding 찾기 위해 손상된 부분과 가까울수록 높은 가중치를 갖도록 것이다.

 

 이렇게 처리하기 위해 우리는 각 픽셀의 가중치를 픽셀 주변에 존재하는 손상된 픽셀의 개수와 비례하게 만들어 것이다. 손상된 부분과 pixel inpainting과정에서 적은 영향만 있도록 하는 것이다. 그래서 우리는 픽셀의 가중치를 다음과 같이 것이다.


i 픽셀의 인덱스이고 W_i 픽셀의 중요도를 뜻한다. N(i) pixel i 이웃들이다. 이웃은 window 이용할 것이다. 그리고 |N(i)| 이웃 pixel 수이다. 우리 예제에선 window size 7 것이다.

 

그런데 우리 모델에서 L1-norm L2-norm보다 좋은 결과를 보여줬다. 따라서 G가 만든 이미지와 오리지널 이미지의 weighted L1-norm 다음과 같이 정의할 것이다.

 

 

element-wise 곱셈을 뜻한다.

  

3)   L_p


 prior loss 픽셀별 차이가 아닌 high-level image feature representation 기반한 클래스들의 penalty이다. 우리 모델에서 prior loss 복원된 이미지가 학습데이터의 샘플과 비슷해질 있도록 도와주는 역할을 것이다.

 

이 모델의 prior loss 비현실적인 이미지에게 높은 loss 준다. 이는 GAND가 하는 역할과 비슷하므로 prior loss GAN Discriminator loss를 그대로 사용할 것이다.

 

 

 

 람다는 위의 loss 사이에서 균형을 맞혀주는 역할을 한다. z D 속이는 방향으로 학습되고 생성된 이미지가 리얼해지도록 만든다. 만약 L_p 없다면 y에서 z로의 매핑된 결과가 뭔가 이상해지는 방향으로 수렴할 있다. 다음은 L_p 있을 때와 없을 때를 비교한 사진이다.

 

5.   Training Inpainting

 

이제 context loss prior loss 가지고 손상된 이미지와 가장 유사한 z 골라 새로운 이미지로 만들어 것이다.  z 랜덤하게 초기화된 위에서 말했듯이 backprop 이용해 optimize를 하도록 학습시킬 것이다.

 

다음 이미지는 z 학습이 됐을 학습되는 방향을 시각화 것이다.


  

Zoptimize한 이후 inpainting 결과는 입력 이미지의 손상되지 않은 부분을 덮어 씌우기만 하면 끝이다. 그런데 여기서 생성된 부분의 픽셀 자체는 괜찮은데 주변 픽셀들과 비교했을 동일한 intensity 가지지 않는 문제가 발견됐다. 이를 해결하기 위해서 poisson blending 사용했다. 핵심 아이디어는 G(z hat) 방향은 유지한 color 입력이미지 y color 같아지도록 shift해주는 것이다. 여기서 이를 위해  x hat 정의했다.

 

 

gradient operator이다. 다음은 blend 하기 전과 후를 비교한 이미지다.

 

 

6.   Other Details     

 

 일반적으로 우리 모델은 GAN 구조와 일맥상통한다. 때문에 어떤 Generative 모델에도 적용될 있다. 이 예제에서는 DCGAN 썼고 generative 모델 G [-1,1] 균일분포(uniform distribution) 100차원 랜덤백터로부터 64x64x3이미지를 생성되도록 디자인됐다. 생성 과정에선 이미지 사이즈를 반으로 만들고 channel 두배로 늘려주는 convolution layer 여러 개와 output layer에서 2 class softmax 사용했다.

 

  DCGAN 논문 [1] 구조에 Adam optimization 적용해 학습시켰다. 람다값은 0.0003이고 학습데이터에 data augmentation 사용해주었다.

 

 

[1] A. Radford, L. Metz, and S. Chintala. Unsupervised representation learning with deep convolutional generative adversarial networks. arXiv preprint arXiv:1511.06434, 2015.

 


Comments