네이버 부스트캠프 학습 정리/14~16주차

[Semantic Segmentation] After FCN

AI쟁이J 2023. 6. 20. 01:54

FCN의 한계

1. 객체의 크기가 크거나 작은 경우 예측을 잘 하지 못한다.

2. Object의 디테일한 모습이 사라지는 문제가 발생한다.

 

Decoder을 개선한 모델

DeconvNet

Encoder와 Decoder를 대칭 형태로 만들었으며 backbone으로 VGG16을 사용한다.

Encoder의 Conv에서 ReLU, Pooling이 일어나며 Deconvolutional Network는 Unpooling, deconvolution, ReLU로 이루어진다.

deconvolution은 FCN에 나왔던 것처럼 tranposed convolution을 통해 진행되며, unpooling은 그림과 같이 pooling의 반대 연산을 수행한다. 

pooling 연산은 노이즈를 제거하지만 정보가 손실되는 문제가 생긴다.

따라서 unpooling을 통해 pooling에서 지워지는 경계에 정보를 기록했다가 복원한다.

이 과정에서 sparse한 activation map을 가지게 되는데, 이 부분은 tranposed convolution을 통해 채울 수 있다.

 

b, d, f, h, j같은 deconvolution의 결과는 dense하며 c, e, g, i와 같은 unpooling의 결과는 sparse하다. 따라서 unpooling을 통해 디테일한 부분을 잡아내며 이 saprse한 부분의 빈 구조는 deconvolution의 결과로 채우는 방식이다.

deconvolution 과정에서는 low-layer에서는 직선, 곡선, 색상 등의 낮은 local feature를 잡아내며

high-layer에서는 복잡하며 포괄적이고 디테일한 global feature를 잡아내는 모습을 보인다.

 

SegNet

자율주행 분야에서 차량, 도로, 차선, 건물, 보도, 하늘등의 class에 대해 빠르고 정확하게 구분하기 위함을 목적으로 만들어진 모델.

DeconvNet과 유사한 구조로 Encoder/Decoder이 대칭으로 이루어져 있는 구조이다.

하지만 FC layer를 삭제하고, DeconvNet 중간의 1x1 convolution을 제거해 학습 및 추론 시간을 감소시켜 더욱 빠른 분류를 목적으로 만들어진 모델이다.

 

Skip Connection을 적용한 모델

FC DenseNet

 

DenseNet에서 이전 layer들의 output을 일부 layer를 건너 뛴 후의 layer에 입력으로 제공해 이전 layer들의 feature map 정보들을 넘겨주는 방법을 사용했는데, 이를 적용한 모델이다.

DB(Dense Block)을 중간에 삽입해 FCN에서는 skip connection에서 sum 연산을 사용했다면, 이 모델에서는 Concat 형식으로 적용한다.

 

Receptive Field를 확장시킨 모델

DeepLab v1

각자 다른 부분을 바라보는 환경에서 서로 다른 receptive field를 가지는 segmentation을 진행한다면?

즉 B를 통해 A의 task를 진행하면 receptive field가 작기 때문에 새에 대한 분류가 정확하기 어렵다.

 

receptive field?

10x10 input 이미지에서 Convolution 연산을 수행해 6x6 feature map을 생성했다면 이 feature map의 한 칸이 바라보는 input에서의 이미지는 3x3 연산이 진행되기 전 5x5의 영역이다. 따라서 final feature map의 receptive field는 5x5 영역이다.

여기서 만약 max pooling을 conv 연산 사이에 진행했다면, max pooling 과정으로 feature map이 더 작아지는 반면 2x2의 final feature map에서 한 칸이 바라보는 input 이미지의 영역은 8x8로 더 큰 receptive field를 가진다. 즉 conv 연산 사이에 max pooling을 반복하면 효율적으로 receptive field를 넓힐 수 있다.

하지만, resolution의 측면으로는 2x2 feature로 줄어들기 때문에 low resolution을 가지게 되는 문제가 생긴다.

 

Dilated Convolution

따라서 이 image의 크기를 적게 줄이면서 (low resolution을 방지하면서) 효율적으로 receptive field를 넓히는 방법이

Dilated Convolution이다.

내부의 사이 값을 0으로 채운 연산을 통해 더 큰 해상도의 면을 바라볼 수 있게 하는 convolution 연산이다.

일반적인 conv 연산에 비해 영역이 더 큰 것을 볼 수 있다.

 

또한, Bilinear Interpolation을 통한 up-sampling역시 진행한다.

feature map 사이의 공간이 0으로 비어 있는 경우, 이 사이에 보간법을 사용해 값을 채우는 테크닉 역시 사용한다.

 

CRF

Dense-CRF를 사용해 더 정교하게 만드는 기법을 사용한다.

예를 들어

다음과 같은 이미지에 대한 분류 결과가 있는 경우에서

이 이미지와 같은 segmentation 확률 값들을 얻는다. 그리고 이 확률 및 이미지를 CRF에 입력해

- 색상이 유사한 픽셀이 가까이 위치하면 같은 범주에 속함

- 색상이 유사해도 픽셀의 거리가 멀다면 같은 범주에 속하지 않음

의 알고리즘을 여러 번 반복한다.

따라서 이 Fully Connected CRF가 반복되며 점점 객체의 영역이 뚜렷해진다.

이후 이 과정을 모든 카테고리에 대해 실행 후, 최종 결과에서는 가장 높은 확률을 갖는 카테고리로 종합한다.

따라서 DeepLab V1의 최종 과정은 다음과 같다.

 

DilatedNet

Dilate Convolution을 효율적으로 진행해 DeepLab과 유사한 방식이지만 조금 다른 모델이다.

deeplabV1과 같은 구조에서 max pool의 크기와 conv4, conv5에서 maxpool을 진행하지 않는 부분이 다르며 front-end 모듈로 진행한다.

 

'네이버 부스트캠프 학습 정리 > 14~16주차' 카테고리의 다른 글

[Semantic Segmentation] FCN  (0) 2023.06.16