Model Study

[CV] Semantic Segmentation : DeepLab V3+

jinahhub 2026. 6. 1. 17:57

[Contents]

 

1. Segmentation 기본

 1.1 Semantic Segmentation

 1.2 Instance segmentation

 

2. Segmentation : DeepLab 알고리즘

 2.1 DeepLab V3

   2.1.1. Atrous Convolution  (V1)

   2.1.2. Atrous Spatial Pyramid Pooling (ASPP) (V2)

 2.2 Encoder-Decoder 구조

 2.3 Depthwise Separable Convolution

 2.4. DeepLab V3+

 

3. 포스팅을 마치며


1. Segmentation 기본

 

 <정의>

 이미지에서 픽셀 단위로 관심심 객체를 추출하는 방법을 이미지 세그멘테이션(image segmentation)이라고 합니다

이미지 세그멘테이션은 모든 픽셀에 라벨(Label)을 할당하고, 라벨이 같은 객체들은 "공통적인 특징"을 가진다고 가정하며 이때 공통적인 특징은 픽셀이 비슷하게 생겼다는 사실은 인식하지만, 우리가 아는 것처럼 실제 물체단위로 인식하지 않을 수도 있습니다

 

세그멘테이션에는 여러가지 태스크들이 있으며 크게 Semantic / Instance Segmentation 2가지부터 공부하겠습니다.

 

1.1 Semantic Segmentation

세그멘테이션 중에서도 특히, 우리가 인식하는 세계처럼 물리적 의미 단위로 인식하는 세그멘테이션을 시맨틱 세그멘테이션 이라고 합니다. 쉽게 설명하면 이미지에서 픽셀을 사람, 자동차, 비행기 등의 물리적 단위로 분류(classification)하는 방법

 

시맨틱 세그멘테이션은 '사람'이라는 추상적인 정보를 이미지에서 추출해 내는 방법입니다. 그래서 사람이 누구인지 관계없이 같은 라벨로 표현이 됩니다

 

1.2 Instance segmentation

 

인스턴스 세그멘테이션은 사람 개개인별로 다른 라벨을 가지게 합니다. 여러 사람이 한 이미지에 등장할 때 각 객체를 분할해서 인식하자는 것이 목표입니다. 아래 사진처럼요!

