본문으로 건너뛰기
#semantic-segmentation#fully-convolutional-network#u-net#deeplab#computer-vision

현대 인공지능 VI — 의미론적 영상 분할: FCN·U-Net·DeepLab

픽셀 단위 예측, encoder-decoder, skip connection, dilated convolution과 다중 스케일 분할을 다룬다.

Series map

현대 인공지능 · 8편 학습 지도

기초 수학에서 생성·표현학습까지 이어지는 8편 학습 경로. 빈 번호나 자리 채우기용 글 없이, 실제 확보된 강의자료를 여덟 단계로 연결한다.

6 / 8
  1. 기초 게시됨 AI·ML·DL에서 확률·최적화까지 AI·ML·DL의 관계, 선형대수, 확률변수, 가우시안 모델, WSS, 손실함수와 경사하강법을 연결한다.
  2. 학습 문제 게시됨 머신러닝의 기본 과제와 일반화 분류·회귀·밀도추정에서 과적합, 정규화, 검증, SVM, Bayes 분류와 차원의 저주까지 다룬다.
  3. 신경망 게시됨 퍼셉트론·MLP·CNN과 컨볼루션 선형 판별기에서 다층 퍼셉트론으로 확장하고, 1D·2D 컨볼루션과 CNN의 계산 구조를 정리한다.
  4. 최적화 게시됨 기울기 기반 최적화: GD에서 OGM까지 Lipschitz 연속성, GD·PSD·PGD·FGM과 최적화된 기울기 방법 OGM의 수렴 구조를 비교한다.
  5. 영상 분류 게시됨 이미지 분류의 발전: AlexNet에서 SE Network까지 AlexNet, VGG, GoogLeNet, ResNet, WRN, DenseNet과 채널 재가중 SE Network의 발전을 추적한다.
  6. 픽셀 이해 읽는 중 의미론적 영상 분할: FCN·U-Net·DeepLab 픽셀 단위 예측, encoder-decoder, skip connection, dilated convolution과 다중 스케일 분할을 다룬다.
  7. 생성·복원 게시됨 영상 잡음제거·VAE·확산모델 MMSE와 비선형 필터에서 VAE의 ELBO, 재매개변수화, DDPM의 순방향·역방향 확산으로 이어진다.
  8. 표현학습 게시됨 대조 표현학습: InfoNCE·SimCLR·BYOL·CLIP 양성·음성 쌍, InfoNCE, augmentation, memory bank, SimCLR·BYOL과 이미지-언어 CLIP을 연결한다.
게시된 편만 링크로 연결된다. 후속 PDF의 내용을 담은 글이 공개되면 같은 위치가 자동으로 활성화되며, 빈 게시물은 만들지 않는다.

의미론적 영상 분할은 이미지를 보고 “고양이”라고 답하는 데서 멈추지 않는다. 어느 픽셀이 고양이이고, 어느 픽셀이 배경인지를 같은 해상도의 label map으로 돌려준다. 이 한 가지 차이 때문에 분류망의 마지막 층을 바꾸는 것만으로는 부족하다. 넓은 문맥을 보는 능력과 정확한 위치를 복원하는 능력을 동시에 설계해야 한다.

#6.1 분류에서 dense prediction으로

분류는 입력 전체를 하나의 feature vector로 압축한다. 반면 semantic segmentation은 각 위치마다 (K)개 class score를 내야 한다. 출력 tensor가 H × W × K가 되고, 같은 class에 속한 서로 떨어진 물체는 같은 label을 받는다. 물체마다 별도의 ID를 붙이는 instance segmentation과 구분되는 지점이다.

분류에서 픽셀별 예측으로

한 장의 이미지에 하나의 class를 붙이는 대신, 모든 위치에서 class score를 계산해 원래 해상도의 label map을 만든다.

FCN은 fully connected layer를 convolution으로 바꾸어 임의 크기 입력을 공간 score map으로 처리했다. 깊은 layer의 coarse semantics와 얕은 layer의 fine appearance를 skip 구조로 합친 것이 이후 분할망의 기본 문법이 됐다.

#6.2 encoder–decoder가 잃고 되찾는 것

encoder는 stride와 pooling으로 해상도를 줄이며 receptive field를 넓힌다. 덕분에 “이 픽셀이 자동차의 일부인가”를 넓은 문맥에서 판단하지만, 정확한 경계는 흐려진다. decoder는 interpolation, unpooling, transposed convolution 등으로 score map을 키운다.

