안녕하세요.

오늘은 Semantic Semgentation을 위한 FCN(Fully Convolutional Network) 논문에 대해 리뷰하려고 합니다.

Long, Jonathan, Evan Shelhamer, and Trevor Darrell. "Fully convolutional networks for semantic segmentation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.

(논문 링크: https://arxiv.org/abs/1411.4038)

Keyword: Convolutionalization, Decovolution, Skip-Connection

 

FCN 논문을 리뷰하기 전에 Segmentation과 관련된 용어들을 간단히 알아보겠습니다.

<그림 1> Classficiation, Detection, Segmentation

  • Classification: Input 이미지에 대하여 하나의 label을 예측 ex) AlexNet, ResNet 등
  • Detection(Classification+Localization): Object의 label을 예측하며 위치 정보를 예측 ex) R-CNN 계열, YOLO 등
  • Segmentation: Input 이미지의 모든 픽셀의 label을 예측 ex) FCN, DeepLab, PSP Net 등

<그림 2> Instance Segmentation(좌), Semantic Segmentation(우)

Instance Segmenation

: Input 이미지의 모든 픽셀에 해당하는 class를 예측하여 분류하며 같은 class를 갖는 Instance들을 구분함.

Semantic Segmentation

: Input 이미지의 모든 픽셀에 해당하는 class를 예측하여 분류하며 같은 class를 갖는 Instance들을 구분하지 않음.

 

Semantic Segmenation의 Task를 살펴보면,

<그림 3-1> Semantic Segmentation Task

Input: RGB 이미지(h x w x 3)/흑백 이미지(h x w x 1) → Output: 각 픽셀 별 예측된 class를 나타낸 Segmentation map과 같이 Segmentation map을 획득합니다.

 

 

<그림 3-2> Segmentation Task

Segmentation model들은 DownSampling & UpSampling의 형태를 가집니다.

- DownSampling(Encoder)

: stride를 2 이상 갖는 convolution이나 pooling을 사용하여 dimension을 줄여 적은 메모리로 Convolution을 수행함.

- UpSampling(Decoder)

: Downsampling을 통해서 받은 결과의 dimension을 늘려서 입력과 같은 dimension으로 만듬.

 

☞ 즉, Encoder를 통해서 입력 받은 이미지의 정보를 압축된 벡터에 표현하고 Decoder를 통해서 원하는 결과물의 크기로 만들어 냅니다.

 

따라서, Segmentation map을 통해 획득한 결과물의 대표적인 예는 다음과 같습니다.

<그림 4> Semantic Segmentation 예시

 


저희가 살펴볼 FCN(Fully Convolutional Network) 논문은 Semantic Segmentation의 대표적인 논문입니다.

 

 

기존 Classification을 수행하는 AlexNet, VGG Net 등은 일반적으로 Conv layer와 FC(Fully Connected) layer로 구성되어 있습니다.

 

하지만 여기에 고정된 크기의 입력 이미지를 받고 1차원 벡터로 flatten 하게 되어 receptive field가 공간적 정보를 잃는  FC layer의 한계점이 있습니다.

+) Receptive field: 출력 레이어의 뉴런 하나에 영향을 미치는 입력 뉴런들의 공간 크기

<그림 5> AlexNet Architecture(좌), FC layer에서의 Receptive Field 간단한 예시(우)

 

그래서 이를 극복하기 위해 FC layer를 제거하고 1x1 conv layer를 추가하여 네트워크 구조의 처음부터 끝까지 conv layer로 구성된 FCN(Fully Convolutional Network)가 등장했습니다.

 

FCN Architecture

 

<그림 6> FCN 전체적인 수행 과정

총 8개의 conv layer를 통과한 최종 feature map(prediction)을 Segmentation의 Groundtruth와 비교를 해야 하는데

conv layer들의 pooling을 거치면서 dimension이 준 것을 고려하여 입력 이미지 크기만큼 Upsampling을 수행합니다.

 

FCN 논문에서 사용한 Upsampling은 Bilinear InterpolationDeconvolution이 있습니다.

 

- Bilinear Interpolation(이중 선형 보간법)

먼저 Interpolation(보간)은 주어진 값들 중 사이에 위치한 값을 추정하는 방법입니다.

예로 어떤 사람이 20살일 때 키(x1)와 40살일 때 키(x2)를 보고 30살일 때 키(xi)를 추측하는 것을 들 수 있습니다.(x1<= xi<= x2)

 

Linear Interpolation(선형 보간법)은 주어진 두 점 중 사이에 위치한 값을 추정하기 위하여 직선 거리에 따라 선형적으로 계산하는 방법입니다.

 

간단하게 설명하면, 

x1과 x2 사이의 거리의 비를 합이 1이 되도록 정규화했을 때,

