1. U-Net++란
U-Net++는 DenseNet의 Dense block 아이디어를 사용하여 U-Net을 향상시킨 것이다. 기존의 U-Net과 다른 점은 아래의 세 가지이다.
① skip pathways에 convolution 층이 있는 것이다. 이것은 encoder과 decoder 특징 맵 사이의 semantic gap을 연결해준다.
② skip pathways에 dense skip이 있다. 이것은 기울기의 흐름을 향상시킨다.
③ 모델 가지치기 그리고 향상이 가능하게 하거나 최악의 경우 하나의 loss 층만을 사용하것과 유사한 성능을 달성하는 deep supervision이 있다.
2. U-Net++ 구조
- U-Net++는 encoder 서브 네트워크나 decoder 서브 네트워크가 뒤따라 있는 백본(backbone)으로 시작한다.
- 두 개의 서브 네트워크를 이어주고 deep supervision(빨간색 선)이 존재하도록 Re-designed skip pathways(초록색선과 파란색선)이 있다.
3. Re-designed skip pathways
- 위 그림은 어떻게 feature maps가 U-Net++의 상위 skip pathway 어떻게 통과하는지에 대한 하나의 예를 보여준다.
- 다른 예로는, 첫 번째 그림과 같이 nodes X⁰𝄒⁰과 X¹𝄒³ 사이의 skip pathway를 고려할 수 있다. skip pathway는 세 개의 convolution 층이 있는 dense convolution block으로 구성되어 있다.
- 각 컨볼루션 레이어 앞에는 동일한 Dense 블록의 이전 컨볼루션 레이어의 출력과 해당하는 하위 Dense 블록의 업 샘플링된 출력을 융합하는 연결(concatenation) 레이어가 있다.
- 공식적으로 아래의 식을 따른다:
- H()는 convolution 동작 다음의 활성화 함수이며, U()는 up-sampling layer을 나타낸다. 그리고 []는 concatenation layer을 나타낸다.
-이러한 아이디어는 DenseNet으로부터 온 것이다.
여기에서 주된 아이디어는 융합 전에 인코더와 디토더의 기능 맵 사이의 semantic gap을 연결하는 것이다.
4. Deep Supervision
- Deep Supervision은 모든 세그먼테이션 브랜치(segmentation branches)들로 부터 출력된 아웃풋의 평균화하는 정확한 모드나 nal 세그먼이션 맵이 세그멘테이션 브랜치 중 한 개를 선택하는 빠른모드로서, 그러한 선택은 모델 pruning정도와 속도 이득(gain)에 영향을 준다.
- 중첩된 스킵 경로로 인해, U-Net++는 여러 시맨틱 레벨에서 전체 해상도 특성 맵을 생성한다. 따라서 손신을 4개의 시맨틱 레벨로 부터 예측된다.
- 또한 손실 함수로써 binary cross-entropy와 dice coefficient를 결합한 것을 사용한다.
여기서 N은 batch size이다.
5. 실험 결과
1) Datasets
서로 다른 의료 영상 양식(modalities)의 병변(lesions)/ 기관(organs)을 아우르는, 네 개의 메디컬 이미지 데이터셋을 사용하여 모델을 평가하였다.
2) Baseline Models
- 기존의 U-Net과 Wide U-Net을 비교한 것이다.
- Wide U-Net은 U-Net++와 비슷한 파라미터의 숫자를 사용한 더 많은 커넬을 사용하여 U-Net을 수정한 것이다.
3) 결과
- Deep Supervision이 없는 U-Net++는 U-Net과Wide U-Net양쪽의 점수보다 더 좋은 성능을 달성하였다. IoU점수에서 평균이 2.8에서 3.3으로 향상되었다.
- Deep Supervision이 있는 U-Net++는 Deep Supervision이 없는 U-Net++보다 0.6점이 향상되었다.
4) Model Pruning
- UNet++ L3은 IoU를 0.6 포인트만 저하시키면서, 평균 32.2%의 추론 시간 단축을 달성합니다.
- 보다 적극적인 pruning은, 추론 시간을 더 줄이지만, 정확도(significant accuracy)는 크게 떨어집니다
5) 질적인 결과
(cf) U-Net++를 Tensorflow로 구현한 github
https://github.com/CarryHJR/Nested-UNet
참고자료