본문 바로가기

논문 정리

[간단리뷰]Unet++

 

 

Unet++의 구조적인 특징을 논문에서는 Unet의 구조에서 Nested된 구조를 가지고 있고, 의료 영상을 조금더 잘 Segmentation을 하기 위한 목적으로 만들어진 모델이라고 합니다.

 

우선 위에서 설명한 것과 같이  Unet의 구조에서 Nested된 구조를 가지고 있기 때문에 Unet과 유사한 구조를 가지고 있고, 기존 Unet에 비해서 조금더 깊어지고, 각 layer에서 나온 feature들 간의 loss를 계산한다는 점이 기존 Unet과의 차이 점입니다.

 

 

(A)Unet, (B)Unet++

 

 

Unet++를 이해하기 위해서는 우선 Unet에 대해서 알아야합니다. Unet은 기본적으로 Encoder-Decoder의 구조를 가지고 있습니다.  Encoder에서는 down-sampling을 진행하고, decoder 부분에는 Up-sampling을 진행합니다. Encoder 부분을 Contracting Path(아래 그림에서 왼쪽 빨강색 박스)라고도 부르고, Decoder 부분을 Expanding Path (아래 그림에서 오른쪽쪽 빨강색 박스) 라고 부릅니다. 그리고 Contraction Path와 Expanding Path를 중간에 이어주는 부분을 Bottle Neck(노란 박스 영역)이라고 부릅니다.

 

해당 구조에서 각 path의 역할입니다.

  • Contracting Path 부분은 이미지의 Context Information을 추출
  • Expanding Path의 부분에서는 Contracting Path에있는 feature map과 Expanding Path의 feature map을 결합해서 pixel의 위치 정보들을 결합해 각 pixel이 어느 객체에 속하는지 구분하는 작업을 진행

이때, Contracting Path에있는 feature map과 Expanding Path의 feature map을 결합을 Skip Connection이라고 부릅니다. Skip Connection 시에 feature map을 그대로 가져와서 결합하지 않고, cropping을 통해서 feature map의 크기를 동일하게 일치시킨 후에 결합을 합니다.

 

 

이 부분에 skip connection을 보면 encoder 부분의 feature map은 568x568 크기인데 비해서 결합해야될 encoder 부분에 feature map의 크기는 392 x 392의 크기를 가지고 있습니다. 따라서 cropping을 통해서 feature map의 크기를 동일하게 

맞추기 위해서 cropping을 수행합니다. 그리고, 최종 출력인 Segmentation map의 크기가 Input Image 크기보다 작습니다.

 

segmentation map의 크기가 Input Image 크기보다 작은 이유는 padding 연산 없이 convolution 연산을 진행하기 때문에 예측 결과로 나오게 되는 segmentation map의 크기가  Input Image 크기보다 작아지게 됩니다.

 

Unet 논문에서는 Overlap-Title Input이라는 전략을 사용한다고 합니다. Fully Convolutional Network 구조의 특성상 입력 이미지의 크기에 제약이 없기 때문에 큰 이미지를 전체를 사용하는 대신에 tile 또는 patch 단위로 나누어서 모델에 입력으로 사용했다고 합니다.

 

만약에 모델에 입력 이미지 부분이 파란색 영역과 빨강색 영역이 라면,

segmentation map의 output으로 나온 영역이 노란색 부분과 초록색 입니다.

 

이미지를 입력시에 경계 부분 픽셀에 대한 세그멘테이션을 위해 0이나 임의의 패딩값을 사용하는 대신 이미지 경계 부분의 미러링을 이용한 Extrapolation 기법을 적용했다고 합니다.

 

따라서 skip connection시에 Extrapolation 기법을 적용한 부분과 슬라이딩 윈도우를 통해서 중첩된 부분에 대해서

 

cropping을통해서 실제 예측을 해야되는 영역에 대한 예측을 진행합니다 !!

또한 skip connection은 output의 세부 정보를 복구하는데 효과적이라고도 합니다.

 

지금까지는 간단하게 Unet의 구조를 살펴 보았습니다.

 

Unet++의 Introduction에 대해서 간단하게 살펴 보면 다음과 같습니다.

  • Unet++는 다른 분야보다는 의료 분야의 이미지를 조금 더 정확하게 Segmentation하는 것을 목적으로 제안된 구조입니다.
  • Unet++는 Nested and Dense skip connection을 수행한다는 특징이 있습니다.
  • encoder의 high resolution feature와 decoder의 high level feature가 fusion 되기 전에 high resolution feature와 high leve feature 간의 연산을 추가해서 나온 결과들과 같이 fusion이 될 때 모델이 조금더 디테일한 사항들을 캡처 할 수 있다는 것이 입증이 됐다고 합니다.
  • encoder와 decoder 사이의 semantically 차이가 적을 수록 학습이 더 잘 된다고 합니다.
  • 결과적으로 dissimilar feature map과 fusion해서 성능을 더 높일 수도 있다고 합니다.
  • Unet과 Wide Unet 보다 더 좋은 성능을 보인다고 합니다.

 

위에 사진은 논문에 있는 Unet++의 구조입니다. 해당 논문에서는 기존 Unet과 같은 부분은 검정색으로 표현을 했고, 파란색, 초록색, 빨강색은 기존 Unet에 결과에서 보다 더 정확하게 Segmentation을 하기 위해서 추가된 구조입니다.

 

우선 파란색 부분에 대해서 이해하기 위해서는 densenet에 대해서 알아야합니다.

 

