딥러닝과 모델 아키텍처(7/7)
딥러닝모델: UPerNet - 다중 스케일 시맨틱 세그멘테이션
Pyramid Pooling Module과 Multi-Loss로 픽셀 단위 분류를 수행하는 UPerNet의 구조를 정리한다.
2025-02-10
5 min read
#UPerNet#세그멘테이션#PPM
딥러닝과 모델 아키텍처시리즈 목차
기본 정보
| 항목 | 내용 |
|---|---|
| 명칭 | UPerNet (Unified Perceptual Parsing Network) |
| 발표 | 2018년, MIT CSAIL |
| 작업 | 시맨틱 세그멘테이션 |
| 출력 | 픽셀별 클래스 분류 맵 |
세그멘테이션이란?
이미지의 모든 픽셀을 클래스 중 하나로 분류하는 작업이다.
탐지: "건물이 (100,50)에 있다" → 박스
세그멘테이션: "이 픽셀은 건물, 저 픽셀은 도로" → 전체 색칠
전체 구조
입력 이미지
↓
[Backbone] ConvNeXt → C1, C2, C3, C4
↓
[Neck] 내장 FPN + PPM
↓
[UPerHead] 메인 예측 (N 클래스)
[FCNHead] 보조 예측 (학습 시에만)
↓
출력: H × W 클래스 분류 맵
핵심: PPM (Pyramid Pooling Module)
UPerNet의 가장 중요한 모듈이다.
입력 특징맵
↓
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│1x1 │ │2x2 │ │3x3 │ │6x6 │ ← 다양한 크기로 풀링
│Pool │ │Pool │ │Pool │ │Pool │
└──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘
↓ ↓ ↓ ↓
[Conv] [Conv] [Conv] [Conv] ← 1x1 Conv
↓ ↓ ↓ ↓
[Up] [Up] [Up] [Up] ← 원래 크기로 업샘플
└───┬───┴───┬───┴───┬───┘
↓ Concatenate + Conv
전역 맥락이 포함된 특징맵
왜 다양한 크기로 풀링하는가?
| 풀링 크기 | 파악하는 맥락 |
|---|---|
| 1x1 | 이미지 전체 ("전체적으로 도시 지역") |
| 2x2 | 4등분 ("왼쪽 위는 주거지, 오른쪽 아래는 상업지") |
| 3x3 | 9등분 |
| 6x6 | 36등분 (세밀한 영역별 맥락) |
모든 스케일의 맥락을 합치면 "전체적으로는 도시(1x1), 이 구역은 주거지(2x2), 이 블록은 아파트 단지(6x6)"를 동시에 파악한다.
특징 융합
C1 ──→ [Conv] ──→ ┐
C2 ──→ [Conv] ──→ ┤
C3 ──→ [Conv] ──→ ┤ → Concat → [Conv] → 융합 특징
C4 ──→ [PPM] ──→ ┘
↑
C4에만 PPM 적용 (전역 맥락 추가)
Auxiliary Head (보조 Head)
학습할 때만 사용한다. 중간 레이어에서 분기해서 추가 supervision을 제공한다.
문제: 깊은 네트워크에서 초기 층의 gradient가 약해짐
해결: 중간에서도 분류 시도 → 중간 층도 강한 학습 신호 받음
Backbone
├─ Stage 1, 2
├─ Stage 3 ──→ [FCNHead] ← 보조 (학습만)
└─ Stage 4 ──→ [UPerHead] ← 메인
추론 시 보조 Head 미사용 → 추가 비용 없이 학습만 개선
손실 함수
3가지 손실을 동시에 사용한다.
| 손실 | 역할 | 메인 가중치 | 보조 가중치 |
|---|---|---|---|
| CrossEntropyLoss | 기본 분류 | 1.0 | 0.4 |
| TverskyLoss | 소수 클래스 강조 | 1.0 | 0.4 |
| LovaszLoss | IoU 직접 최적화 | 1.0 | 0.4 |
TverskyLoss: "건물을 놓치는 것"을 더 심하게 처벌 → 작은 영역 탐지율 향상
LovaszLoss: 평가 지표(mIoU)와 직접 연결 → 최종 성능 향상에 효과적
학습 설정 포인트
Backbone 학습률 차등
Backbone: 낮은 학습률 (이미 ImageNet에서 학습됨 → 미세 조정)
Head: 높은 학습률 (처음부터 새로 학습)
FP16 (반정밀도 연산)
세그멘테이션은 모든 픽셀을 처리해서 메모리가 많이 필요하다. FP16으로 메모리 절반, 속도 약 2배 향상이 가능하다.
장단점
| 장점 | 단점 |
|---|---|
| PPM으로 다중 스케일 맥락 파악 | 모든 픽셀 처리 → 연산량 많음 |
| Multi-Loss로 균형 잡힌 학습 | 경계 부분이 부정확할 수 있음 |
| Auxiliary Head로 안정적 학습 | 메모리 사용량 큼 |
| 다양한 Backbone과 호환 | - |