2021 네이버 부스트캠프 - Ai tech

Week 11/12/13 - Semantic Segmentation - UNet

미미수 2021. 12. 16. 12:46

Unet

 

Unet은 바이오 메디털 분야에서 처음 발표된 논문이다. 의료 영상 분석에서 Segmentation은 꽤나 중요한 부분을 차지하는데,

위 그림과 같이 세포를 분석할때 매우 얇은 선을 기준으로 분리되기도 한다. 이때 인간이 놓치는 부분을 최소화 하고자 딥러닝 모델이 사용 되는데, 데이터도 너무 부족하고(병 걸린 사람을 늘릴수도 없고,, 데이터 수집 불가.. 레이블링도 심지어 일반인이 할 수 없다. 완전 Hogh Cost 데이터란 말씀! ) 기존의 모델들이 이정도로 정교하지는 않았어서 실질적으로 불가능한 태스크였다. 

 

이런 장애물들을 상당 부분 극복한게 Unet이다!! 그럼 unet의 구조를 살펴보자

 

 


Unet Architecture

 

가장 큰 특징중 하나는 Contracting Path(encoder) 와 Expanding Path(decoder) 가 대칭으로 이루어져 U자모양을 형성한다는 점이다.

 

 

< Contracting Path >

입력 이미지의 전반적인 특징을 추출하며 feature map의 사이즈를 줄여 나간다. 

이때 이미지의 전반적인 특징을 추출하고 context를 포착한다.

 

그림을 보면 알 수 있듯이 feature map이 max pooling으로 인해 단계마자 반절씩 감소한다.

 

 

< Expanding Path >

 

줄어든 feature map의 정보를 input이미지의 resolution에 맞게 upsampling해주면서 지협적인 정보를 추가한다 -> Localization

이 때, Skip Conncetion의 역할이 매우 중요한데 자세한건 아래에서 다시 언급하겠다.

 


- Zero Padding을 적용하지 않아서 특징맵의 크기는 감소한다

- Contracting Path에서는 channel수가 2배로 증가하고 resolution은 2배로 감소한다.

- Expanding Path에서는 반대로 channel수가 2배로 감소하고 resolution은 2배로 증가한다.

- Contracting Path에서 각 단계별 feature map을 Extracting Path에서 단계별로 맞은 resolution끼리 더해준다!!!

 

 

 

여기까지가 Unet의 구조적 특징이다. 

구조적 특징 외에도 Unet에 적용된 technique들을 살펴보겠다.

 


 

Unet 에 적용된 Techniques

 

1. Data Augmentation

 

위에서 Unet이 본래 의료영상분석을 위해 만들어 졌다는 점을 다시 생각해보자. 

세포를 분석해야되는데 모든 인간은 세포의 모양이 조금씩 다르다.

이런 특성들에 있어서 robust하고자 Unet 은 Random Elastic Deformation을 적용하였다.

 

말그대로 압력을 주어서 모양을 짜그러뜨리는 증강기법이다.

 

 

2. Pixel-wise loss weight를 계산하기 위한 Weight map 생성

경계 부분을 더 잘 분류하기 위해 가중치 맵을 사용한다.

 

같은 클래스를 가지는 인접한 셀들을 더 잘 나누기 위해 경계 부분에 pixel-wise하게 가중치를 제공한다.

수식을 살짝 풀어서 설명하자면,

 

- cell의 중심 부분일수록 d1 d2가 작아진다. (인접한 cell과 가까운 부분은 중심보다 가장자리)

- 따라서 exp() 값이 작아진다.

- w(x)값이 작아진다. 

- cell의 가장자리 부분일수록 반대로 성립.! 

 

↓↓ 코드 참고 ↓↓

 

GitHub - milesial/Pytorch-UNet: PyTorch implementation of the U-Net for image semantic segmentation with high quality images

PyTorch implementation of the U-Net for image semantic segmentation with high quality images - GitHub - milesial/Pytorch-UNet: PyTorch implementation of the U-Net for image semantic segmentation wi...

github.com

 


Unet 의 한계점

 

1. Unet의 깊이는 4로 고정되었다

각각의 데이터셋마다 최고의 성능을 보이는 깊이가 있을테지만, Unet에서는 그 부분을 고정값으로 둬 최고성능을 보장하지 못했다.

그리고 최적의 깊이를 탐색하는데 자원과 비용이 많이 든다.

 

2. 단순한 Skip Connection

동일한 깊이를 가지는 Encoder과 Decoder끼리만 연결이되는 아주 심플한 구조!

 

 

☞☞☞☞ 그래서 이럳 문제점들을 극복한 U-Net ++가 등장하는데,,

다음편에 계속