Skip to content

mind-ewha/capstone-design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Domain-Agnostic 학습 기법을 적용한 발 및 발목 X-ray 영상의 AI 기반 Triage 분류 연구

1. 기본 설명

본 프로젝트는 발 및 발목 X-ray 영상에 대해 AI 기반 triage 분류를 수행하는 연구 프로젝트이다.
응급의료 환경에서는 다수의 X-ray 영상이 동시에 의뢰될 수 있으며, 긴급한 영상의 판독이 지연될 경우 치료 골든타임을 놓칠 위험이 있다. 특히 발 및 발목 X-ray는 해부학적 구조가 복잡하고, 영상 내 마커·석고·부목·고정 장치 등 질병과 직접 관련 없는 시각적 요소가 포함될 수 있어 모델이 임상적 특징이 아닌 데이터셋별 편향이나 shortcut feature에 의존할 가능성이 있다.

본 연구는 여러 공개 X-ray 데이터셋을 통합하여 4단계 triage grade 체계로 재구성하고, 다중 도메인 환경에서 발생하는 spurious correlation 문제를 완화하기 위한 여러 학습 기법을 비교한다.

2. 프로젝트 설명

본 프로젝트의 목표는 발 및 발목 X-ray 영상에 대해 다음과 같은 4단계 triage 분류를 수행하는 것이다.

Grade 의미
Grade 1 골절
Grade 2 추가 검사가 필요한 위험 소견
Grade 3 비응급 이상
Grade 4 정상

비교한 주요 실험 방법은 다음과 같다.

  1. Baseline

    • 도메인 일반화 기법을 적용하지 않은 ResNet18 기반 기본 분류 모델
  2. DANN

    • Gradient Reversal Layer를 이용하여 도메인 불변 특징을 학습하는 Domain-Adversarial Neural Network
  3. Marker Paste

    • 특정 데이터셋에 존재하는 텍스트 마커 shortcut을 완화하기 위해 마커 영역을 다른 도메인 이미지에 삽입하는 방법
  4. SupCon

    • 같은 triage grade에 속하는 샘플을 feature space에서 가깝게 학습시키는 Supervised Contrastive Learning
  5. DeYO-style Patch Shuffle

    • X-ray 이미지를 4×4 patch로 나눈 뒤 랜덤 셔플하는 augmentation을 적용하여 형태 및 촬영 구도 기반 shortcut 의존을 줄이는 방법

3. Source Code 설명

본 repository는 Jupyter Notebook 기반의 실험 재현용 코드로 구성되어 있다.
각 방법별 폴더에는 실험 notebook, 설정 파일, 로그, 결과물이 포함되어 있다.

CAPSTONE-DESIGN/
├── .vscode/
├── md/
├── model/
│   ├── baseline/
│   │   ├── logs/
│   │   ├── result/
│   │   ├── baseline_binary_resnet18_v2_seed42_fold0.ipynb
│   │   ├── baseline_resnet18_v2_seed42_fold0.ipynb
│   │   ├── baseline_resnet18_v3_seed42_fold0.ipynb
│   │   ├── baseline_resnet18_v4_seed42_fold0.ipynb
│   │   ├── baseline_resnet18_v5_seed42_fold0.ipynb
│   │   ├── config_baseline_binary.yaml
│   │   ├── config_baseline_v3.yaml
│   │   ├── config_baseline_v4.yaml
│   │   ├── config_baseline_v5.yaml
│   │   └── config_baseline.yaml
│   ├── DANN/
│   │   ├── logs/
│   │   ├── result/
│   │   ├── cdann_resnet18_v1_multiseed_aug.ipynb
│   │   ├── cdann_resnet18_v1_seed42_fold0.ipynb
│   │   ├── config_cdann_v1.yaml
│   │   ├── config_dann_v1.yaml
│   │   ├── config_dann.yaml
│   │   ├── dann_resnet18_v2_seed42_fold0.ipynb
│   │   └── dann_resnet18_v3_seed42_fold0.ipynb
│   ├── deyo_patch/
│   │   ├── result/
│   │   ├── config_deyo_patch.yaml
│   │   └── deyo_patch_resnet18_seed42_fold0.ipynb
│   ├── marker_paste/
│   │   ├── result/
│   │   ├── config_marker_paste.yaml
│   │   └── marker_paste_resnet18_seed42_fold0.ipynb
│   ├── simclr/
│   │   └── config_simclr.yaml
│   └── supcon/
│       ├── result/
│       ├── config_supcon.yaml
│       └── supcon_resnet18_seed42_fold0.ipynb
├── preprocess/
│   └── code/
│       ├── config.yaml
│       └── preprocess_lera_merge_resnet18_v2_seed42_2v1_1.ipynb
├── requirements.txt
└── .gitignore

주요 디렉토리 설명