encoder–decoder의 병목과 복원

encoder는 넓은 문맥을 얻는 대신 위치 정보를 압축하고, decoder는 interpolation 또는 transposed convolution으로 공간 해상도를 복원한다.

Transposed convolution은 convolution의 계산 그래프를 뒤집어 입력 하나가 여러 출력 위치에 기여하게 한다. 출력 크기는 다음 관계로 확인할 수 있다. 여기서 (s)는 stride, (p)는 padding, (d)는 dilation, (k)는 kernel 크기, (o)는 output padding이다.

Transposed convolution output size
Hout=(Hin1)s2p+d(k1)+o+1H_{\mathrm{out}}=(H_{\mathrm{in}}-1)s-2p+d(k-1)+o+1

kernel overlap이 위치마다 균일하지 않으면 checkerboard artifact가 생길 수 있다. 실무에서는 interpolation → convolution 조합이 더 안정적인지 함께 비교한다.

#6.3 U-Net과 skip connection

U-Net은 contracting path와 expanding path를 대칭으로 두고, 같은 해상도의 encoder feature를 decoder로 직접 보낸다. decoder가 깊은 층의 “무엇”과 얕은 층의 “어디”를 함께 보게 하는 구조다.

U-Net: 같은 해상도의 특징을 건너 보내기

깊은 층의 의미 정보와 얕은 층의 위치 정보를 concatenate해 작은 물체와 경계를 되살린다.

skip connection은 단순한 정보 우회로가 아니다. encoder와 decoder의 feature 크기가 맞는지, concatenate 뒤 channel 수가 얼마나 커지는지, crop 또는 padding이 필요한지를 모두 결정한다. Residual U-Net, FC-DenseNet, RefineNet도 이 다중 해상도 feature 재사용을 서로 다른 방식으로 확장한다.

#6.4 dilation으로 해상도를 지키며 문맥 넓히기

일반 convolution을 계속 downsample하면 문맥은 넓어지지만 경계가 거칠어진다. atrous convolution은 kernel 원소 사이에 간격 (r)을 두어 feature map 크기를 유지하면서 receptive field를 키운다.

Atrous convolution
y[i]=kx[i+rk]w[k]y[i]=\sum_k x[i+r k]w[k]
서로 다른 dilation rate로 여러 크기의 문맥 보기

feature map 해상도를 더 줄이지 않고 간격을 벌린 kernel을 병렬 적용한다. DeepLab의 ASPP는 이 응답들을 합쳐 multi-scale context를 만든다.

PSPNet은 서로 다른 크기의 pooling으로 global context를 모으고, DeepLabv3은 여러 dilation rate의 ASPP를 사용한다. DeepLabv3+는 ASPP encoder에 가벼운 decoder를 더해 object boundary를 정교하게 복원한다. 세 모델의 차이는 “multi-scale context를 어디서 만들고, 경계를 어떻게 되살리는가”로 읽으면 된다.

#6.5 pixelwise loss와 class imbalance

가장 직접적인 학습 목표는 모든 픽셀에 cross entropy를 더하는 것이다.

Pixelwise cross entropy
LCE=i=1HWc=1Kyi,clogpi,c\mathcal{L}_{\mathrm{CE}}=-\sum_{i=1}^{HW}\sum_{c=1}^{K}y_{i,c}\log p_{i,c}

하지만 도로 영상의 하늘·도로처럼 큰 class가 작은 표지판·보행자보다 훨씬 많은 픽셀을 차지하면, 평균 loss는 큰 class에 끌린다. class weight를 주면 희소 class의 오류를 더 크게 반영할 수 있다.

Class-weighted cross entropy
LWCE=icwcyi,clogpi,c\mathcal{L}_{\mathrm{WCE}}=-\sum_i\sum_c w_c y_{i,c}\log p_{i,c}

Dice 계열 목표는 예측 영역과 정답 영역의 겹침을 직접 본다. 작은 foreground나 의료영상처럼 심한 불균형에서 유용하지만, batch 구성과 smoothing ε에 민감하다.

Soft Dice coefficient
Dice(p,y)=2ipiyi+ϵipi+iyi+ϵ\operatorname{Dice}(p,y)=\frac{2\sum_i p_i y_i+\epsilon}{\sum_i p_i+\sum_i y_i+\epsilon}

