/unet

Primary LanguagePython


retinal vessel 데이터를 unet을 사용하여 segmentation해본 repository입니다.

의료영상의 자동분할은 의사의 진단에 도움이 될 수 있는 유용한 정보를 추출하는 중요한 단계다. 예를 들어, 망막 혈관을 분할하여 우리가 망막 혈관의 구조를 나타내고 폭을 측정할 수 있도록 할 수 있으며, 이는 망막 질환을 진단하는 데 도움이 될 수 있다. 이 포스트에서는 망막 혈관 영상에 적용되는 영상 분할을 수행하는 Neural baseline을 구현한다.


Dataset

image image

Size of Image Num of Data Channels of Input Image Channel of Mask Num of Train Num of Val
584 x 565 20 3 1 16 4

Model

UNET 사용

Train and Test

id Resize Shape Learning Rate Optimizer Loss Function Mean of dice score Min of dice score Max of dice score Augment
1 512 0.001 Adam BCEWithLogitsLoss 0.7744 0.6374(2) 0.8217 None
2 592 0.001 Adam BCEWithLogitsLoss 0.7789 0.6904(2) 0.8211 None
3 592 0.001 Adam BCEWithLogitsLoss 0.7805 0.7433(2) 0.8261 gray
4 592 0.001 Adam BCEWithLogitsLoss 0.7931 0.7650(2) 0.8295 gray+flip+rotate(45)
  1. 512 512 채널 3 인풋으로 아무 aug없이 실험 진행 - 2 16 오버피팅 발생. 0.7743
  2. 592 592 채널 3 인풋으로 아무 aug없이 실험 진행 - 조금 더 좋음. 0.7789
  3. 더 나은 성능을 보인 이미지 크기(592)로 gray 로 변환 후 실험 진행 - 좀 더 좋음. 0.7805
  4. 더 나은 성능을 보인 인풋이미지(592 gray)로 rotate, flip 등 적용하여 실험 진행 - 가장 좋은 결과 도출.
train loss, validation loss

like SA-Net

Test result

id - 4

input and output of image 0

result in base U-Net

result in SA-Unet


현재 상황

SA-Unet 에서 적용한 augmentation을 그대로 가져와서 적용해 보았으나, (flip + rotate + gaussian noise + color jittering)

gray scale했을 때와 비슷한 결과가 나왔다. 최고 iou - 0.49 acc - 0.925 (근데 진동이 조금 심하다.)

augmentation을 적용해도 기존 Unet의 성능보다 한참 떨어진다. (논문 기준 base Unet의 acc - 0.9666)

그리고 현재 SA-Unet의 주요한 기능중 하나인 Dropbox 코드를 작성중이다.

그래프를 보면 iou값이 train에 비해 val에 대해 더 높게 나오는 것을 볼 수 있는데 이유를 모르겠다.

augmentation이 적용이 안되는 것인가도 확인해봤는데 잘 되는 것으로 확인했다.


12/17 보고

모든 augmentation을 pytorch로 구현하여 적용하였다.

역시나 다른 점은 보이지 않는다.

실험 순서는 다음과 같다.

none -> +flip -> +randombrightly -> +randomcontrast -> +gaussianblur -> +randomrotation

iou accuracy loss 값이 아무것도 적용 안했을 때랑 크게 다른점이안보인다.

이것은 augmentation의 문제가 아니라고 이제 강하게 확신하여 SA-Unet을 파이토치로 구현 하던 것에만 몰두해야겠다.

하이퍼 파라미터에 대해서 크게 튜닝하지는 않았지만, flip rotation을 했을 때도 성능향상이 그리 있지 않으므로 그냥 좋은 모델을 구현해보면서 왜 잘나오나 알아봐야겠다.

(그리고 제일 괜찮았던 flip+rotation과 모든 augmentation을 적용한 모델로 혹시나 하는 마음에 테스트 해보았으나, 역시나 심각한 오버피팅 문제가 발견되었다.)