경로 설명
preprocess/code/ 원본 데이터셋을 triage grade 체계에 맞게 병합하고 전처리하는 notebook 및 설정 파일
model/baseline/ ResNet18 기반 baseline 실험 코드
model/DANN/ DANN 및 CDANN 관련 실험 코드
model/deyo_patch/ DeYO-style Patch Shuffle 실험 코드
model/marker_paste/ Marker Paste 실험 코드
model/supcon/ Supervised Contrastive Learning 실험 코드
model/simclr/ contrastive learning 관련 보조 실험 설정
logs/ 각 실험의 학습 로그 저장 폴더
result/ 각 실험의 metric, 예측 결과, figure, checkpoint 등 결과물 저장 폴더
config_*.yaml 데이터 경로, 하이퍼파라미터, 실험 설정을 저장하는 YAML 파일
*.ipynb 각 실험을 실행하는 Jupyter Notebook 코드

4. How to Build

본 프로젝트는 별도의 빌드 과정이 필요한 소프트웨어가 아니라 Jupyter Notebook 기반 연구 실험 코드이다.
따라서 필요한 Python 패키지를 설치한 뒤 Jupyter Notebook 환경에서 각 실험 notebook을 실행하면 된다.

jupyter notebook

Jupyter Notebook 실행 후, 아래의 최종 실험 notebook들을 열어 순서대로 실행한다.

5. How to Install

repository를 clone한 뒤, 프로젝트 폴더로 이동한다.

git clone <repository-url>
cd CAPSTONE-DESIGN

필요한 Python 패키지를 설치한다.

pip install -r requirements.txt

Jupyter Notebook 관련 패키지가 설치되어 있지 않은 경우 다음 명령어를 추가로 실행한다.

pip install jupyter notebook ipykernel

환경 구성 후 Jupyter Notebook을 실행한다.

jupyter notebook

6. How to Test

본 repository는 별도의 unit test 파일을 제공하지 않는다.
프로젝트 테스트는 최종 실험 notebook을 실행하고, 각 method의 result/ 폴더에 생성된 metric 및 결과 파일을 확인하는 방식으로 수행한다.

최종 실험 notebook

Method Final Notebook Config
Baseline model/baseline/baseline_resnet18_v5_seed42_fold0.ipynb model/baseline/config_baseline_v5.yaml
DANN model/DANN/dann_resnet18_v3_seed42_fold0.ipynb model/DANN/config_dann.yaml
Marker Paste model/marker_paste/marker_paste_resnet18_seed42_fold0.ipynb model/marker_paste/config_marker_paste.yaml
SupCon model/supcon/supcon_resnet18_seed42_fold0.ipynb model/supcon/config_supcon.yaml
DeYO-style Patch Shuffle model/deyo_patch/deyo_patch_resnet18_seed42_fold0.ipynb model/deyo_patch/config_deyo_patch.yaml

실행 순서

  1. 데이터셋을 준비하고 각 config 파일의 데이터 경로를 로컬 환경에 맞게 수정한다.
  2. 전처리 notebook을 실행한다.
preprocess/code/preprocess_lera_merge_resnet18_v2_seed42_2v1_1.ipynb
  1. 각 방법별 최종 실험 notebook을 실행한다.
  2. 실행 후 각 method 폴더의 result/ 디렉토리에서 결과 파일을 확인한다.

예상 결과 저장 위치는 다음과 같다.

model/baseline/result/
model/DANN/result/
model/marker_paste/result/
model/supcon/result/
model/deyo_patch/result/

7. Sample Data 설명

본 repository에는 원본 X-ray 데이터셋이 포함되어 있지 않다.
사용한 데이터셋은 공개 데이터셋이지만, 각 데이터셋의 라이선스 및 이용 조건을 따라야 하므로 원본 이미지는 repository에 직접 포함하지 않았다.

따라서 실험을 재현하려면 사용자가 각 데이터셋을 공식 출처에서 직접 다운로드한 뒤, config 파일에 지정된 경로 또는 아래와 같은 구조에 맞게 배치해야 한다.

data/
├── FracAtlas/
├── LERA/
└── AIHub/

sample data가 별도로 제공되는 경우에는 원본 데이터와 동일한 형식을 유지해야 한다.

8. Database or Data Used

본 연구에서는 다음 세 가지 공개 X-ray 데이터셋을 사용하였다.

Dataset 설명 사용된 grade Link
FracAtlas Musculoskeletal radiograph 기반 골절 데이터셋 Grade 1 https://www.kaggle.com/datasets/mahmudulhasantasin/fracatlas-original-dataset
LERA Stanford Lower Extremity RAdiographs Dataset Grade 1–4 https://aimi.stanford.edu/datasets/lera-lower-extremity-radiographs
AIHub Synthetic X-ray 국내 주요질환 이미지 합성 X-ray 데이터셋 Grade 3–4 https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=71521

세 데이터셋은 서로 다른 레이블 체계를 가지고 있으므로, 전문의 소견을 참고하여 공통된 4단계 triage grade 체계로 재구성하였다.

최종 실험에서는 데이터셋-클래스 조합으로 총 7개의 그룹을 정의하였다.

FracAtlas-grade_1
LERA-grade_1
LERA-grade_2
LERA-grade_3
LERA-grade_4
AIHub-grade_3
AIHub-grade_4

