공부 기록장

[논문읽기] : Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation(DeepLabV3+) 본문

스터디/인공지능

[논문읽기] : Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation(DeepLabV3+)

빛나무 2021. 5. 12. 02:14

[Semantic Segmentation을 해결하기 위한 성능 좋은 DeepLab 시리즈]

DeepLab V1 : Atrous convolution을 처음 적용

DeepLab V2 : multi-scale context를 적용하기 위한 Atrous Spatial Pyramid Pooling(ASPP) 기법을 제안

DeepLab V3 : 기존 ResNet 구조에 Atrous Convolution을 활용해 좀더 Dense한 feauture map을 얻는 방법을 제안

DeepLab V3+ : Depthwise Separable Convolution과 Atrous Convolution을 결합한 Atrous Separable Convolution의 활용을 제안

 

논문 읽기 전

1) Atrous Convolution

Atrous에서 trous는 구멍을 의미하며, Atrous Convolution은 필터 내부에 빈 공간을 둔 채 작동하는 convolution을 뜻한다. 빈 공간을 얼마나 둘 지 결정하는 파라미터 r이 1인 경우, 기존 conv.과 동일하고 r이 커질수록 빈 공간이 넓어지게 된다. Atrous Conv.을 활용하게 되면 기존 conv.과 동일한 계산 비용으로 보다 넓은 시야를 갖을 수 있다.

 

2) Atrous Spatial Pyramid Pooling(ASPP)

feature map으로부터 rate가 다른 Atrous Conv.을 병렬로 적용한 다음, 이를 다시 합쳐주는 기법이다.

 

3) Depthwise Separable Convolution

우선 일반적으로 사용되는 convolution의 모습은 아래 그림처럼 표현될 수 있다.

일반적인 Convolution 모습

Conv. 연산에서 채널 축을 필터가 한 번에 연산하는 대신에, 입력값의 채널 축을 모두 분리시킨 뒤, 채널 축 길이를 항상 1로 가지는 여러 개의 conv. 필터로 대체시킨 연산을 Depthwise convolution이라고 한다.

Depthwise Convolution 모습

위의 Depthwise conv.으로 나온 결과에 대해 11C(FFC) 크기의 conv.필터를 적용한 것을 Depthwise Separable Convolution 이라고 한다.

Depthwise Separable Convoluton 모습

이렇게 복잡해진 연산을 수행함으로써 기존 conv과 유사한 성능을 보이면서도 파라미터 수와 연산량을 획기적으로 줄일 수 있다고 한다. 기존 conv에서는 동시에 처리하던 saptial dimension과 channel dimension을 따로 분리시켜 각각 처리하는 과정에서, spatial dimension 처리에 필요한 파라미터를 하나로 공유함으로써 파라미터 수를 더욱 줄일 수 있게 된 것이다.

 


 

1. Intro

DeepLab V3를 강력한 인코더 모듈로 사용하고 단순하지만 성능 개선 면에서 효과가 큰 디코더 모듈을 사용한 새로운 인코더-디코더 구조를 제안한다.

 

2. Related work

...

 

3. Method

atrous conv.과 depthwise separable conv. 소개 -> DeepLab V3 리뷰 --> Xception model 의 수정 버전

 

3.1 Atrous Convolution을 이용한 Encoder-Decoder 모델

DeepLab V3+에서는 인코더로 DeepLab V3를 사용하고 디코더로 bilinear upsampling을 대신해 U-Net과 유사하게 concat 하는 방법을 이용한다.

 

<Encoder>

DCNN에서 Atrous convolution을 통해 임의의 resolution으로 특징을 뽑아낼 수 있도록 한다. 여기서 output stride라는 개념이 쓰이는데 "input image의 resolution과 output의 resolution의 비"라고 생각하면 된다. 최종 feature maps이 input image에 비해 16배 줄어들었다면 output stride는 16이 되는 것이다.

Semantic segmentation의 성능을 향상시키기 위해 마지막 부분의 block을 1개나 2개를 삭제하고 atrous conv.을 해주어 output stride를 16혹은 8로 줄인다. 그리고 다양한 크기의 물체 정보를 잡아내기 위해 다양한 rates의 atrous conv.을 사용하는 Atrous Spatial Pyramid Pooling을 사용한다.

 

<Decoder>

V3+에서는 단순히 bilinear upsampling을 해준 V3에서와 다르게, encoder의 최종 output에 1x1 conv.을 하여 채널을 줄이고 bilinear upsampling을 해준 후 concat을 하는 과정이 추가된다.