논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

Problem

Semantic segmentation을 위해서 2개의 DNN 구조를 제안하였다. 하나는 spatial pyramid pooling modue을 사용하는 구조와 encoder-decoder 구조를 사용하는 구조이다. 전자는 pooling에 의해서 풍부한 contextual information을 가지지만 후자는 sharp한 객체 경계를 얻을 수 있다.

DeepLabv3에서는 atrous convolution을 이용하여 여러 스케일의 contextual information을 얻으면서도 dense한 feature map을 얻을 수 있었다. 하지만 GPU 메모리 한계로 완전히 동일한 해상도를 얻지는 못하고 1/4, 또는 1/8 크기로 제한할 수 밖에 없었다. ResNet-101과 같이 거대한 백본의 경우 1/16 크기로 제한할 수밖에 없었으며 계산량 또한 문제가 되었다.

한편 encoder-decoder 구조는 encoder에서는 비교적 계산이 빠르며 decoder에서 점진적으로 객체 경계를 복구하는 구조를 가진다.

Essence

이 논문에서는 두 방식을 장점을 통합하여 encoder-decoder 구조에서 encoder가 multi-scale contextual information을 가지도록 하였다. 즉 encoder는 기존의 DeepLab v3을 이용하여 atrous convolution를 통해 rich semantic information을 생성하고, decoder에서는 효과적인 decoder 모듈을 붙여 객체 경계를 세밀하게 복원한도록 하였다. 이러하 구조를 DeepLabv3+라고 이름 붙였다.

Detail

Encoder-Decoder with Atrous Convolution

Atrous Convolution

기존 DeepLabv3에서 사용하던 것과 동일하다.

Depthwise separable convolution

Depthwise separable convolution은 convolution을 depthwise convolution과 pointwise convolution으로 factorize한 것이다. 논문에서는 atrous convolution에 이를 적용하여 atrous separable convolution으로 적용하였다. 이는 계산복잡도를 줄이면서도 성능은 유지하였다.

DeepLabv3 as encoder

Atrous convolution과 Atrous Spatial Pyramid Pooling 모듈을 사용한 DeepLabv3을 encoder로 사용하였다. DeepLabv3에서 마지막 부분 logits을 계산하기 직전 feature map을 사용하였다.

Proposed decoder

생성된 feature map은 output stride 16을 가진다. 이를 4배로 bilinear interpolation으로 upsampling을 수행한 뒤, encoder내의 같은 해상도를 가지는 low-level feature와 concatenation을 한다. 이 때 채널 수가 크기 때문에 1x1 convolution을 적용하여 채널을 줄여서 사용한다. Concatenation 이후에는 몇개의 3x3 convolution을 적용한 뒤 다시 bilinear upsampling을 적용하여 크기를 4배로 키운다.

Encoder의 output stride가 16일 때 속도 대비 성능 trade-off가 가장 좋았고, output stride가 8일 때 정확도가 더 올라갔다.

Modified Alinged Xception

MSRA팀이 제안한 Aligned Xception 모델 [31]을 일부 수정하여 적용하였다.

  1. [31]에서와 같이 깊은 Xception을 사용하지만 네트워크의 초입 부분은 빠른 계산을 위해 이 부분을 제외하였다.
  2. Max pooling 연산은 depthwise separable convolution의 stride를 이용하도록 변경하였다.
  3. 3x3 depthwise 연산 이후에 batch norm과 ReLU를 추가적으로 적용하였다.


Add a Comment Trackback