데이터 불균형으로 인한 평가 편향을 줄이기 위해 test set은 7개 그룹별 20개씩 균등하게 구성하였다.
최종 데이터 구성은 다음과 같다.

Split 개수
Train 18,449
Test 160

모든 이미지는 224×224 크기로 resize한 뒤 ImageNet 통계값을 사용하여 정규화하였다.

9. Description of Used Open Source

본 프로젝트는 다음과 같은 오픈소스 라이브러리 및 공개 연구 방법을 사용하였다.

Open-source libraries

  • Python
  • PyTorch
  • NumPy
  • Pillow
  • tqdm
  • Jupyter Notebook
  • YAML 기반 configuration 관리

Open-source datasets

  • FracAtlas
  • LERA: Lower Extremity RAdiographs Dataset
  • AIHub Synthetic X-ray Dataset

각 데이터셋의 사용자는 해당 데이터셋의 공식 라이선스, 이용 약관, 접근 정책을 준수해야 한다.

Research methods and models

  • ResNet18 pretrained on ImageNet
  • DANN: Domain-Adversarial Training of Neural Networks
  • CutMix-inspired augmentation
  • Supervised Contrastive Learning
  • SimCLR-inspired contrastive learning
  • DeYO-style Patch Shuffle augmentation

10. 연구트랙: 실험 데이터 및 실험 결과물

연구트랙 제출 요건에 따라, 본 repository에는 실험을 재현하기 위한 코드와 실험 결과물이 포함되어 있다.

실험 데이터

원본 X-ray 이미지는 repository에 포함되어 있지 않다.
단, 실험에 사용한 데이터 구성, triage grade 매핑 방식, 전처리 notebook, config 파일은 repository에 포함되어 있다.

실험 데이터 구성은 다음과 같다.

Dataset Grade 1 Grade 2 Grade 3 Grade 4 Total
FracAtlas 120 0 0 0 120
LERA 92 92 169 136 489
AIHub 0 0 13,500 4,500 18,000
Total 212 92 13,669 4,636 18,609

실험 설정

공통 학습 설정은 다음과 같다.

항목
Backbone ImageNet pretrained ResNet18
Input size 224×224
Optimizer AdamW
Learning rate 1e-4
Weight decay 1e-4
Batch size 32
Epoch 15
Scheduler CosineAnnealingLR
Early stopping patience 5
Seed 42
Loss Cross Entropy Loss with class weight [2.0, 2.0, 0.5, 0.5]
Main metric Macro F1-score

실험 결과

최종 실험 결과는 다음과 같다.

Method Overall Accuracy Macro F1
Baseline 0.6625 0.5660
DANN 0.6687 0.5604
Marker Paste 0.6062 0.5337
SupCon 0.6875 0.5634
DeYO-style Patch Shuffle 0.6375 0.5675

SupCon은 가장 높은 Overall Accuracy를 기록하였고, DeYO-style Patch Shuffle은 가장 높은 Macro F1-score를 기록하였다.
다만 AIHub 도메인의 강한 데이터 편향과 LERA grade_2의 데이터 부족 문제는 모든 기법에서 완전히 해결되지 않았다.

실험 결과물 위치

각 실험 결과물은 다음 위치에 저장되어 있다.

model/baseline/result/
model/DANN/result/
model/marker_paste/result/
model/supcon/result/
model/deyo_patch/result/

result/ 폴더에는 실험별 metric, 예측 결과, figure, checkpoint 등 실험 결과물이 포함된다.
일부 method의 경우 여러 버전의 실험 결과 또는 ablation 결과가 하위 폴더로 구분되어 저장되어 있다.

11. Limitations

본 연구는 다중 도메인 발 및 발목 X-ray 환경에서 spurious correlation 완화를 위한 여러 학습 기법을 비교하였으나, 다음과 같은 한계가 존재한다.

  • AIHub 데이터가 전체 데이터셋에서 차지하는 비중이 매우 커 특정 도메인의 편향이 완전히 제거되지 않았다.
  • LERA grade_2는 샘플 수가 부족하여 모든 기법에서 안정적인 분류 성능을 얻기 어려웠다.
  • 실제 임상 환경 적용을 위해서는 병원 데이터 기반의 추가 검증이 필요하다.

12. Future Work

향후 연구에서는 다음과 같은 방향으로 확장할 예정이다.

  • IRB 심의 후 실제 병원 데이터를 활용한 임상 환경 검증
  • 소수 클래스 데이터 증강
  • 하이퍼파라미터 탐색
  • 다양한 domain generalization 기법의 조합 실험
  • X-ray 영상 triage 및 판독 우선순위 결정 시스템 구축

13. Contributors

  • 김가영
  • 한승연
  • 박지호

14. License

본 repository는 학술 및 연구 목적으로 작성되었다.
사용한 공개 데이터셋은 각 데이터셋의 공식 라이선스와 이용 조건을 따라야 하며, 원본 데이터의 재배포는 허용된 범위 내에서만 가능하다.

About

발 및 발목 X-ray 영상의 판독 우선순위 개선을 위한 멀티모달 인공지능 긴급도 분류 모델 개발

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors