본문 바로가기

딥러닝/Semantic Segmentation

Unet 논문 리뷰

요즘은 Semantic Segmentation 관련 풀잎스쿨을 수강하고 있다. 이번 주차엔 SegNet, U-Net, U-Net++에 대해 공부해봤는데, U-Net은 일하면서도 쓸 일이 있어서 자세히 공부할 수 있었다.

 

일단 U-Net은 지난번에 포스팅한 DeconvNet과 마찬가지로 Semantic Segmentation을 위한 알고리즘이다.

 

(대충 들어보면 Semantic Segmentation의 시초가 FCN, 큰 획을 그은 것이 U-Net, 요즘 대세가 Deeplab v3인 것 같다)

특징

1. 네트워크가 두 부분으로 구성됨

  • 특징/맥락을 학습하는 contracting path
  • 정확한 localization을 위한 expanding path

2. augmentation 활용 학습함

   -. shift, rotation, (특히) elastic deformation, dropout layers at the end of contracting path

3. end2end 학습

4. 적은 이미지로 학습 잘 됨

5. 빠름 (512x512 : 1초 미만)

 

배경

1. 레이블링된 학습 데이터의 부족과 네트워크의 크기가 문제가 됐었음

2. 특히 의학용 데이터 수 적어서, "슬라이딩 윈도우" 기반으로 학습됨

   -. 픽셀 주위의 작은 단위(patch)로 잘라서 해당 픽셀 클래스를 예측하는 방법

   -. 장점 : localize 가능, 학습데이터 수가 많아짐

   -. 단점 : 느림 (패치 단위로 늘려서), 겹치는 부분이 많아짐

3. 정확한 위치 파악 VS 전체적 맥락 파악 간 trade-off 관계있음

   -. patch가 크면 max pooling 더 많이 해서 localization 정확도 떨어짐

   -. patch 작으면 적은 영역에서의 맥락만 파악가능

   -. 최근 여러 layer에서의 피쳐들을 모두 사용해서 둘 다 챙길 수 있게 됨

 

구조

1. FCN을 기반으로 해서 적은 이미지로 학습 가능하고, 정확한 segmentation할 수 있도록 개선함

  • FCN
  • Pooling으로 압축하는 부분 뒤에 upsampling layers를 더해서 segmentation map 해상도를 키움
  • 압축하는 네트워크에서 얻은 고해상도 피쳐가 upsampling된 것과 결함됨 (skip connection)

2. Unet에서는 upsamling 부분에 많은 feature channels를 둬서 맥락정보부터 고해상도로 propagate 가능하게 함

3. Contracting path와 Expanding path가 대칭적인 구조를 가짐

4. fully connected layer 없어서 어떤 크기의 인풋이어도 괜찮음

5. Overlap-tile 전략을 사용해서 큰 이미지도 gpu 제약을 덜 받음

  • Overlap-tile 전략
  • 임의 크기의 큰 이미지에 대해서도 매끄러운 segmentation을 가능하게 하기 위한 방법
  • padding을 사용하지 않는 Unet 구조 특성 상, 파란색 박스를 입력으로 넣었을 때 노란색 부분에 대한 segmentation map만이 취득된다. 그래서 적절하게 오버랩되게끔 파란박스를 이동시키면, 세그멘테이션 맵을 얻을 때 중복되는 영역 없이 매끄러운 segmentation map을 얻을 수 있다.
  • 이 때, 오버랩할 수가 없는 이미지 테두리 영역의 픽셀을 보완하기 위해 테두리 부분은 mirroring 하여 예측한다

6. 마지막에 1x1 Conv를 사용해서 64개 픽쳐벡터를 클래스 개수로 맞춰줌