비즈니스 문제를 해결하고 예측하는 데이터 사이언티스트가 되고 싶다면?
#인공지능 

DeepLab V3+: Semantic Image Segmentation 모델

이미지 분석 작업에서 중요한 방법 중 하나인 Semantic Segmentation은, 입력된 영상의 각 픽셀이 클래스 라벨을 할당하는 것을 목표로 합니다. 이번 블로그는 DeepLab V1~ V3+에 대해서 발전 과정의 차이점을 중심으로 설명합니다.

2024-09-02 | 신유진

Semantic Segmentation


입력 영상으로부터 semantic segmentation을 수행한 예시. 출처

이미지 분석 작업에서 중요한 방법 중 하나인 Semantic Segmentation은, 입력된 영상의 각 픽셀이 클래스 라벨을 할당하는 것을 목표로 합니다. 이 방법은 주로 의료 영상 분석이나 자율 주행 등 여러 분야에서 활용될 수 있습니다.

pascal-voc-2012
Pascal VOC 2012 leaderboard 결과. 출처

Semantic segmentation을 해결하기 위한 다양한 방법론이 존재합니다. 이러한 알고리즘들은 특정 데이터와 지표를 기준으로 성능을 비교할 수 있으며, 그중에서도 PASCAL VOC 2012 데이터셋이 대표적으로 자주 사용됩니다. 해당 리더보드 결과를 보면, DeepLab 알고리즘들이 상위권에 많이 위치해 있음을 알 수 있습니다. 이번 포스트에서는 특히 가장 높은 성능을 보이는 DeepLab V3+을 발전과정에 따른 변천사와 함께  자세히 살펴보겠습니다.

DeepLab

DeepLab이라는 이름의 시맨틱 세그멘테이션 방법은 현재까지 총 4번의 개정본(1, 2, 3, 3+)이 출판되었습니다.

  • DeepLab V1: “Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs,” ICLR 2015.
  • DeepLab V2: “DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs,” TPAMI 2017.
  • DeepLab V3: “Rethinking Atrous Convolution for Semantic Image Segmentation,” arXiv 2017.
  • DeepLab V3+: “Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation,” arXiv 2018.

종합적으로 DeepLab은 Semantic Segmentation문제를 해결하기 위해 atrous convolution을 적극적으로 활용하는 방법을 제안하고 있습니다. V1에서는 atrous convolution을 처음으로 적용했고, V2에서는 멀티스케일 컨텍스트를 적용하기 위해 Atrous Spatial Pyramid Pooling (ASPP) 기법을 제안했습니다. V3에서는 기존 ResNet 구조에 atrous convolution을 활용해 더 밀집한 특징 맵을 얻는 방법을 제안했습니다. 최근 발표된 V3+에서는 separable convolution과 atrous convolution을 결합한 atrous separable convolution의 활용을 제안하고 있습니다. 각 버전에 대해서는 아래에서 자세히 설명드리겠습니다.

DeepLab V1

Atrous Convolution

Atrous Convolution 예시.

먼저 기본적인 아키텍처를 제안한 DeepLab1에서 Atrous Convolution (확장된 합성공)을 사용하여 입력 이미지의 해상도를 유지하면서도 더 넓은 시야를 가질 수 있도록 했습니다.
Atrous convolution은 기존의 convolution과 달리 필터 내부에 빈 공간을 두고 작동합니다. 예를 들어, 빈 공간의 크기를 결정하는 파라미터인 rate r=1일 경우에는 기존의 convolution과 동일하게 작동하고, r 값이 커질수록 빈 공간이 넓어집니다.
Atrous convolution의 장점은 기존 convolution과 동일한 양의 파라미터와 계산량을 유지하면서도, 한 픽셀이 볼 수 있는 영역인 field of view를 넓힐 수 있다는 점입니다. 시맨틱 세그멘테이션에서 높은 성능을 내기 위해서는, convolutional neural network의 마지막 단계에서 한 픽셀이 입력값에서 커버할 수 있는 영역의 크기를 결정하는 receptive field의 크기가 매우 중요합니다. Atrous convolution을 사용하면 파라미터 수를 늘리지 않으면서도 receptive field를 크게 확장할 수 있기 때문에, DeepLab 시리즈에서는 이를 적극적으로 활용하고 있습니다.
Conditional Random Field (CRF) 를 후처리 단게에 적용하여 분할 결과를 개선했습니다.

DeepLab V2

Spatial Pyramid Pooling

Encoder-Decoder

