UNet, Deeplabv3+, Segformer 이 3가지의 모델이 Segmentation 분야에서 가장 많이 사용되고, 중요한 모델이다.
우리 3명이 각각 1개씩 모델을 맡아서 논문을 읽고 서로 설명해주기로 하였다.
내가 맡은 논문은 Deeplabv3+ 모델로 UNet과 Segformer 사이에서 발행된 논문이지만, 나름 무시할 수 없는 중요한 모델이다.
오늘은 이 Deeplabv3+ 모델에 대해 살펴보려고 한다.
논문 제목 : Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
https://arxiv.org/pdf/1802.02611
저자 : Liang-Chieh Chen, Yukun Zhu, George Papandreou, Florian Schroff, and Hartwig Adam Google Inc.
0. 개요 (Abstract)
- 문제점
- 기존 semantic segmentation 모델은 object boundary가 흐릿하거나 손상됨.
- Global context 와 Local boundary 정보를 동시에 다루기 어려움
- 해결책
- DeepLabv3의 encoder 성능 + 간단한 decoder →경계 정보 복원 강화.
- 연산량을 줄이기 위해 Depthwise Separable Convolution 사용.
- 핵심 구성
- DeepLabv3 기반 Encoder (ASPP 포함)
- 간단하지만 효과적인 Decoder 모듈 → 경계 복원
- Xception 백본 + Depthwise Separable Convolution으로 연산 최적화
1. 연구 배경 및 목적
✅ Semantic Segmentation이란?
- 이미지 내 모든 픽셀 단위에 의미 있는 클래스를 할당하는 작업으로, 의미 분할(Meaningful labeling)이라고도 말함
- 기존 방식은 hand-crafted feature → 현재는 CNN 기반.
✅ 기존 접근 방식
- Spatial Pyramid Pooling (ASPP) :
- 다양한 필터/크기로 문맥 정보 수집 → 다양한 스케일의 문맥 포착이 가능
- 경계 정보 손실
- Encoder-Decoder
- 계층적 구조로 경계 복원에 유리함
- 문맥 정보가 부족
✅ DeepLabv3+의 목표
- 두 방식의 장점 서로 결합: → 다중 스케일 문맥 정보 + 세밀한 경계 복원하여 정확도랑 효율성 모두 개선 가능함
2. Deeplabv3+ 모델 구조 요약
1. Encoder ( 기존의 DeepLabv3 기반)
- Atrous Convolution : feature map 해상도 유지 + receptive field 확대
- ASPP : 다양한 dilation rate 사용하여 병렬 convolution → 다중 스케일 문맥 정보 추출
2. Decoder (Deeplabv3+에 새로 추가 모듈)
- DeepLabv3의 Encoder 출력 feature → bilinear upsampling (x4)
- Low-level feature (예: ResNet Conv2 출력) 와 concat
- 채널 수가 높은 low-level feature → 1x1 Conv로 채널 수 감소
- 3x3 Conv 2번으로 refinement
- 다시 upsample (x4) → 원본 해상도로 복원
→ 즉 저수준 정보랑 고수준 문맥 정보 합침 → 경계 복원 강화
3. Backbone: Aligned Xception
- 기존 ImageNet용 Xception 구조를 강화한 형태로, 기존 모델보다 더 깊은 구조 ( Entry, Middle, Exit flow로 구성됨)
Xception
: 기본적으로 Depthwise Separable Convolution을 이용한 구조로, 효율적으로 깊고 넓은 네트워크를 만들 수 있도록 설계된 모델
🔷 Entry Flow ( 입력 단계 )
- 목적 : 이미지로부터 저수준의 feature을 추출 -> 다운샘플링 수행
< 구성 >
Conv32, Conv 64 : 일반적인 convolution
이후에 각 블록이 1x1 conv → 3x3 Separable Conv ×2 → stride 2의 3x3 Sep Conv 라는 일종의 다운샘플링 수행
- MaxPooling 제거 → 모두 Depthwise Separable Convolution으로 대체
=> Atrous Convolution 자유롭게 적용 가능하다
🔷 Middle Flow ( 중간 반복되는 블록 )
- 목적 : 고차원의 feature 특히, context-aware한 표현 학습
< 구성 >
SepConv 728 X 3 블록을 16번 반복함
- 블록 구성은 간단한데 그 대신에 반복을 16번이나 해서 깊이 있는 학습이 가능함
=> ResNet의 Residual block처럼 skip connection 통해 gradient 흐름을 돕고, 성능 향상시킴
🔷 Exit Flow ( 출력 단계 )
- 목적 : 추상적인 고차원의 feature 최종 추출
< 구성 >
1x1 conv (1024) → 3x3 SepConv ×3: 채널 수를 728 → 1024 → 1536 → 2048로 점진적으로 증가시킴
=> 이 출력값을 Segmentation Decoder 또는 Classifier로 전달함
⭐ 각각의 Depthwise Convolution 후에 배치 정규화, RELU 추가 : MobileNet에서 아이디어 가져온 경량 구조 적용
3. 주요 기술 설명
1. Atrous Convolution
- 필터 사이사이의 간격을 늘려서(필터의 시야를 조정하면서) 필터의 receptive field를 넓히는 기법
- 정보 손실( 해상도 손실 ) 없이 다중 스케일 정보 포착이 가능함
이때, x : Input feature map / w : convolution filter / i : 현재 position / r : atrous rate
2. ASPP (Atrous Spatial Pyramid Pooling)
- 다양한 rate(dilation rate를 6, 12, 18 등등)로 여러 병렬 적용함 → 다양한 스케일 정보를 수집
- Global image pooling도 포함됨 → 전체 문맥 정보 강화함
💡 Semantic Segmentation에서 더 깊은 특징 추출 위해 output stride를 16 또는 8로 설정
-> 마지막 1~2개의 블록들에서 각각 rate가 2, 4인 Atrous Convolution 적용함
3. Depthwise separable convolution
💡Depthwise Separable Convolution + Atrous Convolution = Atrous Separable convolution
- 기존의 1개의 Conv를 Depthwise + Pointwise Conv 구조로 분리함
- 연산량(9배 이상) 줄이면서 정확도 성능은 유지
- Decoder, Aspp 모두에 적용하여 효율성도 확보
4. 실험 설정
- PASCAL VOC 2012: 20개 클래스 + background
- Cityscapes: 19개 도시 객체 클래스
- Output Stride: 16 이랑 8짜리 비교
- 평가 요소
- MS (Multi-scale), Flip
- COCO / JFT Pretraining 실험
5. 실험 결과
📊 PASCAL VOC 2012 (val/test)
설정 | mIOU |
Deeplabv3 | 85.7% |
Deeplabv3+ | 89.0% ( JFT pretraining 포함한 경우) |
📊 Cityscapes
설정 | mIOU |
Deeplabv3 | 81.3% |
Deeplabv3+ | 82.1% |
+ 성능 향상 요인
1. Decoder 도입 -> 좁은 Trimap 구간에서 mIOU +5.4% 성능 향상
2. COCO pretraining : +2%의 성능 향상
3. JFT pretraining : +1%의 성능 향상
4. ASPP + Separable Conv : 연산량 30~40%나 감소함
6. 시각화 및 분석(Trimap 실험)
경계 근처의 void label을 확대하여 정확도 측정
- Decoder 없음 → Bilinear unsampling만으로 경계 흐림
- Decoder 적용 → 경계 복원 개선, 성능 향상
- 실패 예시: 가려진 객체, 유사한 클래스(소파 vs. 의자)
7. 결론
- 간단한 Decoder 구조로도 성능 향상 가능함
- 문맥 정보 + 경계 정보 → SOTA 정확도 달성
- 효율적인 구조 설계로 모바일/임베디드 환경에도 적용 가능
- TensorFlow 구현 코드
🔗 GitHub: tensorflow/models/deeplab
'[Euron] 자율주행 Segmentation 프로젝트' 카테고리의 다른 글
방학프로젝트 시작 !! 2025.6.24~ (0) | 2025.07.06 |
---|