논문 읽기/Segmentation

[논문 읽기] DeConvNet(2015) 리뷰, Learning Deconvolution Network for Semantic Segmentation

AI 꿈나무 2021. 4. 1. 16:12
반응형

 이번에 읽어볼 논문은 DeepConvNet, 'Learning Deconvolution Network for Semantic Segmentation' 입니다.

 

 DeepConvNet은 Convolution network와 Deconvolution network, 두 파트로 구성되어 있습니다. Convolution network로 feature을 추출하고, Deconvolution network로 feature에 대한 object segmentation을 생성합니다. 이 DeepConvNet은 FCN의 한계를 개선하기 위해 제안되었는데요. 우선 FCN의 한계를 먼저 살펴보겠습니다.

 

Limitations of FCN

 FCN는 심각한 단점을 갖고 있습니다.

 

첫 번째는 fixed-size receptive field 때문에, 신경망이 오직 하나의 scale 이미지만 다를 수 있습니다. 그러므로 receptive field보다 작거나 큰 객체는 mislabeled 되거나, 잘개 쪼개집니다. 위 그림에서 (a)를 보면, 큰 객체가 작은 객체 여러개로 분해된 것을 확인할 수 있습니다. 또한 작은 객체는 무시되거나 배경으로 감시될 수 있습니다. 위 그림에서 (b)를 보면 작은 객체가 거의 검출이 안되었네요. 이 문제를 해결하기 위해 FCN은 skip architecture를 제안했지만, 근본적인 해결책은 아니었습니다.

 

 두 번째는 deconvolution 과정이 간단합니다. FCN에서 upsampling을 위해 bilinear interpolation을 사용합니다. 이러한 upsampling은 좋은 성능를 얻기가 어렵습니다. 성능을 개선하기 위해 CRF을 사용하지만, 논문에서 bilinear interpolation을 통한 upsampling을 단점으로 지목하고 있습니다.

 

 이러한 한계를 개선하기 위해 제안된 것이 DeepConvNet 입니다.

 

DeepConvNet

 DeepConvNet은 convolution, deconvolution 두 파트로 구성됩니다. convolution은 입력 이미지에서 특징을 추출하기 위해 사용하고, deconvolution은 convolution이 추출한 특징에서 segmentation을 수행합니다. convolution은 VGG16에서 마지막 classification layer를 제거하여 사용합니다. 그리고 class-specific projection을 위해 2개의 fullt connected layer을 추가합니다. deconvolution network는 upooling, deconvolution 연산을 수행합니다. convolution은 피쳐맵의 크기를 축소하고, deconvolution은 피쳐맵 크기를 입력 이미지 크기로 확대합니다.

 

 deconvolution을 구성하는 unpooling과 deconvolution 연산을 살펴보겠습니다.

 

(1) unpooling

출처: https://analysisbugs.tistory.com/104

 max pooling 연산을 할 때, max value의 index를 저장합니다. 그리고, unpooling을 할때, 저장한 index에 max value를 복원합니다.

 

(2) Deconvolution

출처: https://realblack0.github.io/2020/05/11/transpose-convolution.html

 unpooling 과정을 거치면 피쳐맵의 크기가 확대되고, sparse한 값(대부분이 0)을 갖습니다. deconvolution 연산을 통해 dense 피쳐맵을 만듭니다. 위 그림은 deconvolution 연산을 나타냅니다. 입력값을 3x3 영역에 배치합니다. 그리고, 다음 입력값도 3x3 영역에 배치합니다. 겹치는 부분은 더하여 deconvolution 연산을 수행합니다.

 

 

 DeconvNet의 전체 구조입니다.

 

Analysis of Deconvolution Network

 

 위 그림은 deconvolution network의 layer를 시각화한 그림입니다. (c)는 28x28 unpooling layer의 출력값입니다. sparse한 mask를 생성한 것을 확인할 수 있습니다. (d)는 28x28 deconvolutional layer입니다. unpooling layer의 출력값을 dense 하게 만들었네요. (j)는 224x224 deconvolution layer입니다. deconvolution layer가 깊어질 수록 세밀한 mask를 생성하는 모습을 확인할 수 있습니다.

 

 FCN과 비교한 결과입니다.

 


참고 자료

[1] arxiv.org/abs/1505.04366

[2] realblack0.github.io/2020/05/11/transpose-convolution.html

[3] analysisbugs.tistory.com/104

반응형