DeepLab2에서는 Spatial Pyramid Pooling 기반 Atrous Spatial Pyramid Pooling (ASPP) 모듈을 도입함으로써 Semantic Segmentation의 성능을 높이기 위해 노력했습니다. 이는 여러 개의 다른 rate를 가진 receptive field를 병렬식으로 Atrous Convolution을 feature map에 적용한 후 이를 다시 결합하는 방식입니다. 이는 객체 크기에 강인한 특징을 추출 할 수 있고 VGG-16 모델을 기반으로 하고 있습니다.
최근 발표된 PSPNet에서도 Atrous Convolution을 사용하지는 않지만, 유사한 피라미드 풀링 기법을 적극적으로 활용하고 있습니다. 이러한 방법들은 Multiscale Context를 모델 구조에 구현하여 보다 정확한 Semantic Segmentation을 수행할 수 있도록 돕습니다. DeepLab에서는 ASPP를 기본 모듈로 사용하고 있습니다.

source: Ronneberger et al., “U-Net: Convolutional Networks for Biomedical Image Segmentation”

Encoder-decoder 구조는 시맨틱 세그멘테이션을 위한 CNN 구조로 자주 사용됩니다. 특히, U-Net이라는 encoder-decoder 구조는 정교한 픽셀 단위의 Segmentation이 요구되는 biomedical 이미지 segmentation 작업에서 핵심 요소로 자리 잡았습니다. 왼쪽의 encoder 부분에서는 공간 차원을 점진적으로 줄이면서 고차원의 시맨틱 정보를 convolution 필터로 추출합니다. 이후 오른쪽의 decoder 부분에서는 encoder에서 공간 차원 축소로 인해 손실된 공간 정보를 점진적으로 복원하여 더 정교한 경계 세그멘테이션을 완성합니다.
U-Net이 다른 encoder-decoder 구조와 다른 점은, 복원 과정에서 이전 encoder feature map 중 동일한 크기를 가진 feature map을 가져와 prior로 활용함으로써 더 정확한 경계 세그멘테이션을 가능하게 하는 가운데 회색 선입니다.
최근 발표된 DeepLab V3+는 U-Net과 유사하게 중간 연결을 가지는 encoder-decoder 구조를 적용하여 더 정교한 객체 경계를 예측할 수 있게 되었습니다.

Depthwise Separable Convolution

Convolution.출처

입력 이미지가 8×8×3 (H×W×C)이고, convolution 필터의 크기가 3×3 (F×F)일 경우, 하나의 필터가 가지는 파라미터 수는 3×3×3 (F×F×C) = 27이 됩니다. 만약 필터가 4개 있다면, 해당 convolution의 총 파라미터 수는 3×3×3×4 (F×F×C×N) = 108이 됩니다.

 

depthwise-convolution

depthwise-convolution

Convolution 연산에서 필터가 한 번에 전체 채널을 연산하는 대신, 입력 영상의 채널 축을 분리하여 각 채널마다 채널 축 길이가 1인 여러 개의 convolution 필터로 연산하는 방식을 depthwise convolution이라고 합니다. 위 그림과 같이 각 채널에 대해 별도로 필터를 적용하여 연산한 후, 결과를 합치는 방식입니다.

depthwise-separable-convolution

depthwise-separable-convolution

이제, depthwise convolution으로 나온 결과에 대해, 1×1×C 크기의 convolution 필터를 적용한 것을 depthwise separable convolution이라고 합니다. 이러한 복잡한 연산을 수행하는 이유는 기존 convolution과 유사한 성능을 유지하면서도 사용되는 파라미터 수와 연산량을 획기적으로 줄일 수 있기 때문입니다.

예를 들어, 입력값이 8×8×3이고 16개의 3×3 convolution 필터를 적용할 때 사용되는 파라미터의 개수는 다음과 같습니다:

  • Convolution: 3×3×3×16 = 432
  • Depthwise separable convolution: 3×3×3 + 3×16 = 27 + 48 = 75

Depthwise separable convolution은 기존 convolution 필터가 공간 차원과 채널 차원을 동시에 처리하던 것을 분리하여 각각 처리합니다. 이 과정에서, 여러 개의 필터가 공간 차원 처리에 필요한 파라미터를 공유함으로써 파라미터의 수를 더 줄일 수 있습니다. 두 차원을 분리하여 연산을 수행하더라도 최종 결과값은 두 차원 모두를 처리한 결과가 되므로, 기존 convolution 필터의 역할을 충분히 대체할 수 있습니다.
픽셀 각각에 대해 라벨을 예측해야 하는 시맨틱 세그멘테이션은 난이도가 높기 때문에 CNN 구조가 깊어지고 receptive field를 넓히기 위해 더 많은 파라미터가 필요합니다. 이 상황에서 separable convolution을 잘 활용하면 모델에 필요한 파라미터 수를 대폭 줄일 수 있으므로, 보다 깊은 구조로 확장하여 성능을 향상시키거나, 기존 대비 메모리 사용량 감소와 속도 향상을 기대할 수 있습니다.

DeepLab V3 (2015)