x1에 d2(x에서 x2까지의 거리 값)를 가중치로 곱한 값과 x2에 d1(x1에서 x까지의 거리 값)을 가중치로 곱한 값을 더하면 사이에 위치한 값을 구할 수 있습니다.

<그림 7> Linear Interpolation 예시 및 과정

예를 들어, x1이 0, x2가 5, d1이 0.7인 것을 알고 있다면 그림 7의 식을 통하여 조건을 만족하는 사잇값 3.5를 얻게 됩니다.

<그림 8> Bilinear Interpolation

Bilinear Interpolation(이중 선형 보간법)은 1차원에서의 선형 보간법을 2차원으로 확장한 것입니다.

즉, Linear Inter polation을 x축과 y축으로 두 번 적용하여 값을 유추하는 방법으로 네 개의 인접한 점의 값들과 그에 따른 면적을 가중치로 하여 값을 구합니다.

 

하지만 Bilinear Interpolation으로 성능이 나오지 않아 encoder처럼 convolution 연산으로 필터의 parameter를 학습하듯이 decoder 단에서 dimension을 팽창하는 필터의 parameter를 학습하고자 Deconvolution 연산을 고안했습니다.

 

- Deconvolution(Transpose Convolution)

<그림 9> Convolution과 Deconvolution

Deconvolution은 Convolution과 반대되게 수행하는 프로세스로,

기존 Convolution 연산은 filter(kernel)을 Input에 곱하여 Output울 획득합니다.

 

이 과정을 역연산(Transpose)하면, Convolution을 수행했을 때와 동일한 파라미터(filter size, stride, padding)를 설정하여 filter를 Output에 곱해 Intput을 획득할 수 있습니다.

<그림 10> Convolution process
<그림 11> Deconvolution process

 

<그림 12> FCN-32s model

FCN 논문에서는 32, 16, 8 Upsample stride를 사용했습니다.

만약 stride가 32라면 feature map의 정보 하나를 32개로 늘려 위와 같이 원래의 크기대로 복원시켜 Segmentation 된 output을 획득합니다.

 

 

 

하지만 이 Upsampling을 하고 난 뒤에도 문제점은 존재했습니다.

 

최종 feature map을 입력 이미지 크기만큼 복원시키면 prediction의 경계가 모호해져 여전히 coarse 하게 됩니다.

그래서 이를 해결하기 위해 Skip Connection이 추가되었습니다.

 

- Skip Connection

얕은 lower layer(고해상도)에서는 낮은 수준의 특징을 가진 local feature를,

깊은 deeper layer(저해상도)에서는 복잡하고 포괄적인 global feature를 결합하여

좀 더 정교한 prediction을 하는 과정이 Skip Connection입니다.

 

아래 그림과 함께 자세히 살펴보면

<그림 13> Skip Connection

FCN-32s, FCN-16s, FCN-8s는 FCN이 어떤 Skip connection과 연결되고 몇 배 upsampling 한 지와 관련되어 있습니다.

 

FCN-32s는 pool 5에서 skip connection 없이 해당 feature map에 바로 upsampling을 수행했습니다.

FCN-16s는 pool 5의 feature map을 2배 upsampling 한 다음, pool4의 feature map과 sum 하고 16배 upsampling 하여 원본 크기로 복원합니다.

FCN-8s는 sum 한 feature map 결과를 다시 2배 upsampling 한 다음, pool3의 feature map과 sum 하고 8배 upsampling 하여 원본 크기로 복원합니다.

 

간단하게 정리하면 lower layer에서 획득한 feature map을 그 뒤의 layer는 skip 시키고 결과물 feature map들과 sum 합니다.

 

<그림 14> FCN-ns 성능 비교

그렇게 하면 result table에서 위와 같이 FCN-8s가 가장 좋은 성능을 보이는 것을 확인할 수 있습니다.

 

 

FCN이 Segmentation을 수행하는 과정을 보면 다음과 같습니다.

   1. FCN(Fully Convolutional Network) 통과

      (pixel 단위로 classification을 수행하기 때문에 1x1 conv layer에서 filter를 class 개수만큼 적용)

   2. Upsampling을 통하여 input 크기만큼 resolution 복구

      2-1. Bilinear Interpolation

      2-2. Deconvolution

 

<Reference>

Semantic Segmentation:https://medium.com/hyunjulie/1%ED%8E%B8-semantic-segmentation-%EC%B2%AB%EA%B1%B8%EC%9D%8C-4180367ec9cb

Interpolation: https://m.blog.naver.com/PostView.nhn?blogId=aorigin&logNo=220947541918&proxyReferer=https:%2F%2Fwww.google.com%2F

FCN: gaussian37.github.io/vision-segmentation-fcn/

        peng-hi.tistory.com/5