An open API service indexing awesome lists of open source software.

https://github.com/drawcodeboy/u-net-based-chf-pul.edema-diagnostic-model

JKIICE Acceptance Paper
https://github.com/drawcodeboy/u-net-based-chf-pul.edema-diagnostic-model

Last synced: 11 months ago
JSON representation

JKIICE Acceptance Paper

Awesome Lists containing this project

README

          

# Exploring Diagnostic Methodology for Pulmonary Edema Diagnosis in Patients with Congestive Heart Failure Using U-Net Based Architecture

### U-Net 기반 아키텍처를 활용한 울혈성 심부전 환자 폐부종 진단 방법론 연구

## 📝 Paper & Description
📌 Paper Link

[📌 Doby's Lab (Blog Description)](https://draw-code-boy.tistory.com/592)

## 📁 Dataset

1. MIMIC-CXR-JPG - chest radiographs with structured labels
2. Chest X-ray Dataset with Lung Segmentation v1.0.0
3. Pulmonary Edema Severity Grades Based on MIMIC-CXR v1.0.1

## 💡 Research IDEA and GOAL

- 본 연구의 아이디어 기반이 되었던 뇌종양을 Segmentation하는 연구, TSTBS에서는 의료진의 진단 과정에 착안하여 아키텍처를 구성하였습니다. 이에 따라 Chest X-ray를 통해 Congestive Heart Failure(울혈성 심부전) 환자들의 Pulmonary Edema(폐부종) 진단을 할 때, 의료진의 진단 과정에 착안하여 폐 영역에 대한 집중도를 높이고자 Semantic Segmentation을 사용합니다.
- 분할된 폐 영역 이미지 데이터를 활용한 분류 실험 3가지와 그렇지 않은 분류 실험 2가지를 진행하여 성능을 비교한 결과, 폐 영역에 대해 고려한 실험이 성능이 더 우수하다는 사실을 알게 되었습니다.

## 💻 Summary using Streamlit

streamlit을 통해 구현한 웹으로 프로젝트의 전반적인 프로세스를 요약합니다.

![streamlit_gif](./streamlit/oms_streamlit.gif)

## 1️⃣ Segmentation Task

- Lung Segementation을 수행하는 가장 적합한 모델을 찾기 위해 U-Net, SA U-Net, U-Net++ 아키텍처를 학습하여 성능을 비교하였습니다.
- Segmentation Task의 경우에는 PyTorch의 활용도를 높이기 위해서 세 아키텍처 모두 직접 구현하여 사용했습니다.

### 📄 U-Net based Architectures Repositories

1. U-Net Implementation Repository
2. SA U-Net Implementation Repository
3. U-Net++ Implementation Repositiory

### 📄 Train Setting

- Loss function은 Semantic segmentation에서 보편적으로 쓰이는 Dice Loss를 사용했습니다.
$$DiceLoss = \frac{2\times(|A|\cap|B|)}{|A|+|B|}$$
- 종합적인 학습 스펙은 모두 동일하게 아래와 같습니다.

| Loss function | Opimizer | Learning rate | Decay step | Decay rate | Activation | Epochs |
| :--------------: | :---------: | :-----------: | :--------: | :--------: | :------------: | :-------: |
| Dice Loss | Adam | 1e-4 | 5 | 0.1 | Sigmoid | 50 |

### 📄 Performance Table

- 위와 같은 세팅을 통해 학습을 진행하였습니다.
- SA U-Net은 DropBlock의 사이즈에 따라 2개의 학습을 진행했습니다.
- DropBlock 10% - 전체 이미지의 10%를 Drop
- DropBlock 10% - 전체 이미지의 10%를 Drop
- U-Net++는 2가지 Mode에 따라 학습을 진행했습니다.
- Fast mode
- Accurate mode

| Model | Accuracy | F1-Score | AUC | MCC |
| :-----------------: | :------------------: | :------------------: | :------------------: | :------------------: |
| U-Net | 94.67% | 0.9808 | 0.9749 | 0.9729 |
| SA U-Net (10%) | 93.98% | 0.9684 | 0.9695 | 0.9554 |
| SA U-Net (20%) | 93.85% | 0.9660 | 0.9613 | 0.9521 |
| U-Net++ (fast) | 94.60% | 0.9795 | 0.9720 | 0.9711 |
| U-Net++ (accurate) | 94.59% | 0.9793 | 0.9722 | 0.9708 |

### ✅ Result

- 학습 결과 Segmentation Task에서는 U-Net을 사용하게 되었습니다.

## 2️⃣ 5 Data Processing Methods

> 본 단락에서는 Segmentation Task 이후에 얻은 데이터를 활용한 3가지 Method와 그렇지 않은 2가지 Method를 다룹니다.

![methods_figure](./figures/figure6_resize.jpg)

### 🩺 Experient 1

- 원본 이미지에 대해서는 가우시안 필터링(Gaussian Filtering)을 적용하고, 폐 영역 이미지와 블랜딩을 하는 Method입니다.
- 가우시안 필터링은 비전 분야에서 노이즈 제거 효과를 하고 있으며, 가우시안 분포에 따라 중심 픽셀로부터 멀어질수록 가중치를 적게주는 역할을 하여 데이터를 처리합니다.
$$G(x,y)=\frac{1}{2\pi\sigma}e^{-\frac{x^2+y^2}{2\sigma^2}}$$
- 이미지 블랜딩(Image Blending)은 두 이미지를 서로 합칠 때, 가중치를 통해 합치는 방법입니다.
$$g(x)=(1-\alpha)f_1(x)+\alpha f_2(x)$$
- 해당 Method를 적용한 figure는 1번째와 같습니다.

### 🩺 Experiment 2

- Experiment 1과 같이 원본 이미지에 대해서 가우시안 필터링을 적용합니다. 하지만, 여기서 폐 영역 이미지에 대해서 제거합니다.
- 그리고, 폐 영역 이미지를 합쳐서 결과적으로 폐 영역을 제외한 원본 이미지에 대해서만 가우시안 필터링이 적용된 이미지를 사용하게 됩니다.
- 해당 Method를 적용한 figure는 2번째와 같습니다.

### 🩺 Experiment 3

- 해당 실험에서는 폐 영역 이미지만을 사용합니다.

* 해당 Method를 적용한 figure는 3번째와 같습니다.

### 🩺 Experiment 4

- 원본 이미지를 사용하며, figure는 4번째와 같습니다.

### 🩺 Experiment 5

- 원본 이미지에 가우시안 필터링을 적용하며, figure는 5번째와 같습니다.

## 3️⃣ Classification Task

- Classification Task를 위해서는 두 가지 모델을 통해 5가지의 실험을 진행했습니다.
- 사용된 두 모델은 각 DenseNet121, VGG16입니다.
- DenseNet121은 더 깊은 모델의 역할을 하기 위해 ImageNet-1K를 pre-train한 모델을 사용하며, 모든 레이어에 대해서 학습이 가능하도록 했습니다.
- VGG16은 더 얕은 모델의 역할을 하기 위해 ImageNet-1K를 pre-train한 모델을 사용하였으나 pre-train된 레이어에 대해서는 Model freezing을 시킨 상태로 진행했습니다.
- 이러한 2가지 버전의 모델을 통해 Method의 일반화를 도출하였습니다.

### 📄 Imbalanced Data

- 프로젝트를 위해 추출한 데이터셋에는 정상과 폐부종에 대한 비율이 불균형합니다.

- 이를 해결하기 위해서 해당 실험에는 Weighted binary cross-entropy function을 Loss function으로 사용합니다.
$$L(y,\hat y)=-\frac{1}{N}\sum_{i=1}^{N}w_i[y_i\log(\hat y_i) + (1-y_i)\log(1-\hat y_i)]$$

### 📄 Train Setting

- DenseNet121과 VGG16의 서로 다른 역할을 하기 때문에 학습을 진행하는 과정에서도 특정 부분들이 다릅니다.
- 학습 스펙은 다음과 같습니다.

| Model | Image size | Loss function | Opimizer | Learning rate | Decay step | Decay rate | Activation | Epochs |
| :---------: | :--------: | :----------------------------------: | :---------: | :-----------: | :--------: | :--------: | :------------: | :--------: |
| DenseNet121 | 224x224 | Weighted binary cross-entropy | Adam | 1e-4 | 5 | 0.1 | Sigmoid | 100 |
| VGG16 | 64x64 | Weighted binary cross-entropy | Adam | 1e-4 | 5 | 0.1 | Sigmoid | 30 |

### 📄 Performance Table

| Model | Experiment | Accuracy | F1-Score | AUC | Sensitivity | Specificity |
| :---------: | :--------: | :------: | :------: | :----: | :---------: | :---------: |
| DenseNet121 | 1 | 75.00% | 0.7965 | 0.8090 | 0.8204 | 0.6460 |
| DenseNet121 | 2 | 73.93% | 0.7932 | 0.7951 | 0.8383 | 0.5929 |
| DenseNet121 | 3 | 73.45% | 0.7890 | 0.7936 | 0.8323 | 0.5900 |
| DenseNet121 | 4 | 73.57% | 0.7815 | 0.7901 | 0.7924 | 0.6519 |
| DenseNet121 | 5 | 74.05% | 0.7846 | 0.7948 | 0.7924 | 0.6637 |
| VGG16 | 1 | 63.81% | 0.7164 | 0.6628 | 0.7665 | 0.4484 |
| VGG16 | 2 | 63.45% | 0.7369 | 0.6570 | 0.8583 | 0.3038 |
| VGG16 | 3 | 64.52% | 0.7545 | 0.6659 | 0.8483 | 0.3451 |
| VGG16 | 4 | 62.38% | 0.6715 | 0.6681 | 0.6657 | 0.5929 |
| VGG16 | 5 | 61.90% | 0.7320 | 0.6501 | 0.8723 | 0.2448 |

### 🔶 Result

- 전반적으로 Experiment 1이 원본 이미지를 활용한 Experiment 4, 5보다 성능을 우수함을 나타냅니다.

## 4️⃣ Optimize parameters in [Experiment 1]

- 본 연구에서 제안하는 방법(Experiment 1)이 효과적이었음을 입증하였고, 이를 토대로 Gaussian Filtering과 Blending의 값을 조절하여 폐 영역에 대한 기여도를 결정합니다.
- 기존 Experiment 1 대비 기여도를 '약하게 주었을 때', '강하게 주었을 때'로 나누어 실험을 진행하였습니다.
- 실험 결과, 폐 영역에 대한 기여도가 낮을수록 성능이 올라가는 것을 입증했습니다.

### 🔶 Result

| Experiment 1 | Gaussian Filtering - $\sigma$ | Blending - $\alpha$ | Accuracy | F1-Score | AUC |
| :----------: | :---------------------------: | :-----------------: | :------: | :------: | :----: |
| Weak | 0.5 | 0.1 | 75.12% | 0.7969 | 0.8058 |
| Default | 1.0 | 0.2 | 75.00% | 0.7965 | 0.8090 |
| Strong | 1.5 | 0.3 | 74.05% | 0.7776 | 0.8001 |

## 📚 Conclusion

- 해당 프로젝트에서는 U-Net 기반 아키텍처를 통해 폐 영역을 추출한 이미지를 원본 이미지와 결합하는 method들을 고안했습니다.
- 제안한 method들을 사용하여 정상과 폐부종을 분류하기 위해 DenseNet121과 VGG16 사용해 비교를 진행했습니다.
- Experiment 1에서 75.00%, 63.81%의 Accuracy로 Experiment 5에서 74.05%, 61.90%의 Accuarcy보다 성능이 우수함을 보였습니다.
- 이를 기반으로 Experiment 1에 대한 파라미터를 최적화하여, 폐 영역에 대한 기여도가 낮을 수록 성능이 올라가는 것을 입증했습니다.
- 본 연구를 통해서 폐부종을 진단하는 것에 있어 폐 영역에 대한 집중도를 높이는 방법이 더 좋은 것을 알 수 있었고, 이에 따라 폐부종 뿐만 아니라 다양한 폐 질환을 분류하는 모델을 구축할 때, 본 연구에서 제안하는 방법이 활용되어 더 높은 성능을 보여줄 것으로 기대할 수 있습니다.

## ⛔ .gitignore

- Repository에는 디렉토리의 용량이 크기 때문에 올라가지 못 한 파일들이 있습니다.
- 아래는 해당 디렉토리의 리스트입니다.
- 해당 디렉토리들은 전부 로컬 리포지토리에서 관리를 하고 있습니다.
- 또한, 이 디렉토리들이 없는 경우에는 streamlit의 사용이 불가합니다.

| Type | File Name | Size | Description |
| :-------: | :----------------------------------------------------- | :----: | :---------------------------: |
| Directory | classification/densenet_parameters | 620MB | DenseNet121 학습 파라미터 |
| Directory | classification2/vgg_parameters | 19.2GB | VGG16 학습 파라미터 |
| Directory | segmentation/parameters | 766MB | U-Net 기반 모델 학습 파라미터 |
| Directory | segmentation inference/target_and_predict | 1.96GB | U-Net 기반 모델 추론 데이터 |

## 😀 Self Feedback

> 본 연구를 이끌어가면서 부족했던 점을 기록하여, 앞으로 더 나은 연구를 하고자 합니다.

### 1. 관련 연구 탐색

- 프로젝트를 시작할 때, 단순히 아이디어에서 시작하여 모든 걸 이끌어 갔기 때문에 프로젝트를 함에 있어서 충분한 논리적인 근거가 부족했다고 생각합니다.
- 앞으로 시작 전에는 관련 연구 최소 7편 이상은 찾아볼 것!

### 2. VGG 이미지 사이즈 감소

- 해당 프로젝트에서는 DenseNet121, VGG16을 사용했습니다. 충분한 다양성을 제공했다고 생각하지만, 여기서 VGG16에서 Input Size까지 줄여 '다양성을 과하게 준 건 아닐까'라고 느낀 부분이었습니다.

### 3. Python Script 적극 활용

- 최근 이 프로젝트 이후, 새로운 프로젝트를 하면서 오픈 소스를 리뷰할 일이 많아졌습니다.
- 이를 통해 이번 프로젝트의 파일 시스템 구성에 아쉬운 부분들이 많다는 것을 알게 되었습니다. (중복적인 부분, 이로 인한 노트북 파일 간에 무결성 저하)
- 앞으로 오픈 소스와 같은 패키지, 모듈 구조를 적극적으로 차용하여 프로젝트를 구성해야 합니다.
## Citing
```
@article{권다운2024u,
title={U-Net 기반 아키텍처를 활용한 울혈성 심부전 환자 폐부종 진단 방법론 연구.},
author={권다운},
journal={Journal of the Korea Institute of Information \& Communication Engineering},
volume={28},
number={4},
year={2024}
}
```