-
[Inpainting] Context Encoder(CE) 원리Deep-Learning/[Vision] 논문 리뷰 2020. 5. 26. 01:44
논문 : arxiv.org/pdf/1604.07379.pdf
1. Image inpainting이란?
영상 인페인팅(image inpainting)은 영상에서 훼손된 부분을 복원하거나 영상 내의 불필요한 문자나 특정 물체를 제거한 후 삭제된 영역을 자연스럽게 채우기 위해 널리 사용되는 기법이다. 쉽게 말해, 이미지의 일부분이 누락되어있어도 사람은 비워져있는 부분을 유추할 수 있기에 이를 아래 사진과 같이 "딥러닝 기술을 응용하여 복원하겠다." 라는 의미이다.
2. Image inpainting 기법 - CE(Context Encoder)
1) Intro(조금 더 자세히)
논문에서 제안하는 context encoder는 context 기반의 픽셀 예측을 통해 비지도 학습된 이미지 학습 알고리즘이다. Auto encoder와 유사한 형태이며, 이는 주변 환경에 조건화된 임의 영상 영역의 컨텐츠를 생성하도록 훈련된 복잡한 신경 네트워크이다.
[Auto encoder의 개념] Auto encoder는 아래의 그림과 같이 단순히 입력을 출력으로 복사하는 신경망이다. 하지만, 간단한 신경망과 달리 네트워크에 여러가지 제약을 가함으로써 어려운 신경망으로 만드는 것을 의미한다. 예를 들어, 아래의 그림처럼 hidden layer의 뉴런 수를 input layer보다 작게하여 데이터를 압축한다거나, 입력 데이터에 노이즈를 추가한 후 원본 입력을 복원할 수 있도록 네트워크를 학습시키는 등 다양한 Auto encoder가 있다. 이러한 제약을 둠으로써 Auto encoder가 단순히 입력을 바로 출력으로 복사하지 못하도록 방지하며, 데이터를 효율적으로 표현하는 방법을 학습하도록 제어한다.
Auto encoder는 위의 그림과 같이 인코더 부분과 디코더, 두 개의 부분으로 구성되어 있다.
- Encoder의 역할 : 인지 네트워크(recognition network)라고도 하며, 입력을 내부 표현으로 변환한다.
- Decoder의 역할 : 생성 네트워크(generative nework)라고도 하며, 내부 표현을 출력으로 변환한다.
위 그림의 오토인토더는 히든 레이어의 뉴런이 입력층보다 작으므로 입력이 저차원으로 표현되는데, 이러한 오토인코더를 Undercomplete Autoencoder라고 한다. Undercomplete Autoencoder는 저차원을 가지는 히든 레이어에 의해 입력을 그대로 출력으로 복사할 수 없기 때문에, 출력이 입력과 같은 것을 출력하기 위해 학습해야 한다. 이러한 학습을 통해 Undercomplete 오토인코더는 입력 데이터에서 가장 중요한 특성(feature)을 학습하도록 만든다.
[CE에서 말하는 Auto encoder로 image inpainting을 하면 발생하는 문제점] Auto encoder는 input image를 이용하여 장면의 compact한 표현을 얻기 위한 목적으로 저차원의 ‘bottleneck’ 레이어를 통과한 후 재구성한다.
하지만 이 feature respresentation은 늘 의미있는 표현을 학습하지 않고 영상 내용을 압축할수 도 있는 한계를 가지고 있다. 누락된 부분을 채우는 작업은 전체 이미지의 내용을 이해하고 누락된 부분에 대해서 그럴듯한 가설을 만들어야한다.
이를 위해 CE를 훈련할 때, a standard pixel-wise reconstruction loss(표준 픽셀 단위 재구성 손실)와 a reconstruction plus an adversarial loss(재구성 및 상대적 손실)을 모두 실험했다.
CE의 loss인 후자의 경우 출력의 여러 모드를 더 잘 처리할 수 있기 때문에 훨씬 더 shape한 결과를 출력한다. 또한, CE는 외형뿐아니라 시각적 구조의 의미도 학습한다는 것을 발견하게 되었으며, CNN을 통해 Semantic inpainting 작업을 할 수 있다는 것도 발견하게 되었다.
[Denoising autoencoder의 개념] Denoising autoencoder는 복원 능력을 더 강화하기 위해 기본적인 Auto encoder의 학습 방법을 조금 변형시킨 것이다. Denosing autoencoder의 개념은 아래의 그림과 같다. 먼저 잡음이 없는 원영상 x에 잡음을 가하여 잡음이 있는 영상 ~x를 만들어 낸다. 이 때, 잡음을 가하는 방법은 여러가지 방식이 있을 수 있지만, 논문에서는 아래 그림처럼 잡음이 위치해 있는 픽셀값을 모두 "0"으로 만들었다.
그 후, 기본 autoencoder에 원래 영상 x가 아니라 잡음이 있는 영상 ~x를 입력으로 가하고, 출력 z가 잡음이 있는 영상 ~x가 아니라 x와 가까워지도록 학습시킨다.
[CE에서 말하는 Denoising autoencoders로 image inpainting을 하면 발생하는 문제점] Denoising autoencoders는 입력 이미지를 손상시키고 네트워크에서 손상을 복구하도록 요구함으로써 이 문제를 해결한다.
하지만, 이러한 corruption preocess(손상 프로세스)에는 매우 지역화 되어 있고 low-level 상태이며, 원상태로 복구하기 위해 많은 semantic한 정보를 요구하지 않는다.
이와 대조적으로, CE는 훨씬 더 어려운 작업 즉, 근처 픽셀에서 "힌트"를 얻을 수 없는 이미지의 큰 누락된 영역을 채울 수 있다. 이는 이미지에 대한 훨씬 더 깊은 의미적 이해와 높은 수준의 특징을 합치는 기술을 요구하며, 이는 문맥이 주어진 단어를 예측하여 자연어 문장으로부터 단어 표현을 배우는 word2vec와 유사하다.
[CE의 구성] Context encoder는 Auto encoder와 같이 Encoder와 Decoder로 구성이 되어있으며, Encoder는 영역이 누락된 입력 이미지의 latent feature representation을 생성하며, Decoder는 feature representation을 사용하여 누락된 이미지의 컨텐츠를 생성하게 된다(누락된 영역을 복원한다는 의미).
* latent feature representation이란, 직역하면 "잠재적인 기능 표현"인데 내가 생각해 본 의미는 "컨볼루션을 거쳐 나온 중간 결과"를 의미하는 것 같다. 보통 CNN 계열의 모델에서 Feature map은 컨볼루션의 풀링 단에서 나온 모든 결과를 의미하는데 여기서 의미하는 feature는 decoder로 넣기 직전 상태의 encoder에서 나온 결과 이다. letent representation은 latent code라고도 불리며, 사진으로 표현하면 아래와 같다.
Autoencoder와 동일하게 비지도학습으로 진행되고, 해당 이슈를 해결하기 위해 모델이 이미지의 컨텐츠를 이해하는 것 뿐만이 아닌 사라진 부분에 대해서 그럴듯한 가설을 생성해야한다. 하지만, 이 부분은 누락된 영역을 채움과 동시에 주어진 맥락과 일관성을 유지하는 방법이 여러가지가 있기 때문에 multi-modal(다중 모드)이다.
위에서 언급한 이슈(논문에서는 burden이라고 언급)를 CE의 Encoder와 Decoder를 공동으로 훈련하여 reconstruction loss와 adversarial loss를 최소화함으로써 제거하고자 한다. L2라 언급하는 reconstruction loss는 누락된 영역의 전체 구조를 맥락과 관련하여 포착하며, 반면에 adversarial loss는 분포에서 particular mode(특정 모드)를 선택하는 효과가 있다.
평가는 Encoder와 Decoder를 독립적으로 진행한다.
i) Encoder는 image patch의 context만 encoding하고 resulting feature을 사용하여 데이터 세트에서 가장 가까운 인접 context를 검색하면 원래 patch와 의미적으로 유사한 patch가 생성된다. 또한, 다양한 이미지 이해 작업을 위해 인코더를 fine-tuning하여 학습된 feature representation의 품질을 검증한다.
ii) Decoder는 CE가 누락된 영역을 채울 수 있다는 것을 보여준다. 실제로, semantic hole-filling(큰 누락 영역)에 대해 합리적인 결과를 제공할 수 있는 최초의 parametric inpainting algorithm이다.
2) Context encoders for image generation
모델에 대한 설명은 먼저 일반적인 아키텍쳐의 개요를 설명한 후, 학습 절차에 대한 세부 정보를 제공하고 이미지 영역 제거를 위한 다양한 전략을 제시한다.
[Encoder-decoder pipeline] 위에서 언급한 것과 같이 CE의 전체적인 구조는 간단한 Encoder-Decoder pipline이다. Ecnoder는 영역이 누락된 입력 이미지를 가져와 latent feature representation(잠재적인 기능 표현)을 생성하며, Decoder는 feature representation을 사용하여 누락된 이미지 컨텐츠를 생성한다. 이렇게 구축한 Encoder와 Decoder는 채널 단위의 Fully conneted layer로 연결을 하는데, 이는 Decoder의 각 단위가 전체 이미지 컨텐츠에 대해 추론할 수 있게 한다.
[Encoder] Encoder의 역할은 위의 그림처럼 없어진 부분을 가진 입력 이미지를 latent vector로 만드는 것이다. 이 Encoder는 AlexNet에서 파생되었으며, 내용은 하단과 같다.
i) 227*227의 입력 이미지가 주어지면, AlexNet의 5개의 conv + pooling layers을 사용하여 6*6*256의 feature representation을 계산한다.
ii) AlexNet과 차별을 둔 점은 기존 AlexNet은 ImageNet으로 Classification 교육을 받았으나, CE는 Pre-train 모델을 사용하지 않고 처음부터 무작위로 초기화된 가중치로 context 예측에 초점을 두어 훈련하였다는 것이다.
그러나, Encoder가 Convoultion layer로 제한되어 있는 경우 (Feature map은 말 그대로 특징만 추출했으므로 모든 위치를 직접 연결하지 않기에)정보가 Feature map의 한 모서리에서 다른 모서리로 전파할 수 있는 방법이 없다. 따라서 이 모든 정보 전파를 fully conneted로 처리한다.
[Channel-wise Fully Conneted Layer] 위에서 언급한대로 CE는 Encoder의 정보 전파를 위해 fully conneted layer를 사용하는데 Encoder와 Decoder를 완전히 연결하면 parameter의 수가 훈련이 어려울 정도로 증가할 수 있다. 이에 채널 방식의 Fully Conneted layer를 구성하여 Decoder에 연결한다.
채널 방식의 Fully conneted layer는 입력 레이어에 크기가 n*n인 feature map이 m개 있으면 n*n 차원의 m개 feature map을 출력하여 Decoder에 전달한다. 이 때, 각 feature map 마다 활성함수를 적용하며 전달하게 된다. (이 layer의 특징은 일반적인 fully conneted layer와 달리 다른 feature map을 연결하는 parameter가 존재하지 않으며 feature map 내에서만 정보를 전파한다.)
[Decoder] Decoder는 전달받은 feature map을 사용하여 이미지의 픽셀을 생성한다. 이는 ReLU 활성화를 거친 학습된 필터가 있는 5개의 up-convolutional layer로 이루어져 있으며, up-convolutional layer는 고해상도 이미지를 생성하는 단순한 컨벌루션이다.
3) Loss Function
Decoder까지 거쳐 나온 값을 GT(Groung truth)로 회귀함으로써 CE를 훈련시켜야 한다. 그러나,
'Deep-Learning > [Vision] 논문 리뷰' 카테고리의 다른 글
[GNN] NGNN 논문 리뷰 (0) 2021.04.05 [GAN] Pixel-Level Domain Transfer(DTGAN) 논문 리뷰 (0) 2020.08.06 [Semantic Segmentation] DeepLab v3+ 원리 (1) 2020.02.05 [Semantic Segmentation] SegNet 원리 (2) 2020.02.03 [Semantic Segmentation] U-Net 원리 (1) 2020.01.31