업데이트:

카테고리: , ,

UNet과 UNet++ 에 대한 기록이다.

1. UNet


그

UNet은 FCN 기반 모델이다. 기존의 FCN은 encoder와 decoder를 통해 semantic segmentation을 진행했다. decoder에 사용된 upsampling은 bilinear 기법을 사용했다. 근데, 단점이 있다. 층이 깊어질수록 high-level feature들만 존재했기 때문에, localization이 다소 취약하다.

그래서 UNet은 skip connection이란 개념을 도입했다. 바로 encoder와 decoder의 채널수가 동일한 라인에서 채널을 concatenate를 하는 것이다. 왜냐하면 high resolution일수록 localization의 특징이 더 잘띄기 때문이다. 그래서 localization과 semantic information 모두를 챙길 수 있게 된다.

Encoder

내 프로젝트에선 패딩을 주었다. max pooling은 2를 주어서 2배씩 이미지가 작아짐. 채널은 2배로 증가함.

Decoder

먼저 기본 feature map에 2배로 upsampling을 진행하고, 채널은 2배로 줄인다. 그리고 같은 라인의 encoder 정보를 skip-connection해서 채널에 추가한다. conv를 2번 진행하고, 다시 upsampling, skip-connection을 반복해 이미지 크기와 같게 만든다.

내 프로젝트의 학습 및 추론

학습과 추론은 똑같은 개념으로 진행된다. 다만, 논문하고 다르게 배경, anode, cathode를 생각해서 출력을 3개의 채널로 했고, 각각이 mask가 될 수 있게 학습했다. 추론은 anode,cathode 채널만 추출했다.



2. UNet++


그

UNet++은 UNet 기반 모델이다. 기존의 UNet의 skip connection을 좀더 진화 시켰다. Densenet을 모방했다. encoder와 decoder의 feature map간의 semantic gap을 더 줄이기 위해서 더 많은 skip connection들을 추가했다. 이 때, 중간의 초록색 노드들은 다음 단계의 conv층을 upsampling하여 가져와 채널을 concatenate하고 convolution을 취한 것이다.

DeepSupervision은 속도와 성능의 trade-off를 선택해서 사용자가 가져갈 수 있게끔 해준다.

DenseNet의 효과

딥러닝 공부방님의 블로그를 참고했다

ㄱ

아마 UNet++의 저자는 다음의 DenseNet의 효과를 다소 기대하고 사용했는지도 모르겠다.

장점

strong gradient flow와 information flow를 갖는다. 이는 기울기 소실 문제를 완화하고 feature reuse 효과가 있다. 기존의 CNN 모델은 처음 레이어의 피쳐맵이 다음 레이어의 입력값으로 전달된다. 많은 레이어를 통과하여 신경망의 끝에 다다르면, 처음 레이어의 피쳐맵에 대한 정보는 사라질 수 있다. 이것을 feature reuse 문제라고 한다. DenseNet은 처음 레이어의 피쳐맵을 마지막 레이어의 피쳐맵까지 연결한다. 따라서 정보가 소실되는 것을 방지할 수 있다. 오차 역전파법을 진행하다 보면 초기의 gradient는 소실될 수 있다. 초기 값을 마지막으로 직접적으로 전달하므로 오차 역전파를 진행할 때도, 값이 직접적으로 전달된다. 따라서 기울기 소실 문제도 완화가 된다. 다양한 레이어의 피쳐맵을 연결해서 학습되기 때문에 정규화 효과도 있다고 한다.

내가 UNet을 공부한 이유 :

1 분 소요