본문 바로가기

딥러닝/Semantic Segmentation

(풀잎스쿨 14기) Deeplab v2 논문 리뷰

 

본 포스팅은 모두의연구소(home.modulabs.co.kr) 풀잎스쿨에서 진행된 'Semantic Segmentation 논문으로 입문하기' 과정 내용을 공유 및 정리한 자료입니다.

 

Deeplab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs 논문 (Deeplabv2)을 리뷰해보려고 한다.

 

7167회 인용된 논문으로 14년도에 FCN, Deeplabv1가 나오고 15년도에 DilatedNet이 나온 이후 발표된 논문이다. Deeplabv1이 DCNN 부분에서 atrous convolution을 사용하고, CRF를 사용한 것에 집중했다면, Deeplabv2는 atrous convolution을 사용한 DCNN 부분에 다양한 dilation rate를 사용한 atrous convolution을 하는 ASPP 모듈을 사용하여 multi-scale object를 segment할 수 있음을 강조했다. 

 

 

Deeplabv2의 기본적인 구조는 다음과 같다.

 

 

입력 이미지가 들어왔을 때 DCNN으로 만든 score map을 Bi-linear Interpolation을 통해 키우고 CRF로 디테일을 살린다는 면에서 Deeplabv1과 동일하다.

 

여기서 resolution이 줄어들어 생기는 문제를 해결하기 위해 DCNN 내 몇 pooling layer를 없애고, atrous convolution이 사용되었다. 

 

위 그림에서도 알 수 있듯, stride=2로 둬서 downsampling이 이루어진 경우 upsampling을 했을 때 coarse한 score map이 생기는 반면, atrous convolution을 거쳤을 때엔 resolution이 줄어들지 않아 upsampling이 필요없으며 dense한 score map이 생김을 알 수 있다.

 

v1과 v2가 atrous convolution이 사용된 DCNN이 사용되는 점에서 동일하나, 차이점이 있다면 뒤에 ASPP 모듈이 붙는다는 것이다. 

 

ASPP (Atrous Spatial Pyramid Pooling) 모듈은 위와 같이 생겼다. 주황색 픽셀을 분류하기 위해 다양한 dilation rate를 이용해서 나온 다양한 스케일의 피쳐를 사용한다.

 

 

전체적인 구조를 보면, Deeplab v1(왼쪽)에서 VGG16의 pool5 뒤로 rate=12를 가진 하나의 3x3 convolution layer를 거친 뒤 1x1 convolution으로 classify를 했다면, Deeplab v2(오른쪽, DeepLab-ASPP)에서는 네 개 rate(6, 12 ,18, 24)로 convolution layer를 병렬로 돌린 것을 sum하여 최종적인 결과를 얻어낸다.

 

그 결과, PASCAL VOC 2012에서 79.7% mIOU를 달성하여 SOTA 알고리즘이 되었고, PASCAL-Context, PASCAL-Person-Part, and Cityscapes에서도 좋은 결과를 내었다.