Semantic Segmentation 프로젝트를 진행중에, DeepLabv3+ 모델을 사용하게 되어 논문 정리를 하며 사용성을 높이고자합니다.
Introduction
DeepLabv3+는 2가지 핵심 구조를 가지고 있습니다. 기존의 DeepLabv3에서 활용됐던 Atrous Spatial Pyramid Pooling(ASPP)과 Encoder-decoder 구조입니다. Atrous Spatial Pyramid Pooling(ASPP)은 pooling feature들로부터 contextual 정보를 가져올 수 있는 역할을 수행하고, Encoder Decoder 구조는 object boundary와 같은 세부적인 정보를 얻을 수 있다는 장점이 있습니다. ASPP가 전역적인 정보를 다루느라 놓치는 세부 정보들을 encoder-decoder 구조를 통해 보완할 수 있어 효과적이었다고 합니다.
또한 backbone으로 속도와 정확도 모두 발전시킨 depthwise separable convolution model인 Xception을 일부 수정해 활용하고, atrous separable convolution을 통해 효율적인 모델 아키텍처를 만들었습니다.
Methods

DeepLabV3Plus Architecture
DeepLabv3+는 DeepLabv3에 encoder-decoder 구조를 활용해 변형한 것으로 encoder에서는 atrous convolution을 통해서 multi-scale contextual 정보를 수집하고, 이를 decoder를 통해 복원하면서 object boundary와 같은 detail한 정보까지 segmentation을 수행합니다.
Xception

Xception은 image classification task에서 처음 소개된 모델로 빠른 속도가 장점인 모델입니다. 본 논문에서는 Xception을 encoder에 활용해 image의 중요한 정보들을 효율적으로 추출할 수 있었습니다.
특히 논문에서는 이 과정을 Depthwise Separable Convolution 이라고 불렀습니다.
Depthwise Separable Convolution

"출처 https://www.researchgate.net/figure/Depthwise-separable-convolutions_fig1_358585116"
**Depthwise Separable Convolution은 Depthwise Convolution과 Pointwise Convolution을 결합한 것** 으로 최초에 각 채널별로 k\*k convolution 연산을 한 뒤, 이를 다시 모아서 각 point별로 1\*1 convolution 연산을 하는 과정입니다. depthwise convolution은 input channel로부터 spatial 정보를 수집하고, pointwise convolution은 depthwise convolution의 결과를 output으로 결합합니다. 이런 구조의 연산은 비슷한 결과를 내면서도 **파라미터 수와 computation cost를 줄일 수 있는 효과**가 있습니다.

Deeplabv3+의 Backbone: Modified Xception 구조
DeepLabV3+에서는 Xception에 3가지 변화를 주었습니다.
1. 더 깊은 구조의 Xception을 활용했습니다. 기존 8번의 Xception block이 반복 되는데, 이를 16번으로 늘렸습니다. (Middle flow 참고)
2. 모든 max pooling 연산을 depthwise separable convolution으로 대체했습니다. 이 부분에서 atrous separable convolution을 활용할 수 있었고, 효과적인 feature map추출이 가능했습니다.
3. 3*3 depthwise convolution 이후에 batch normalization과 ReLU를 추가해 안정적인 학습을 유도하였습니다.
Encoder-Decoder with Atrous Convolution
Atrous Convolution
Atrous Convolution은 Delate convolution이라고도 불리며, 연속적인 픽셀의 convolution 연산이 아닌 중간 픽셀을 건너뛰며 convolution 연산을 진행해 넓은 receptive field를 가질 수 있는 convolution 연산입니다.

"(b) Atrous Convolution 출처 https://www.researchgate.net/figure/Represents-the-typical-and-atrous-convolution-a-a-typical-convolution-of-kernel-size_fig5_353514330"
DeepLabv3 as encoder

DeepLabv3+의 Encoder: Xception과 ASPP가 결합된 형태
Backbone인 Xception으로부터 추출된 Feature map에 DeepLabv3의 ASPP를 적용합니다. image classification task와 다르게 semantic segmentaion task에서는 16혹은 8의 stride를 적용해 denser한 feature extraction을 유도합니다. 특히 DeepLabv3의 ASPP에서는 1\*1 convolution과 3개의 다른 rate를 가지는 atrous convolution, 그리고 Image Pooling으로 이루어져 있으며, 최종적으로 1\*1 convolution을 통해 256채널의 output feature map을 추출합니다.
Proposed decoder

DeepLabv3+의 Decoder: Encoder의 output feature map과 Backbone의 feature map의 결합
기존 deeplabv3는 decoder 과정 없이 feature map을 원래 input image size로 upsample 해주었지만, deeplabv3+는 encoder output을 4배 upsample 한 뒤, backbone의 low level feature와 결합합니다. 이 때 low level feature는 1\*1 convolution 연산을 통해 channel수를 256개로 맞춘 뒤, upsample 된 encoder output과 결합합니다. 이후 3\*3 convolution 연산을 한 뒤, 다시 4배 upsample 해 최종 prediction을 얻게 됩니다.
Conclusion
ASPP와 Encoder-Decoder 구조를 활용해 Unet과 함께 대표적인 Semantic Segmentation Model인 DeepLabv3+를 알아보았습니다. Backbone으로 Xception을 활용하고, Atrous Spatial Convolution 활용의 의미를 알 수 있었던 논문이었습니다.