본문 바로가기
A·I

[Image inpainting] Gated Convolution 논문 리뷰

by 방구석 몽상가 2020. 9. 2.
Gated_Convolution

Image inpainting task는 이미지 상 손실된 부분을 복원하는 task로, 손실된 부분에 대한 mask 정보가 존재하면 그 부분을 주로 unmasked pixels과 contextual 정보를 참고하여 자연스럽게 채워넣게 된다.

Image inpainting 관련하여 많은 논문들이 있지만, 가장 기본이 되는 다음 세 논문 중 Gated Convolution에 대해 다루어보려 한다.

(1) Image Inpainting for Irregular Holes Using Partial Convolutions
(2) Generative Image Inpainting with Contextual Attention
(3) Free-Form Image Inpainting with Gated Convolution

Partial Convolution 방법론(1)의 경우 다음 Partial Convolution 리뷰에 다른 분이 잘 정리해놓았으니 참고하면 좋을 듯하다. 대략적으로 설명하자면 partial convolution은 image와 0과 1로 이루어진 mask가 주어졌을 때 아래 그림과 같이 valid pixel에 대해 가중치를 주어 연산하고, 이를 가지고 U-Net 구조를 구성하여 학습을 진행하면서 rule-based로 mask를 업데이트한다.

Partial Convolution의 limitations

(1) 모든 spatial locations에 대해 valid인지 invalid를 경험적으로 분류를 진행한다.

아래 Partial convolution의 mask 업데이트 함수를 보면, 이전 layer에서 filter range에 따라 얼마나 많은 pixels를 cover하는지 고려하지 않고 mask를 설정한다는 것을 알 수 있다.

Output mask

Mask가 1로 업데이트된 두 개의 feature elements를 예로 보면 하나는 filter가 1개의 valid pixel만을 cover하여 생성되고 또 다른 하나는 filter가 9개의 valid pixels를 cover하여 생성되었다고 할 때, 두 feature elements에 해당하는 mask가 동일하게 업데이트된다는 점은 불균형적이라 생각할 수 있다.

(2) User-guided image inpainting이 불가능하다.

이 점은 Gated Convolution Network가 user-guided를 허용한다는 점에서 비교불가다. 이 논문에서 제안하는 네트워크는 아래 그림과 같이 추가적인 채널에 guided mask를 입력함으로써 user가 원하는 형태로 이미지를 생성할 수 있다.

(3) Layer를 점점 지날 때마다 invalid pixels (features)가 점점 줄어들고 결국 모든 mask 값들은 1로 변환된다.

이렇게 되면 잘 채워치지 않았는데도 valid mask를 할당할 가능성이 높다. 이 논문에서 제안한 네트워크는 자동적으로 최적의 mask를 학습하며, 모든 spatial locations에 soft mask 값을 할당한다. 이렇게 함으로써 유연한 inpainting이 가능하게 될 것이다.

(4) 각 layer의 모든 channels는 같은 mask를 공유한다.

그렇기 때문에 유연성이 제한될 것이고, partial convolution은 un-learnable singe-channel feature hard-gating이라 볼 수 있다. 여기서 gating은 영영사전에 따르면 제일 와닿는 의미가 세포막에서 한 채널을 열거나 닫는 process라고 하는데 hard-gating이라는 것은 mask가 0, 1로만 되어 그렇게 명명한 것 같다.

Gated Convolution

gated convolution은 data로부터 자동적으로 soft mask를 학습한다. 수식을 보면 단번에 이해할 수 있을 것이다.

,

는 각각 다른 weights에 대한 convolution 연산 결과이고 는 ReLU 같은 어떤 activation 함수고, 는 sigmoid 함수다. 즉, 일반적인 convolution 연산을 하듯 를 추출하고 해당 이미지에서 soft mask인 를 얻어 element-wise product를 진행하여 valid feature일 확률이 강한 feature에는 더욱 attention을 주도록 연산이 된다. 이 논문에서는 이를 dynamic feature selection mechanism for each channel and each spatial location를 학습한다고 한다. 그래서 중간 gating values의 시각화를 보면 배경, mask, sketch뿐만 아니라 특정 channels 내 semantic segmentation을 고려하여 feature를 선택하도록 학습함을 알 수 있다고 하지만 논문에는 이 시각화 이미지를 담지는 않아 논문만으로는 직접 확인이 불가하다.