MS COCO datasets의 인스턴스 세그멘테이션 라벨 (출처: http://cocodataset.org/#explore )

 

2. Segmentation : DeepLab 알고리즘

 

 2.1 DeepLab V3

 

  <정의>

세그멘테이션 문제에는 FCN, SegNet, U-Net 등 많은 모델이 사용되고 있습니다. 이번 포스팅에서는 그중에서 DeepLab이라는 세그멘테이션 모델을 불러와서 저와 고양이를 세그멘테이션 해보려합니다. 참고로 DeepLab 알고리즘(DeepLab v3+)은 세그멘테이션 모델 중에서도 성능이 매우 좋아 최근까지도 많이 사용되고 있습니다.(속닥)
 

그 전에, DeepLab이라고 불리는 시멘틱 세그멘테이션 방법은 ver1부터 지금까지 4번의 개정을 거쳐 현재 3+까지 출시되었다고 합니다.(2018)

 

DeepLab은 atrous convolution을 적극적으로 활용하는데, V1에서는 atrous convolution을 적용해보았고, V2에서는 multi-scale context를 적용하기 위한 Atrous Spatial Pyramid Pooling (ASPP) 기법을 제안하고, V3에서는 기존 ResNet 구조에 atrous convolution을 활용해 좀 더 dense한 feature map을 얻는 방법을 제안했습니다.

그리고 V3+에서는 separable convolution과 atrous convolution을 결합한 atrous separable convolution의 활용을 제안하며 이번 포스팅인 이 부분을 중점적으로 다뤄보려합니당

 

2.1.1. Atrous Convolution  (V1)

Atrous convolution은 기존 convolution과 다르게, 필터 내부에 빈 공간을 둔 채로 작동하게 됩니다. 위 예시에서, 얼마나 빈 공간을 둘 지 결정하는 파라미터인 rate r=1일 경우, 기존 convolution과 동일하고, r이 커질 수록, 빈 공간이 넓어지게 됩니다.

 

Atrous convolution을 활용함으로써 얻을 수 있는 이점은, 기존 convolution과 동일한 양의 파라미터와 계산량을 유지하면서도, field of view 즉, 한 픽셀이 볼 수 있는 영역을 크게 가져갈 수 있게 됩니다. 보통 semantic segmentation에서 높은 성능을 내기 위해서는 convolutional neural network의 마지막에 존재하는 한 픽셀이 입력값에서 얼마만큼의 영역을 커버할 수 있는지를 결정하는 receptive field 크기가 중요하게 작용하는데 Atrous convolution을 활용하면 파라미터 수를 늘리지 않으면서도 receptive field를 크게 키울 수 있기 때문에 여기에 장점이 있습니다.

 

2.1.2. Atrous Spatial Pyramid Pooling (ASPP) (V2)

V2에서는 앞서 설명한 Atrous Convolution의 기법을 활용하여 feature map으로부터 여러개의 rate가 다른 atruous convolution을 병렬적으로 적용한 뒤, 이를 다시 합쳐주는 기법으로 ASPP을 적용했습니다. 코넬대학교에서 발표한 PSPNet(Pyramid Scene Parsing Network, @PSPNet) 에서도 유사하게 pramid pooling 기법을 활용했었습니다. 이 방법은 multi-scale context 모델 구조로서 보다 정확한 시멘틱 세그멘테이션이 가능해지도록 만들어주었으며 DeepLap에서 ASPP를 기본 모듈로 사용하고 있습니다.

 

2.2 Encoder-Decoder 구조

U-Net 구조

Encoder-Decoder 구조 또한 시멘틱 세그멘테이션을 위한 CNN 구조로 자주 활용되고 있습니다. 특히 많이 들어본 U-Net 엔코더디코더 구조는 정교한 픽셀 단위의 세그멘테이션이 요구되는 도메인에서 자주 사용합니다. 아래 그림에서 보면 왼쪽의 엔코더 부분에서 점진적으로 spatial dimension을 줄여가면서 고차원의 시멘틱 정보를 convolution filter가 추출해낼 수 있도록 합니다. 이후 오른쪽 디코터 부분에서는 spatial dimension 축소로 인해 손실된 spatial 정보를 점진적으로 복원하여 보다 정교한 boundary 세그멘테이션을 가능하도록 만들어줍니다.

 

또한 U-Net 의 특징적인 부분은 Spatial 정보를 복원하는 과정입니다. 이전 encoder feature map 중 동일한 크기를 지닌 feature map을 가져 와 prior로 활용함으로써 더 정확한 boundary segmentation이 가능하게 만듭니다.

 

2.3 Depthwise Separable Convolution

Convolution 기본

입력 이미지가 8×8×3 (H×W×C) 이고, convolution filter 크기가 3×3 (F×F) 이라고 했을 때, filter 한 개가 가지는 파라미터 수는 3×3×3 (F×F×C) = 27 이 됩니다. 만약 filter가 4개 존재한다면, 해당 convolution의 총 파라미터 수는 3×3×3×4 (F×F×C×N) 만큼 지니게 됩니다.

Depthwise Convolution

Convolution 연산에서 channel 축을 filter가 한 번에 연산하는 대신에, 위 그림과 같이 입력 영상의 channel 축을 모두 분리시킨 뒤, channel 축 길이를 항상 1로 가지는 여러 개의 convolution 필터로 대체시킨 연산을 depthwise convolution이라고 합니다.

Depthwise Separable Convolution

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

 

 ex. 입력값 8x8x3, 16개의 3x3 convolution 필터 적용 시 파라미터 갯수
    - Convolution : 3x3x3x16 = 432개
    - Depthwise separable convolution : 3x3x3 + 3x16 = 75

 

즉, Depthwise separable convolution은 기존 convolution filter가 spatial dimension(H*W)과 channel dimension(3채널)을 동시에 처리하던 것을 따로 분리시켜 각각 처리하는 것이라고 볼 수 있습니다. 두 축을 분리시켜 연산을 수행하더라도 최종 결과값은 결국 두 가지 축 모두를 처리한 결과값을 얻을 수 있으므로, 기존 convolution filter가 수행하던 역할을 충분히 대체할 수 있습니다.

 

픽셀 각각에 대한 Lable을 예측해야하는 시멘틱 세그멘테이션 입장에서는 난이도가 높고 CNN 구조가 깊어지며 receptive field를 넓히기 위해 더 많은 파라미터가 필요한 상황에서 이 모델은 파라미터수를 대폭 줄일 수 있기 때문에 성능향상과 메모리사용량 감소 두마리 토끼를 잡을 수 있는 구조입니다.

 

2.3. DeepLab V3

DeepLab V3 구조

이제 이 개념들을 총 집합하여,

DeepLap V3을 이해해 보자면, 이 모델은


- Encoder(ResNet with atrous convolution)
- ASPP
- Decoder(Bilinear upsampling)

 

으로 이루어져 있습니다.

 

2.4. DeepLab V3+

더 나아가 V3+에는 약간의 변화만 추가되었습니다.

DeepLab V3+ 구조

- Encoder(ResNet with atrous convolution) → Xception (Inception with separable convolution)
   : 앞에서 설명한 separable convolution을 더 잘 활용할 수 있는 Xception으로 대체 !

- ASPP → ASSPP (Atrous Separable Spatial Pyramid Pooling)
   : separable convolution과 atrous convolution을 결합한 atrous separable convolution이 적용된 ASSPP로 대체!

- Decoder(Bilinear upsampling) → Simplified U-Net style decoder
   : U-Net과 유사한 형태의 decoder로 대체!

 

pascal VOC 2012 validation set 에서의 visualization 결과

 

위 Visualization 결과를 보면 상당히 안정적이고 정확하게 각각의 픽셀에 대해 클래스를 예측하고 있음을 확인할 수 있습니다. Xception 기반의 encoder로 양질의 high level semantic 정보를 가지는 feature를 추출할 수 있고, ASPP 모듈을 통해 각 픽셀이 여러 스케일의 context 정보를 취해 보다 정확한 추론이 가능하며, U-Net 구조의 decoder를 통해 각 물체에 해당하는 정교한 boundary를 그려낼 수 있기에 위와 같은 visualization 결과를 얻어낼 수 있다고 해석해 볼 수 있습니다.

 

3. 포스팅을 마치며

 

DeepLab V3+모델의 경우 V1부터시작해 4번의 개정에서 얼마나 많은 고민끝에 파라미터를 단축(용량 줄이기)과 성능향상 (정교한 누끼따기)을 해냈는지 알 수 있어서 좀 재미있었습니다.

요즘 핫한 세그멘테이션은 SAM이지만, DeepLabV3의 히스토리를 알아가는 과정 또한 재밌던 것 같습니다. DeepLab V3+모델을 소개한 논문도 다음 포스터에서 자세히 포스팅하고 싶습니다. (논멘)

 

아래 사진은 DeepLab V3+ 모델을 불러와서 저희집 고양이 후추를 Segmentation 해본 결과물 입니다 ㅋ_ㅋ

Class 0, 8 (0:background, 8:cat) 으로 분류 잘 했는데, 꼬리 부분이 좀 아쉬운데요 ?_?