논문 읽기/Segmentation

[논문 읽기] FCN(2015) 리뷰, Fully Convolutional Networks for Semantic Segmentation

AI 꿈나무 2021. 3. 30. 18:54
반응형

 공부 목적으로 FCN 논문을 읽어보았습니다.

Abstract

 FCN은 end-to-end, pixels-to-pixels 학습이 되는 convolutional network입니다. 핵심 아이디어는 임의의 크기로 입력 값을 받고, 그에 해당하는 출력값을 생성하는 'fully convolutional network' 입니다. AlexNet, GoogLeNet, VGGnet과 같은 classification 신경망을 사용하고, 이들을 segmentation task에 맞게 fine-tunning 합니다. 그리고나서 shallow의 정보와 deep의 정보를 결합하는 새로운 구조를 정의합니다.

 

 

1. Introduction

 Semantic segmentation은 coarse부터 fine까지 inference를 통해 모든 픽셀에 대해 예측을 생성하는 것입니다. 이전까지 semantic segmentation에 사용했던 convnet은 각 픽셀에 레이블링을 했습니다. 하지만 이 방법은 해결해야할 단점이 있습니다.  FCN(fully convolutional network)는 end-to-end, pixels-to-pixels로 학습합니다. 신경망에 있는 upsampling layer는 subsampled pooling과 함께, pixelwise 예측을 가능하게 합니다. 

 

2. Related work

 생략

 

3. Fully convolutional networks

 FCN은 임의의 크기를 가진 입력값을 취하고, 그에 해당하는 크기의 출력값을 생성합니다. classification 신경망을 coarse output을 생성하는 fully convolutional 신경망으로 어떻게 전환하는지 설명합니다. pixelwise prediction을 위해, 이 coarse output을 pixel로 연결해야 합니다. upsampling을 위한 deconvolution layer를 소개합니다.

3.1 Adapting classifiers for dense prediction

 LeNet, AlexNet과 같은 recognition 신경망은 fixed-sized 입력값을 받아서 공간정보가 없는 출력값을 생성합니다. 이러한 신경망의 fully connected layers는 공간 정보를 제거합니다. 하지만 이 fully connected layers는 전체 입력 값을 다루는 kernel을 가진 convolution으로 볼 수 있습니다. 이것을 fully convolutional 신경망으로 전환하면, classification 신경망은 임의의 크기의 입력값을 받아서 heat map을 생성할 수 있습니다. 

3.2 Shift-and-stich is filter rarefaction

 입력값이 conv + pooling을 통과하면 크기가 감소합니다. 이를 복원하는 방법으로 shift-and-stich 방법을 검토하는데, upsampling이 더 효과적으로 판단하여 shift-and-stich 방방법은 사용하지 않습니다.

3.3 Upsampling is backwards strided convolution

 couarse output을 dense pixel로 연결하는 또다른 방법은 보간법(interpolation) 입니다. upsampling을 위해 bilinear interpolation을 사용합니다.

3.4 Patchwise training is loss sampling

 patchwise training과 fully convolutional training을 비교해서 설명합니다. patchwise training은 전체 이미지에서 crop된 부분을 이용하는 것입니다. 반면에 fully convolutional training은 전체 이미지를 입력으로 받아 학습하는 것입니다. pathchwise training을 사용하면, cass imbalance 문제가 발생하고, fully convolutional training이 속도와 효율성 면에서 더 좋다고 합니다.

 

4. Segmentation Architecture

 classification 신경망을 FCN으로 변경하고, upsampling과 pixelwise loss를 위해 구조를 수정합니다. 그리고 prediction을 개선하기 위해 coarse, semantic, local, appearance 정보를 결합하는 skip architecture을 제안합니다. per-pixel multinimial logistic loss로 학습하고, mean pixel intersection over union의 표준 metric으로 평가합니다. 학습은 ground truth에서 벗어나는 pixel을 무시합니다.

4.1 From classifier to dense FCN

 backbone은 VGG-16을 사용합니다. 그리고, 마지막 classifier layer를 버리고, 이것을 fully convolution으로 변경합니다. 원래 이미지 크기로 맞춰주기 위해 coarse output에 upsampling을 수행하는 deconvolution layer 이후의 coarse output locater에 21 차원을 가진 1x1 convolution을 추가합니다. 21차원은 배경을 포함한 PASCAL classes를 예측합니다. 

 

4.2 Combining what and where

 segmentation을 위한 새로운 fully convolutional network를 정의합니다. layer를 결합하고 출력값의 공간적인 정보를 개선합니다.

 

 fully convolutionalized classifiers는 segmentation을 위해 fintuning할 수 있습니다. 높은 standard metric을 얻더라도, 이 출력값은 coarse를 만족하지 않습니다. 아래 그림에서 FCN-32s를 보면, 픽셀들이 뭉쳐져 있는 것을 확인할 수 있습니다. 마지막 prediction 레이어에서 32 pixel stride은 upsampled output에서의 scale을 제한합니다.

 이를 해결하기 위해서, final prediction layer를 lower layer와 결합하는 link를 추가합니다. lower layer를 higher layer와 연결합니다. fine layer를 coarse layer와 연결하는 것은 model이 local predictions을 예측하게 합니다.

 

 16 pixel stride layer로부터 예측함으로써, output stride를 반으로 분할합니다. 그리고 추가적인 class prediction을 생성하기 위해 pool4의 위에 1x1 convolution layer를 추가합니다. 이 출력값을 stride32인 conv7에서 계산된 예측값을 x2 upsampling 한뒤에 더합니다. 마지막으로 입력 이미지의 크기로 upsampling 합니다. 이것을 FCN-16s라고 합니다. 다시 이것을 x2 upsample 한뒤에 pool3의 출력값과 더해주면 FCN-8s가 됩니다.

 

반응형