SN-PatchGAN (Spectral-Normalized Markovian Discriminator)

논문의 제목을 보면 알 수 있듯, 이 논문은 free-form image inpainting을 지향한다. free-form image inpainting이란 임의의 위치와 임의의 모양을 가진 다수의 holes를 자연스럽게 채우는 task를 의미한다. 즉, hole이 어디있건 어떤 모양이던 상관없이 잘 채우도록 하고 싶다는 이야기다. 이를 위해 SN-PatchGAN을 고안했다.

Markovian patch의 이해

CNN으로 이루어진 discriminator는 Image, mask와 guidance channels을 입력으로 받아 3D-feature of shape 를 출력한다. 아래 그림에서 보듯 6개의 strided convolutions (kernel size 5, stride 2)를 쌓아 Markovian patches의 feature statistics를 capture한다.

여기서 Markovian patches는 논문 Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks (Markovian GANs)을 보면 그 의미를 알 수 있다. Markovian GANs는 GAN의 계산적 효율성 이슈를 해결하기 위한 테크닉이다. 해당 논문에서는 deep generative models를 두 분류로 나누는데 첫 번째는 흔히 auto-encoder로 훈련되도록 설계되는 full-image models, 두 번째는 오직 local patches의 통계만을 capture하는 deep Markovian models 다. 이 논문은 두 번째 방법론에 집중한다. Markovian patches의 개념을 제대로 이해하기 위해선 먼저 deep Markovian model을 대략적으로 알아두면 좋을 것 같다.

Deep Markovian model은 hidden states 간 conditional probabilities를 모델링한 feedforward network를 사용한 Hidden Markov Models의 variation[ref] 이라고 이해하자. 기존의 방법들은 deconvolution 접근과 feature activations (higher network layer)의 pre-image (pixels)를 추정하기 위해 반복적인 역전파 요구로 인해 run-time cost가 매우 높았다. 이 문제를 해결하기 위해, strided convolutional network를 inversion process에 맞춰 network의 inversion을 미리 계산하는 방법을 제안한다. 이 정도만 이해하고 다시 Markovian patches를 보자. 아래 그림은 위 discriminator를 뒤집은 형태다.

Markovian GANs에서 말한 기존 deep Markovian model은 deconvolution을 통해 pre-image를 추정한다. 위 그림을 보면 어떠한 feature statistics가 존재하고 이를 deconvolution 연산을 통해 pre-image를 생성하는 것으로 볼 수 있다. 이를 다시 반대로 보면 image에 strided convolution 연산을 통해 feature statistics를 capture함으로써 바꿔 생각할 수 있다. 결국 strided convolution 연산을 feed forward 한 것이 feature 통계를 잘 잡기 때문에 이러한 구조를 사용했다고 이해할 수 있다.

다시 본론으로 돌아가, feed forwarding 후 strided convolutions 연산의 결과인 feature maps의 각 feature element에 대해 바로 GANs를 적용한다. Output map에 있는 각 뉴런의 receptive field는 전체의 input image를 cover할 수 있어 global discriminator가 필요하지 않다고 한다. 정확히는 본인들 training setting에서 그렇다고 하는데 매우 큰 input size가 아닌 이상에야 하나의 output feature가 전체 input image를 cover할 수 있지 않을까 생각한다.

Spectral normalization의 이해

추가적으로 GAN의 훈련 안정화를 통해 spectral normalization를 채택했고 SN-GANs에 설명된 spectral normalization의 기본 fast approximation 알고리즘을 사용한다. SN-GANs에 대해 좀 더 알고 싶다면 여기에 잘 리뷰되어있으니 한 번 보면 좋을 듯 하다. 단순하게 spectral normalization은 weight normalization 기술 중 하나로, Lipschitz 상수 하나만을 hyperparameter로 가진다. GAN이 학습하기 어려운 이유 중 하나는 gradient에 제약이 없기 때문인데 이를 해결하기 위해 Lipschitz constraint 을 걸어 gradient에 제약을 주어 학습을 용이하게 할 수 있다. 다만, 각 sample에 대해 모두 적용하기 쉽지 않으므로 WGAN에서는 weights가 일정 이상 커지지 않도록 막는 weight clipping 방식을 적용하여 제약을 두었었고, 후속 논문인 WGAN-GP에서는 real과 fake 각각에서 sample을 뽑아 gradient를 계산한 뒤 Lipschitz constraint를 두었었다. 이러한 방식들은 전체 함수 공간에 대해 잘 제약되기보다는 local하게 제약될 가능성이 높다. 이러한 문제를 해결하기 위해 다음 spectral normalization을 제안한다.

