Fully Convolutional Networks for Semantic Segmentation 리뷰

2023. 5. 1. 08:47CNN에 대한 정리

[논문 링크]

오늘은 FCN에 대해 설명할려고 합니다! 

 

우선 제목 처럼 Semantic Segmentation 문제를 위해 제안된 모델입니다.

 

위 사진은 입력 이미지에 대해 픽셀단위로 배경 및 각 개체의 클래스를 분할하는 동시에 예측합니다.

 

우선 FCN은 Semantic Segmentation 모델을 위해 기존에 이미지 분류에서 우수한 성능을 보인 CNN 기반 모델(AlexNet, VGG16, GoogLeNet)을 목적에 맞춰 변형을 했습니다.

Semantic Segmentation

Convolutionalization

Convolutionalization(컨볼루션화)이라는 의미를 이해하기 위해서는 기존의 이미지 분류 모델들을 먼저 알아야 합니다.

 

Alex Net 구조

 

 

 

 

GoogLeNet 구조
VGG16 구조

 

Image classification 모델들은 기본적으로 내부 구조와 관계없이 모델의 근본적인 목표를 위해 출력층이 Fully-connected layer로 구성되어 있습니다.

 

이러한 구성은 네트워크의 입력층에서 중간부분까지 ConvNet을 이용하여 영상의 특징들을 추출하고 해당 특징들을 출력층 부분에서 FC를 이용해 이미지를 분류하기 위해서 입니다.

 

Semantic Segmentation 관점에서는 FC layer가 갖는 한계점이 있습니다. 

 

1. 위치에 대한 정보가 사라집니다.

 

fully-connected layer 연산 이후 Receptive field 개념이 사라집니다.

 

 

2. 입력 이미지 크기가 고정되버립니다.

 

Dense layer에 가중치 개수가 고정되어 있기 때문에 바로 앞 레이어의 Feature Map의 크기도 고정됩니다.

 

그런 이유로 연쇄적으로 각 레이어의 Feature Map 크기와 Input Image 크기 역시 고정되어 버립니다.

 

하지만 Segmentation의 목적은 원본 이미지의 각 픽셀에 대해 클래스를 구분하고 인스턴스 및 배경을 분할하는 것으로 위치 정보가 매우 중요합니다. 

 

이러한 fc-layer의 한계를 보완하기 위해 모든 fc-layer를 Conv-layer로 대체하는 방법을 사용했습니다.(밑 사진 참고)

 

 

 

 

Coarse map에서 Dense map을 얻는 몇 가지 방법이 있습니다. 

 

Interpolation: 데이터를 처리하거나 분석할 때, 데이터의 빠진 부분을 예측하는 기술입니다.

Deconvolution: 이미지 처리 분야에서 사용되는 기술로, 합성곱(Convolution) 연산을 역으로 수행하여 이미지를 재구성하는 기술입니다.

Unpooling: pooling 연산으로 축소된 이미지를 다시 확대하는 기술입니다.

Shift and stitch: 컴퓨터 비전 분야에서 이미지를 처리하는 기술 중 하나입니다. 이 기술은 이미지를 여러 부분으로 나누어서 각 부분을 이동시키고 이동한 부분들을 다시 합치는 방식으로 이미지를 처리합니다.

 

Pooling을 사용하지 않거나, Pooling의 stride를 줄임으로써 Feature map의 크기가 작아지는 것을 피할 수도 있습니다.

 

이 경우 필터가 더 세밀한 부분을 볼 수는 있지만 Receptive Field가 줄어들어 이미지의 컨텍스트를 놓치게 됩니다.

 

Pooling의 중요한 역할 중 하나는 특징맵의 크기를 줄임으로써 학습 파라미터의 수를 감소시키는 것인데, 이러한 과정이 사라지면 파라미터의 수가 급격히 증가하고 이로인해 더 많은 학습시간을 요구하게 됩니다.

 

 Coarse Feature map을 Dense map으로 Upsampling하는 방법을 고려해야 합니다...

Backwards convolution

Dense prediction을 위한 Upsampling 방법에는 Bilinear interpolation처럼 정해진 방법만 있는 것은 아나가 때문에 Up-sampling도 학습이 가능합니다.

 

Stride가 2이상인 Convolution 연산의 경우 입력 이미지에 대해 크기가 줄어든 특징맵을 출력합니다.

 

이것은 Down-sampling에 해당합니다.

 

 

 

 

Convolution 연산을 반대로 할 경우 자연스럽게 Up-sampling 효과를 볼 수 있습니다.

 

Skip Architecture

 

논문에서는 정확하고 상세한 구분(Segmentation)을 얻기 위해 Deep & Coarse(추상적인) 레이어의 의미적(Semantic) 정보와 Shallow & fine 층의 외관적(appearance) 정보를 결합한 Skip architecture를 정의합니다.

 

 

시각화 모델을 통해 입력 이미지에 대해 얕은 층에서는 주로 직선 및 곡선, 색상 등의 낮은 수준의 특징에 활성화되고, 깊은 층에서는 보다 복잡하고 포괄적인 개체 정보에 활성화된다는 것을 확인합니다.

 

얕은 층에선 local feature를 깊은 층에선 global feature를 감지합니다.

 

이러한 직관을 기반으로 앞에서 구한 Dense map에 얕은 층의 정보를 결합하는 방식으로 Segmentation의 품질을 개선했습니다. 

 

 

 

 

각 Pooling에 Prediction을 위해 추가된 Conv layer의 필터는 0으로, Trainable Backwards convolution은 Bilinear interpolation으로 초기화한 후 학습을 진행했습니다.

 

이러한 Skip Architecture를 통해 다음과 같이 개선된 Segmentation 결과를 얻을 수 있다.

 

 

FCN-32s는 첫 번째로 개발된 FCN 모델이며, 이 모델은 이미지를 32배로 다운샘플링한 후, convolutional layer와 up-sampling layer를 사용하여 원래 입력 이미지의 크기로 다시 업샘플링합니다.

 

FCN-16s는 FCN-32s에서 발전된 모델로, 이미지를 16배로 다운샘플링한 후, skip connection을 사용하여 입력 이미지의 원래 크기로 업샘플링합니다. skip connection은 고해상도 정보를 저해상도 정보와 결합하여 업샘플링을 수행하므로, 분할 결과의 정확도를 높이는 데 유용합니다.

 

FCN-8s는 FCN-16s에서 발전된 모델로, 이미지를 8배로 다운샘플링한 후, 두 개의 skip connection을 사용하여 입력 이미지의 원래 크기로 업샘플링합니다. FCN-8s는 FCN-16s보다 더 많은 skip connection을 사용하기 때문에 고해상도 정보의 비율이 더 높아지고, 더욱 정확한 이미지 분할 결과를 도출합니다.

 

 

이상으로 마치겠습니다! 

 

감사합니다!!