우선 DenseNet이란, 모든 layer들을 Densely하게 연결하는 Dense Connectivity pattern을 사용하는 네트워크이고, 적은 parameter 수로 높은 정확도와 낮은 연산량을 가지고 있다는 특징이 있습니다. 

DenseNet 구조

 

DenseNet의 구조를 참고해서  Unet++의 파란색 부분에 대한 구조를 만들었고, 이를 Unet++에서 nested and dense skip connection이라고 부르는 부분입니다.

 

DenseNet의 구조에서 nested and dense skip connection으로 사용한 부분은 각 layer에서 나온 feature map들을 이전 layer들을 제외한 뒤에 모든 layer에 전달하는 것을 참고해서 만들 었다고 합니다.

 

해당 부분을 논문에서는 Re-designed skip pathways라고 부르고 있습니다.

 

해당 구조와 공식은 아래 사진과 같습니다.

해당 구조의 특징은 Encoder Decoder의 Feature Map 사이의 Semantic Gap을 연결한다는 특징을 가지고 있다고합니다. 즉,  Semantic Gap의 연결을 통해서 semantically 차이를 줄여  조금더 디테일한 사항들을 캡처 할 수 있다는 것이 입증되었다고 합니다.

 

기존 Unet의  Skip Connection을 통한 연결을 유지하면서, 각 layer의 feature map들을 이후 layer들에 같이 입력으로 준다는 것을 알 수 있습니다.

 

Re-designed skip pathways는 X0,0 layer에서 X1,3의 skip pathway를 고려하고있고, skip pathway는 3개의 convolution layer가 있는 dense convolution block으로 구성되어져 있다고 합니다.

 

Re-designed skip pathways에서 x0,1 layer에서의 계산 공식은 x0,1 = H[x0,0, U(x1,0)]입니다.

  • H : conv 연산후에 activation 함수까지 적용하는 함수를 의미합니다.
  • x0,0 : 이전 layer인 x0,0 layer에 받은 feature를 의미합니다.
  • U : Up-Sampling을 의미합니다.
  • x1,0 : x1,0  layer에서 받은 feature를 의미합니다.
  • [] : concat을 의미

이를 바탕으로 x0,2에서 x0,4 까지의 연산을 표현하면 다음과 같습니다.

  • x0,2 = H[x0,0, x0,1, U(x1,1)] 
  • x0,3 = H[x0,0, x0,1, x0,2, U(x1,2)]
  • x0,4 = H[x0,0, x0,1, x0,2, x0,3, U(x1,3)]

해당 공식에서 Up-sampling을 수행한 feature들은 high-level의 feature를 의미하며, 해당  high-level의 feature를 Up-sampling해서 반영하기 때문에 feature map 사이의 semantic한 gap을 연결해주는 특징을 가지고 있는 부분입니다.

 

Unet++는 Deep Supervision을 적용하는데, Unet++ 총 2가지 모드로 작동합니다.

  • 평균화 모드
  • 가속화 모드

평균화 모드는 모든 semantic level의 Output에 대한 결과에 대해서 평균화해서 다양한 level에 대한 semantic한 level에 대한 결과를 반영할 수 있다고 합니다.

 

가속화 모드는 마지막에 해당하는 semantic Level의 Output만을 선택해서 결과를 반영한다고 생각하면됩니다.

 

저자는 최종적으로 모든 semantic level에서의 output을 구해서 loss를 계산하는 것이 모델의 성능을 높이는 데, 더 도움이 된다고하여 평균화 모드를 추천한다고합니다.

 

그리고 Loss 함수입니다.

 

Loss 함수는 Binary Cross Entropy Loss와 Dice Coefficient Loss를 사용해 적용했다고 합니다. N은 Batch Size를 의미합니다.  마지막으로 Unet++는 각각의 layer에서 Loss를 계산하고 최종적으로 이를 평균화한 값을 최종적인 Loss 값으로 사용한다고 합니다.

 

해당 논문에서 사용한 데이터 셋 목록은 다음과 같습니다.

 

실험 결과 전반적으로 Unet 과 Wide Unet 보다 성능이 좋았고, SOTA를 달성했다고합니다.

 

해당 표에서 위에있는 Unet++가 가속화 모드이고, 아래 Unet이평균화 모드입니다. 해당 표에서 알 수 있듯이 가속화 모드와 평균화 모드 전부 Unet 과 Wide Unet 보다 성능을 뛰어 넘었다는 것을 알 수 있습니다.

 

 

L1 -> L4 갈 수록 parameter수가 증가하합니다. L1의 경우, parameter의 수가 적고 Inference 속도는 빠르지만 성능은 좋지 않습니다. L3의 경우, 가장 적당하다고하며, 성능이 좋으면서, Inference 속도가 적당히 빠르다고도합니다.

 

 

 

 

시각화 결과를 비교해 봤을 때도, 다른 모델들에 비해서 비교적 정확하다는 것을 알 수 있습니다.

 

논문에서는 결과적으로 Unet++는 더 정확한 Segmentation을 요구하는 의료 이미지에서 사용을 위해서 제안했고, re-designed skip pathways와 deep supervision을 적용해서 더 좋은 결과를 얻을 수 있었다고 합니다. 또한 high-level feature를 up-sampling을 통해서 반영하기 때문에 feature들간의 semantic한 gap을 줄일 수 있었다고합니다. 따라서 조금 더 정확한 segmentation이 가능해 졌다고 합니다.