: the spectral norm of the matrix ( matrix norm of ), 이는 의 the largest singular value과 동일하다고 한다. 정리하면 spectral normalization은 Lipschitz constraint 을 만족시키기 위해 weight matrix 의 spectral norm을 normalize 한다. 좀 더 자세한 내용은 논문이나 위에 링크된 리뷰를 보는 것을 추천한다. 이제 fast approximation 알고리즘을 살펴보자. Spectral norm 으로 discriminator의 각 layer를 regularize한다고 했을 때, 알고리즘의 각 round에서 를 계산하기 위해 naive하게 SVD(특이값 분해)를 적용한다면 계산량이 매우 높아진다. 그렇기에 spectral norm을 추정하기 위해 power iteration method [Golub & Van der Vorst, 2000; Yoshida & Miyato, 2017]를 사용한다. 논문의 appendix A에 세부적으로 잘 나와있는데 대충 이해하기로는 특정 조건을 가정하고 대략적인 singular vectors를 구하여 weights의 spectral norm을 추정하는 방식이다. 추후 기회가 되면 충분한 이해 후 spectral normalization과 함께 자세히 다뤄보겠다.

Hinge loss의 이해

hinge loss는 학습 데이터 각각의 class를 구분하면서 두 데이터 분포 간 거리가 가장 먼 decision boundary를 찾기 위해 고안된 loss 함수다[ref]. SVM을 알고 있다면 바로 이해할 수 있을 것이다. 예측값을 (scalar), 실제 값을 (-1 or 1)이라 하면 hinge loss는 다음과 같이 정의된다.

label이 1 또는 -1이기 때문에 예측 값이 1 이상이거나 -1 이하인 경우는 데이터와 decision boundary 사이 margin 내에 존재하지 않는다. 여기서 loss는 margin을 최대한 높이는 것이 목적이므로 이러한 데이터들은 관심 대상이 아니기에 loss 값을 0으로 설정한다. 이를 수식으로 풀어보면 , 이고 이 식이 성립했을 때 loss는 0이어야 하므로 위와 같이 식을 세울 수 있다.

이를 사용하여 real인지 fake인지 판별하기 위한 objective function을 다음과 같이 정의한다.

For generator, For discriminator,

여기서 은 spectral-normalized discriminator이고 는 불완전한 이미지 를 입력으로 취하는 image inpainting network다. 추가적으로 SN-PatchGAN에서 이미 patch-level 정보를 encoding 했기에 perceptual loss는 사용하지 않는다고 한다.

그래서 최종 loss는 pixel-wise L1 reconstruction loss와 SN-PatchGAN loss로 구성된다.

Inpainting Network Architecture

Inpainting network (Generator)는 다음과 같이 coarse and refinement networks 구조를 가진다.

해당 networks 모두 제안된 gated convolution으로 이루어져있다. Partial convolution 논문에서는 U-Net 구조를 사용했었는데 여기서는 skip connection이 큰 의미가 없다고 생각하여 encoder-decoder 구조를 사용했다고 말하고 있다. 그렇지만 후속 논문 중에서는 U-Net 구조가 detail을 더 살려준다고 말하는 것도 있어서 상황에 따라 다른듯하다.

User guided image inpainting

논문에서 제안한 방법론은 모두 설명했는데 뭔가 찝찝한 것이 하나 남아있을 수 있다. 바로 user-guidance 부분인데 분명 이를 위해선 추가적인 제약 조건을 걸거나 manually 생성한 GT로 학습한다던지 해야 할 것 같은데 이 논문에서는 이를 위해 아무것도 제안하지 않는다. 다만, 여러 실험을 해보았으나 그냥 reconstruction loss와 GAN loss만 사용했을 때랑 별반 차이가 없다고 한다. 그저 user-guidance는 추가적인 channel로써 입력하게 된다.

다음은 user-guided inpainting 결과 이미지다.

추가적으로, 아래 이미지는 Partial convolution과 비교한 결과이다.


댓글