cross entropy와 Dice는 서로 대체재라기보다 픽셀별 calibration영역 겹침이라는 다른 관점을 제공한다. 실제 학습에서는 둘을 합치고 per-class IoU와 boundary 품질을 따로 확인하는 경우가 많다.

#6.6 MRF: 예측 뒤에 공간 구조를 넣는 방법

CNN 이전부터 segmentation은 이웃 픽셀이 같은 label일 가능성이 높다는 가정을 써 왔다. Markov random field(MRF)는 한 위치의 조건부 분포가 전체 영상이 아니라 neighborhood에만 의존한다고 둔다. Hammersley–Clifford 관점에서는 이를 clique potential의 energy와 Gibbs distribution으로 표현한다.

Gibbs distribution
p(x)=1Zexp ⁣(E(x)T)p(x)=\frac{1}{Z}\exp\!\left(-\frac{E(x)}{T}\right)

분할 energy는 보통 두 항으로 읽는다. unary term은 관측 (x_i)가 label (y_i)에 얼마나 맞는지, pairwise term은 이웃 label 조합이 얼마나 자연스러운지를 나타낸다.

Segmentation energy
E(y;x)=iUi(yi;xi)+λ(i,j)EVij(yi,yj)E(y;x)=\sum_i U_i(y_i;x_i)+\lambda\sum_{(i,j)\in\mathcal{E}}V_{ij}(y_i,y_j)
MAP estimate
y^MAP=argmaxyp(yx)=argminyE(y;x)\hat y_{\mathrm{MAP}}=\arg\max_y p(y\mid x)=\arg\min_y E(y;x)
MRF와 ICM: 이웃 픽셀의 합의를 반복해서 찾기

각 픽셀의 관측 적합도와 이웃 label의 매끄러움 비용을 더하고, ICM은 한 위치씩 가장 낮은 local energy의 label로 갱신한다.

Iterated Conditional Modes(ICM)는 현재 이웃 label을 고정하고 한 픽셀의 가장 좋은 label을 선택하는 coordinate descent다.

ICM coordinate update
yiargminc[Ui(c;xi)+λjN(i)Vij(c,yj)]y_i\leftarrow\arg\min_{c}\left[U_i(c;x_i)+\lambda\sum_{j\in\mathcal{N}(i)}V_{ij}(c,y_j)\right]

빠르고 직관적이지만 초기화와 local minimum에 민감하다. 오늘날에는 CRF 후처리 대신 neural decoder가 공간 일관성을 직접 학습하는 경우가 많아졌어도, unary와 pairwise를 분리해 보는 관점은 여전히 유용하다.

#6.7 무엇을 측정해야 하는가

pixel accuracy만 보면 배경을 잘 맞힌 모델이 과대평가될 수 있다. class별 Intersection over Union(IoU)은 예측과 정답의 합집합 가운데 교집합이 차지하는 비율이다.

Intersection over Union
IoUc=TPcTPc+FPc+FNc\operatorname{IoU}_c=\frac{\mathrm{TP}_c}{\mathrm{TP}_c+\mathrm{FP}_c+\mathrm{FN}_c}

보고서에서는 보통 class별 IoU와 그 평균 mIoU, 작은 class의 recall, boundary metric을 함께 본다. resize와 padding을 원복한 뒤 평가했는지도 중요하다. 한 픽셀의 정렬 오류가 얇은 구조물에서는 큰 점수 차이가 될 수 있기 때문이다.

#6.8 한 번에 연결하기

  1. encoder가 넓은 문맥을 만든다.
  2. dilation 또는 pyramid가 여러 크기의 문맥을 모은다.
  3. skip connection이 위치 정보를 decoder에 전달한다.
  4. decoder가 원래 해상도의 class score를 복원한다.
  5. cross entropy·Dice로 학습하고 IoU·boundary 품질로 평가한다.

FCN은 dense prediction의 문을 열었고, U-Net은 localization을 되살리는 skip 구조를 정착시켰으며, DeepLab 계열은 dilation과 spatial pyramid로 문맥을 확장했다. 이 세 축을 이해하면 새로운 segmentation architecture도 “문맥, 해상도, 결합 방식”으로 분해해 읽을 수 있다.

Connect