DeepLab V3+ 바로 이전 논문인 DeepLabV3에서는

  • Encoder: ResNet을 기반으로 Atrous Convolution 활용
  • ASPP 모듈을 개선
  • Batch Normaliation을 적용하여 학습 안전성을 높임
  • Decoder: Bilinear Upsampling

DeepLab V3+ (2018)

DeepLab V3와 확연한 차이를 보이지 않고 각각의 구조에 약간의 변화만 주었습니다.

  • Encoder: ResNet을 기반으로 Atrous Convolution 활용 -> Xception(Inception with separable convolution)
  • ASPP 모듈을 개선 -> ASSPP (Atrous Separable Spatial Pyramid Pooling)
  • Batch Normaliation을 적용하여 학습 안전성을 높임
  • Decoder: Bilinear Upsampling -> Simplified U-Net style decoder

먼저, ResNet을 사용하던 encoder는 앞서 소개드린 separable convolution을 적극 활용한 Xception 구조로 대체되었습니다. Multi-scale context를 얻기 위해 사용되던 ASPP는 separable convolution과 atrous convolution을 결합한 atrous separable convolution을 적용한 ASSPP로 대체되었습니다. 또한, 기존에 단순히 bilinear upsampling으로 처리하던 decoder 부분은 U-Net과 유사한 형태의 decoder로 대체되었습니다. 이 새로운 구조는 encoder, ASPP, 그리고 decoder 모두에서 separable convolution을 적극 활용하여, 파라미터 사용량 대비 성능 효율을 극대화하려는 노력이 돋보입니다.

Experiment

위 테이블은 다양한 파라미터와 설정으로 실험을 진행한 결과입니다. 먼저 ResNet-101 구조를 encoder로 사용했을 때의 성능을 측정했습니다. Decoder 부분을 bilinear upsampling 대신, 단순화된 U-Net 구조로 변경했을 때, 기존에 비해 mIOU가 1.64% 향상되는 것을 확인할 수 있었습니다.

 

이후, encoder를 Xception으로 교체하여 실험을 진행했습니다. ResNet-101과 비교했을 때, Xception 구조가 약 2% 가량의 성능 향상을 가져오는 것을 확인할 수 있었습니다. 또한, ASPP 부분과 decoder 부분에 사용되는 모든 convolution을 separable convolution으로 대체한 경우(위 표의 SC 부분), 성능은 기존 convolution을 사용할 때와 거의 비슷하게 유지되는 반면, 모델이 사용하는 연산량(Multiply-Adds)이 획기적으로 줄어드는 것을 확인할 수 있었습니다.

Pascal VOC 2012 validation set에서의 visualization 결과

위 Visualization 결과를 보면 각각의 픽셀에 대해 상당히 안정적이고 정확하게 클래스를 예측하고 있음을 확인할 수 있습니다. 이는 Xception 기반의 encoder가 양질의 고수준 시맨틱 정보를 가지는 특징을 추출할 수 있고, ASPP 모듈을 통해 각 픽셀이 여러 스케일의 컨텍스트 정보를 취하여 보다 정확한 추론을 가능하게 하며, U-Net 구조의 decoder를 통해 각 물체에 해당하는 정교한 경계를 그려낼 수 있기 때문에 이러한 visualization 결과를 얻어낼 수 있다고 해석할 수 있습니다.

Conclusion

DeepLab V3+ 논문은 뛰어난 혁신을 제시하는 것은 아니지만, DeepLab V1부터 시작해 시맨틱 세그멘테이션 성능을 꾸준히 향상시키기 위한 방법론을 연구하는 최신 단계에 위치해 있습니다. 이 논문은 encoder, ASPP, decoder 각 모듈의 역할이 명확하고 모듈화되어 있어 모델의 확장성도 좋아 보입니다.
또한, 이 논문의 저자들이 Google에 소속되어 있어 TensorFlow에서 공식적으로 제공하는 대표적인 시맨틱 세그멘테이션 방법으로 소개되고 있으며, 코드도 깔끔하게 공식적으로 공개되어 있습니다. 다양한 데이터셋과 여러 encoder 구조로 학습된 사전 학습 모델도 공개되어 있으므로, 시맨틱 세그멘테이션 모델을 구축하고자 하는 경우 DeepLab V3+는 매우 좋은 출발점이 될 것입니다.

Reference

DeepLab V3+: Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

Semantic Segmentation 이미지 분석 task 중 semantic segmentation은 중요한 방법 중 하나입니다. Semantic segmentation은 입력 영상에 주어진 각각의 픽셀에 대해서 class label을 할당하는 것을 목표로 합니다. 주로 의료영상 분석, 자율주행 등 다양한 분야에 활용될 수 있습니다. Semantic segmentation을 해결 하기 위한 방법론은 여러가지가 존재합니다. 이러한 여러 알고리즘들을 정해진 데이터와 지표를 기준으로 성능을 비교해 볼 수…