U-Net: Semantic Segmentation의 핵심 모델
학습 목표
- U-Net의 구조와 작동 원리 이해
- Skip Connection의 역할과 효과 파악
- FCN과 U-Net의 차이점 비교
- Loss 함수와 Weight Map의 수학적 원리 이해
- 의료 영상 분석에서의 U-Net 활용 이해
1. U-Net 소개
U-Net이란?
정의
- 2015년 Ronneberger et al.이 제안한 Semantic Segmentation 모델
- 특히 의료 영상 분석(Biomedical Image Segmentation)에 특화된 모델
- FCN(Fully Convolutional Network)의 발전된 형태
- 대칭적인 U자형 구조를 가진 깊은 신경망
주요 논문
- Ronneberger et al., "U-Net: Convolutional Networks for Biomedical Image Segmentation," 2015
개발 배경
- 의료 영상에서 자잘한 점이 암이 될 수 있어 세밀한 세그멘테이션이 필요
- 고해상도 공간 정보를 보존하며 경계를 명확하게 복원해야 함
- 제한된 데이터셋에서도 높은 성능이 요구됨
2. U-Net의 필요성 및 배경
기존 FCN의 한계
FCN의 문제점
- 업샘플링 과정에서 정보 손실이 발생
- 세부적인 경계 복원이 어려움
- 경계가 흐려지는(blurry) 현상 발생
- Encoder 단계에서 추출한 고해상도 정보를 Decoder에서 효과적으로 활용하지 못함
- 복원 과정에서 이미지 손상률이 높음
예시: 바둑판 이미지 세그멘테이션
- 세그멘테이션은 각각의 위치값에 색상(마스크값)을 얼마나 명확하게 맞추는가의 문제
- 원본 이미지의 마스크값을 정확히 복원하는 능력이 필요
- 복원 과정에서 발생하는 이미지 손상률을 최소화해야 함
U-Net의 목표
핵심 아이디어
- FCN의 단점을 보완하며 세부적인 경계까지 복원 가능한 모델 제안
- Skip Connection을 활용하여 고해상도와 저해상도 특징을 결합
- 원본 이미지의 경계를 충실하게 복원
- 인코더에서 발생한 값들을 디코더에 연결하면서 복원력을 향상
3. U-Net의 구조 및 작동 원리
대칭적인 Encoder-Decoder 구조
전체 구조 개요
Input (572×572×1) → Encoder → Bottleneck → Decoder → Output (388×388×2)
↓ ↓ ↑
고해상도 정보를 Skip Connection으로 전달
주요 구성 요소
-
Encoder (Contracting Path): 특징 추출 및 공간 축소
- 컨볼루션 및 Max Pooling으로 특징 추출
- 공간 해상도를 줄이면서 특징을 학습
-
Bottleneck: 추상화된 고수준 특징 학습
- 네트워크의 가장 깊고 좁은 부분
- 고수준의 의미론적 특징을 학습
-
Decoder (Expanding Path): 원래 크기 복원
- Transposed Convolution과 Skip Connection으로 복원
- 고해상도 정보를 결합하여 세밀한 복원 수행
-
Skip Connection: 동일한 단계의 Encoder와 Decoder 연결
- 고해상도 정보를 Decoder로 직접 전달
- 정보 손실 방지 및 경계 복원 성능 향상
구체적인 구조
1. Encoder 단계
구조
- 두 개의 3×3 Convolution + ReLU 활성화 함수
- 2×2 Max Pooling (stride=2)로 다운샘플링
특징 변화
- 특징 맵의 크기를 절반으로 축소 (572→280→140→70→35)
- 채널 수는 두 배로 증가 (64→128→256→512→1024)
Encoder 과정 예시
572×572×64 → (Max Pool) → 280×280×64
280×280×128 → (Max Pool) → 140×140×128
140×140×256 → (Max Pool) → 70×70×256
70×70×512 → (Max Pool) → 35×35×512
2. Bottleneck 단계
역할
- 네트워크의 가장 깊은 부분 (28×28×1024)
- 고수준의 추상화된 특징을 학습
- 의미론적으로 중요한 정보를 압축하여 표현
3. Decoder 단계
구조
- Transposed Convolution (Up-convolution)으로 업샘플링
- Encoder에서 넘어온 Skip Connection과 Concatenation
- 두 개의 3×3 Convolution + ReLU 활성화
채널 결합 방식 (Concatenation)
- 인코더의 64채널 + 디코더의 64채널 = 128채널로 입력
- 이후 Convolution을 통해 채널 수 조정
- 핵심: Concatenation으로 채널을 연결하여 원본 데이터 보존
Decoder 과정 예시
35×35×512 → (Up-conv) → 70×70×512
70×70×512 + 70×70×512 (from Encoder) → 70×70×1024 (Concatenate)
70×70×1024 → (Conv 3×3) → 70×70×256
4. 최종 출력
출력 레이어
- 1×1 Convolution으로 각 픽셀에 클래스 확률 할당
- Softmax 또는 Sigmoid를 사용하여 최종 세그멘테이션 맵 생성
출력 형식
- Softmax: 두 개의 픽셀값으로 출력 (예: [0.3, 0.7])
- Sigmoid: 단일 확률값 출력 (예: 0.7)
입출력 크기 차이
- 입력: 572×572
- 출력: 388×388
- 이유: Valid Convolution 사용으로 가장자리 픽셀 손실
- 중앙 영역 (388×388)만을 사용하여 정확한 예측 수행
U-Net 네트워크 흐름도
64 64
┌──┐ ┌──┐
input │ │→→│ │ output
image ─────────→│ │ │ │──────────────────────────→ segmentation
tile 572×572 └──┘ └──┘ 388 map
↓ ↓ ↓
↓ 128 128 256 128
↓ ┌──┐ ┌──┐ ┌──┐ ┌──┐
↓ │ │→│ │────────────────────────→│ │→│ │
↓ └──┘ └──┘ └──┘ └──┘
↓ ↓ ↑
↓ 256 256 512 256
↓ ┌──┐ ┌──┐ ┌──┐ ┌──┐
└───→│ │→│ │───────────────────→│ │→│ │
└──┘ └──┘ └──┘ └──┘
↓ ↑
512 512 1024 512
┌──┐ ┌──┐ ┌──┐ ┌──┐
│ │→│ │───────────→│ │──→│ │
└──┘ └──┘ └──┘ └──┘
↓ ↑
1024 1024
┌────┐ ┌────┐
│ │─────────────→│ │
└────┘ └────┘
범례:
→ : conv 3×3, ReLU
→→ : copy and crop (Skip Connection)
↓ : max pool 2×2
↑ : up-conv 2×2 (Transposed Convolution)
→ : conv 1×1 (최종 출력)
4. U-Net의 주요 아이디어
4.1. Skip Connection
역할 및 효과
- Encoder에서 학습한 고해상도 정보를 Decoder로 직접 전달
- 정보 손실을 방지하고 세밀한 경계를 복원
- 원본 데이터의 공간 정보를 보존
작동 방식
- 동일한 해상도 레벨의 Encoder 특징 맵을 Decoder로 복사
- Concatenation을 통해 채널 차원으로 결합
- Decoder의 업샘플링된 특징과 함께 사용
FCN과의 차이
- FCN: 일부 계층에서만 Skip Connection 사용 (단순 덧셈)
- U-Net: 모든 단계에서 Skip Connection 활용 (Concatenation)
- U-Net은 다중 Skip Connection을 활용하여 다양한 해상도의 정보를 결합
Skip Connection의 효과
- Skip이 적용된 경우: 원본과 매우 근접한 복원
- Skip이 적용되지 않은 경우: 경계가 흐려지고 디테일 손실
코드에서의 구현
e1 = encoder_block_1(input)
e2 = encoder_block_2(e1)
e3 = encoder_block_3(e2)
e4 = encoder_block_4(e3)
b = bottleneck(e4)
d4 = decoder_block_4(b, e4)
d3 = decoder_block_3(d4, e3)
d2 = decoder_block_2(d3, e2)
d1 = decoder_block_1(d2, e1)
output = final_conv(d1)
4.2. Effective Upsampling (Transposed Convolution)
Transposed Convolution이란?
- 컨볼루션 연산의 역과정
- 작은 특징 맵을 큰 크기로 복원하는 학습 가능한 업샘플링 방법
- Deconvolution, Up-convolution이라고도 불림
U-Net의 업샘플링 차별점
- Skip Connection으로 보완된 고해상도 정보를 추가
- 업샘플링 과정에서 발생하는 정보 손실을 최소화
- 학습 가능한 파라미터를 통해 최적의 복원 방법 학습
업샘플링 과정
입력: 28×28×1024
↓ (Transposed Conv 2×2, stride=2)
출력: 56×56×512
↓ (Concatenate with Encoder feature 56×56×512)
결합: 56×56×1024
↓ (Conv 3×3, ReLU)
최종: 56×56×512
5. Loss 함수와 학습
Loss 함수 정의
기본 개념
- 픽셀 단위로 Cross-Entropy를 계산
- 각 픽셀의 Loss에 가중치(Weight Map) w(x)를 곱하여 학습
- 경계선 픽셀에서 더 높은 가중치를 부여하여 경계 복원 성능 향상
Loss 함수 수식
E = ∑ w(x) · log(p(x))
x∈Ω
수식 설명
- E: 전체 손실(Error)
- Ω: 이미지의 모든 픽셀 집합
- x: 개별 픽셀의 위치
- w(x): 픽셀 x의 가중치 (Weight Map)
- p(x): 픽셀 x의 예측 확률 (모델의 출력)
- log(p(x)): Cross-Entropy의 로그 확률
단계별 계산 과정
- 예측 확률 계산: 모델이 각 픽셀 x에 대해 클래스 확률 p(x) 출력
- 로그 확률 계산: log(p(x))로 Cross-Entropy 손실 계산
- 가중치 적용: w(x)를 곱하여 중요한 픽셀에 더 큰 페널티 부여
- 총합 계산: 모든 픽셀에 대해 합산하여 최종 손실 E 계산
Weight Map 계산 방법
목적
- 경계선 픽셀을 강조하기 위해 가우시안 분포 기반의 가중치 사용
- 클래스 불균형(class imbalance) 보정
- 객체 간 경계를 더욱 명확하게 학습
Weight Map 수식
w(x) ∝ exp(−(d₁(x)² + d₂(x)²))
또는 더 정확한 형태:
w(x) = w_c(x) + w₀ · exp(−((d₁(x) + d₂(x))² / (2σ²)))
수식 구성 요소
- d₁(x): 픽셀 x와 가장 가까운 객체 경계까지의 거리
- d₂(x): 픽셀 x와 두 번째로 가까운 객체 경계까지의 거리
- w_c(x): 클래스 불균형 보정을 위한 기본 가중치
- w₀: 경계 가중치의 중요도를 조절하는 파라미터 (논문에서는 10 사용)
- σ: 가우시안 분포의 표준편차 (논문에서는 5픽셀 사용)
거리 계산 방법
- 각 픽셀에서 가장 가까운 두 객체 경계까지의 유클리드 거리 계산
- 경계에 가까울수록 d₁(x) + d₂(x) 값이 작아짐
- exp 함수에 의해 경계 근처에서 가중치가 크게 증가
Weight Map의 효과
픽셀 위치 d₁(x) d₂(x) w(x) 의미
─────────────────────────────────────────────
객체 중심 10 15 낮음 일반 픽셀
객체 가장자리 2 8 중간 경계 근처
두 객체 사이 1 1 높음 경계선 강조
클래스 불균형 보정
w_c(x) = 1 / freq(l(x))
- l(x): 픽셀 x의 실제 레이블(클래스)
- freq(l(x)): 해당 클래스의 빈도
- 드문 클래스일수록 높은 가중치 부여
경계선 강조의 효과
Why 경계선 강조?
- FCN의 가장 큰 단점: 경계가 흐려지는(blurry) 현상
- 의료 영상에서 세포 경계의 정확한 구분이 중요
- 작은 객체나 좁은 간격의 객체를 명확히 분리
학습 효과
- 경계선 픽셀에서의 예측 정확도를 높임
- 세밀한 세그멘테이션 결과 생성
- 인접한 객체를 명확하게 분리
예시: 세포 분리
상황: 두 개의 인접한 세포
─────────────────────────
일반 Loss: 세포1 ≈≈≈ 세포2 (경계 불명확)
Weight Map 적용: 세포1 │││ 세포2 (경계 명확)
6. U-Net과 FCN의 비교
구조 비교
| 특징 | FCN | U-Net |
|---|
| Skip Connection | 일부 계층에서만 연결 (덧셈) | 모든 단계에서 연결 (Concatenation) |
| Decoder 구조 | 단순 업샘플링 | 업샘플링 + Skip Connection 결합 |
| 복원 성능 | 경계 복원이 제한적, 흐려짐 | 경계 복원이 우수, 명확함 |
| 응용 분야 | 일반적인 세그멘테이션 | 세밀한 세그멘테이션 (의료 영상) |
| 파라미터 수 | 상대적으로 적음 | 상대적으로 많음 |
| 메모리 사용량 | 적음 | 높음 |
장단점 비교
FCN의 특징
장점
- 간단한 구조로 효율적 학습 가능
- 다양한 네트워크(VGG, ResNet 등)와 결합 용이
- 메모리 사용량이 상대적으로 적음
- 빠른 추론 속도
단점
- 업샘플링 과정에서 정보 손실
- 경계가 흐려지는 현상
- 고해상도 정보를 효과적으로 활용하지 못함
U-Net의 특징
장점
- 세밀한 복원이 필요한 응용에서 탁월한 성능
- Skip Connection을 통해 높은 해상도의 세그멘테이션 가능
- 원본 데이터의 공간 정보를 효과적으로 보존
- 제한된 데이터셋에서도 높은 성능 발휘
단점
- 연산량과 메모리 사용량이 많음
- 복잡한 장면에서 모든 객체를 정확히 구분하기 어려움
- 학습 시간이 상대적으로 길음
성능 비교 예시
바둑판 이미지 복원 테스트
원본 이미지: 명확한 바둑판 패턴
─────────────────────────────────
FCN 결과:
- 경계가 흐려짐
- 색상 복원이 부정확
- 마스크값 정확도: 약 85%
U-Net (Skip False):
- 경계가 약간 흐려짐
- 색상 복원이 개선됨
- 마스크값 정확도: 약 92%
U-Net (Skip True):
- 경계가 명확함
- 색상 복원이 정확함
- 원본과 매우 근접
- 마스크값 정확도: 약 97%
7. U-Net의 장점과 단점
장점
1. 고해상도 세그멘테이션
- Skip Connection을 통해 세부적인 경계 복원
- 원본 이미지의 공간 정보를 효과적으로 보존
- 픽셀 단위의 정확한 분류 가능
2. 데이터 효율성
- 제한된 데이터셋에서도 높은 성능 발휘
- Data Augmentation과 함께 사용하면 더욱 효과적
- 의료 영상처럼 데이터 수집이 어려운 분야에 적합
3. 다양한 확장 가능성
- 여러 변형 모델로 발전 (3D U-Net, Attention U-Net, U-Net++ 등)
- 다른 아키텍처와의 결합 용이 (ResNet, DenseNet 백본 사용)
- 다양한 도메인에 적용 가능
4. End-to-End 학습
- 입력 이미지에서 세그멘테이션 맵까지 한 번에 학습
- 별도의 후처리 과정 불필요
- 최적화가 용이
단점
1. 높은 계산 비용
- 연산량과 메모리 사용량이 많음
- 깊은 네트워크 구조로 인한 학습 시간 증가
- 고해상도 이미지 처리 시 메모리 부족 문제 발생 가능
2. 복잡한 장면에서의 한계
- 모든 객체를 정확히 구분하기 어려움
- 매우 작은 객체나 겹친 객체의 분리가 어려울 수 있음
- 클래스가 많을 경우 성능 저하 가능
3. 입출력 크기 차이
- Valid Convolution 사용으로 출력 크기가 입력보다 작음
- 전체 이미지를 세그멘테이션하려면 Overlap-tile 전략 필요
- 추가적인 처리 과정 필요
8. Semantic Segmentation 유형 비교
Semantic Segmentation
- 정의: 같은 클래스의 객체는 같은 색상(레이블)로 표시
- 예시: 모든 사람은 빨간색, 모든 자동차는 파란색
- 용도: 장면 이해, 도로 분할
Instance Segmentation
- 정의: 같은 클래스의 객체도 개별적으로 다른 색상 부여
- 예시: 사람1은 빨간색, 사람2는 초록색
- 용도: 객체 추적, 개별 객체 분석
Panoptic Segmentation
- 정의: Semantic + Instance의 결합, 모든 픽셀을 분류하고 개별 객체도 구분
- 예시: 배경(하늘, 도로)은 클래스별 색상, 객체(사람, 자동차)는 개별 색상
- 용도: 완전한 장면 이해
9. U-Net의 실무 활용
의료 영상 분석
- 세포 분할: 현미경 이미지에서 개별 세포 구분
- 종양 검출: CT, MRI 영상에서 종양 영역 식별
- 장기 분할: 해부학적 구조 자동 분할
위성 영상 분석
- 건물, 도로, 식생 분할
- 토지 이용 분류
- 변화 감지
자율주행
- 도로 영역 분할
- 차선 검출
- 보행자 및 차량 영역 식별
핵심 정리
-
U-Net은 대칭적인 U자형 구조를 가진 Semantic Segmentation 모델이다.
-
Skip Connection은 Encoder의 고해상도 정보를 Decoder로 직접 전달하여 세밀한 경계 복원을 가능하게 한다.
-
Concatenation 방식으로 채널을 결합하여 원본 데이터를 보존한다.
-
Transposed Convolution을 사용하여 학습 가능한 업샘플링을 수행한다.
-
Weight Map을 활용한 Loss 함수로 경계선 픽셀을 강조하여 학습한다.
-
FCN 대비 모든 단계에서 Skip Connection을 적용하여 우수한 복원 성능을 보인다.
-
의료 영상 분석에 특화되어 있으며, 제한된 데이터셋에서도 높은 성능을 발휘한다.
-
메모리 사용량이 많다는 단점이 있지만, 세밀한 세그멘테이션이 필요한 분야에서 탁월한 성능을 보인다.
-
경계 복원력이 뛰어나 자잘한 점(암 세포 등)을 정확히 구분할 수 있다.
-
다양한 변형 모델로 발전하여 여러 도메인에 적용 가능하다.
추가 학습 권장 사항
심화 주제
-
U-Net 변형 모델
- 3D U-Net: 3차원 의료 영상 분석
- Attention U-Net: Attention 메커니즘 추가
- U-Net++: Nested Skip Connection
- ResU-Net: Residual Connection 추가
-
고급 세그멘테이션 기법
- DeepLab: Atrous Convolution 활용
- Mask R-CNN: Instance Segmentation
- SegFormer: Transformer 기반 세그멘테이션
-
Loss 함수 변형
- Dice Loss: 영역 중첩도 기반
- Focal Loss: 어려운 샘플에 집중
- Tversky Loss: False Positive/Negative 균형
-
데이터 증강 기법
- Elastic Deformation: 의료 영상에 효과적
- MixUp, CutMix: 데이터 부족 문제 해결
- Spatial Transformation: 회전, 이동, 확대/축소
구현 관련
-
PyTorch/TensorFlow 구현 연습
- U-Net 직접 구현해보기
- Skip Connection 구현 방법 이해
- Weight Map 생성 코드 작성
-
최적화 기법
- Batch Normalization 적용
- Learning Rate Scheduling
- Mixed Precision Training (메모리 절약)
-
평가 지표
- IoU (Intersection over Union)
- Dice Coefficient
- Pixel Accuracy
- Boundary F1 Score
참고 자료
-
논문
- 원본 논문: "U-Net: Convolutional Networks for Biomedical Image Segmentation" (2015)
- FCN 논문: "Fully Convolutional Networks for Semantic Segmentation" (2015)
-
온라인 자료
- PyTorch 공식 튜토리얼
- Papers with Code (구현 코드 및 성능 비교)
- Medical Segmentation Decathlon (의료 영상 데이터셋)
-
실습 데이터셋
- Kaggle: Data Science Bowl (세포 핵 분할)
- ISBI Challenge: 신경 구조 세그멘테이션
- Cityscapes: 도시 장면 세그멘테이션