본문 바로가기

딥러닝/Semantic Segmentation

DeepLabv3+ 논문 리뷰

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation 논문 (DeepLabv3+)를 리뷰해보려고 한다.

 

18년도에 나온 논문으로 3232회 인용되었다. 구조적으로 17년도에 발표된 DeepLabv3에 decoder 모듈을 더한 것이 특징이다.

 

Semantic Segmentation을 하기 위해서는 두가지 방법이 있다.

1. Spatial pyramid pooling 모듈 사용 (multi-scale contextual 정보 추출 가능)

2. Encoder-decoder 구조 (점진적으로 공간 정보를 확장시키기 때문에 디테일한 경계 얻을 수 있음)

일반적으로 이미지가 DCNN을 거쳤을 때 마지막 피쳐맵에 풍부한 semantic 정보가 encode되는데, convolution의 stride나 pooling으로 인해 경계와 같은 디테일이 사라지게 된다. 그 대신에 atrous convolution을 사용하면, 보다 dense한 피쳐맵을 취득할 수 있으므로 앞에서 언급한 문제가 완화 가능하다. 그러나, 피쳐맵의 크기를 줄이지 않기 때문에 GPU 메모리와 관련한 문제가 생기게 된다.

반면에 encoder-decorder 모델은 dilated된 피쳐가 없기 때문에 encoder path가 빠르고, decoder 단에서 점진적으로 크기를 복원하기 때문에 디테일을 잘 잡을 수 있다.

 

이 논문에서는 위 두 가지의 장점을 합치는 아이디어를 사용하였다. 크게는 encoder-decoder 구조를 사용하였고, encoder에서 atrous spatial pyramid pooling 모듈을 사용해서 multi-scale 문맥정보를 통합할 수 있도록 했다. 

더 자세한 구조는 아래 그림과 같다. Deeplabv3에 간단하지만 효과적인 Decoder 모듈을 더함으로써 경계선 부분의 정확도를 향상시켰다.

더해진 decoder 모듈의 실행 순서는 다음과 같다.

1. Deeplabv3로 얻은 encoder features는 encoder features는 1차적으로 4배 upsampling 되고, 백본에서 상응하는 low-level features와 concat된다.

(이때, 1x1 convolution을 사용해서 백본의 low-level features의 channel 개수를 줄인 뒤 concat함으로써 채널이 적은 encoder features의 중요도가 줄어들지 않도록 해준다)

2. Concat 이후에 3x3 conv를 통해 features를 정교화시켜준 뒤, 2차적으로 4배 bilinear upsampling을 시켜줘서 크기를 input과 맞춰준다.

 

 

 

이 외에도 컨트리뷰션은 다음과 같다.

- Xception 모델을 DCNN으로 사용했다.

- ASPP와 decoder 모듈에 depthwise atrous saparable convolution을 사용했다.

 

그 결과, PASCAL VOC 2012와 Cityscapes 데이터셋에서 후처리 과정 없이 SOTA를 달성했다.