[딥러닝] Semantic segmentation(U-Net)

전래창·2021년 7월 9일
0

딥러닝

목록 보기
5/31

U-Net

이번에는 semantic segmentation 방법 중 대표적인 모델 UNet에 대해서 알아보자

의미론적 분할(의학 촬영에 적용)을 위해 개바된 이 모델은 특징 깊이를 증가시키면서 공간 차원은 축소시키는 다중블록 축소 인코더와 이미지 해상도를 복원하는 확장 디코더로 구성된다. 게다가 스킵 연결은 인코딩 블록을 그에 대응하는 디코딩 블록과 연결한다. 따라서 디코딩 블록은 이전 블록으로부터 컨텍스트 정보를 제공받고 인코딩 경로에서 위치정보를 제공 받는다.

위와 같이 아키텍처가 U자 형태의 인코더-디코더 구조로 돌아가 대칭형이다. 스킵 연결에서 나온 특징맵은 덧셈 대신 연결(채널 축을 따라)을 통해 결합된다.

Load data

먼저 학습할 데이터를 로드한다. 여기에서는 주피터 노트북 환경으로 실행했음을 알린다.

데이터는 ibis challenge로 biomedical 이미지 분할 위한 학습데이터로 label과 image폴더에 각각 다음과 같이 같은 파일명으로 이미지와 분할 annotation(mask) 파일이 있다.

Plot images + masks + overlay (mask over original)

EDA를 위해 데이터를 확인하는 과정으로 이미지와 mask파일을 overlay하여 학습데이터를 확인한다.

Get data into correct shape, dtype and range (0.0-1.0)

데이터를 형변환를 하고 0과 1사의 값으로 표준화를 한다. 이후 shape을 맞추기 위해 reshape한다.(아마 Unet에 학습 시키기 위한 shape이 3channel이라 생각됨)

Train/val split

데이터를 학습데이터와 평가데이터로 분리하기 위해 split 진행

Prepare train generator with data augmentation

generator를 이용하여 데이터 augmentation을 수행한다.

Initialize network

모델을 생성한다.

Compile + train

생성된 모델을 학습시킨다.

Plot training history

학습진행결과를 그림으로 나타낸다.

Plot original + ground truth + pred + overlay (pred on top of original)

평가데이터를 모델에 입력하여 판독한다.

profile
머신러닝 개발자

0개의 댓글