본 대회는 X-ray 이미지에서 사람의 손 뼈를 Segmentation 하는 대회이다. 데이터셋은 Ground Truth로 29개 클래스에 해당하는 Mask가 포함된 X-ray 형태의 PNG 이미지가 제공되었다. 평가지표로는 Dice Coefficient가 사용됐다.
- Input : X-ray 형태의 사람 손 뼈에 해당하는 PNG 이미지
- Output : 모델이 예측한 각 픽셀 좌표의 Class와 Points를 RLE로 변환한 값
- 손가락, 손등, 팔 뼈 총 29개 클래스
- finger-1~19, Trapezium, Trapezoid, Capitate, Hamate, Scaphoid, Lunate, Triquetrum, Pisiform, Radius, Ulna
- 2024.11.11 ~ 2024.11.28
- 평가지표: Dice Coefficient
김민솔 | 김예진 | 배형준 | 송재현 | 이재효 | 차성연 |
- Git을 이용하여 공통된 템플릿 코드를 사용하고, 체계적인 프로젝트 버전을 관리하였다.
- 서버 사용률을 높일 수 있도록 실험 일정을 Notion으로 공유하여 관리하였다.
- 실험의 목적을 달성하기 위해 독립 변인을 하나씩만 설정하여 각 요인이 모델 성능에 미치는 영향을 명확히 파악하고 분석할 수 있도록 하였다.
- 코드 작성 : (SMP Baseline Template) 배형준, (AutoSam) 김민솔, (시각화) 김예진
- EDA와 데이터 전처리 : (EDA) 김예진, 송재현, 이재효, 차성연, (전처리) 김예진, 차성연, (K-Fold) 이재효
- 하이퍼파라미터 실험 : (증강) 김예진, (손실 함수) 김예진, 차성연, (최적화, 옵티마이저, 스케줄러) 이재효
- 모델 실험 : (모델) 김민솔, 배형준, 차성연, 이재효
- 전체 이미지에 29개 클래스가 균일하게 포함되었다
- 전체 이미지에서 손 끝 마디뼈인 finger-1, 4, 8, 12, 16과 손등 뼈 중에는 Trapezoid와 Pisiform의 픽셀 비율이 가장 적었으며, 팔 뼈인 Radius와 Ulna가 가장 큰 면적을 차지했다.
- 꺾인 손목 데이터 비율은 학습(11.5%)보다 테스트(57.6%)에서 더 높고, 메타데이터에 값을추가하여 관리하였다
- Multi-label 데이터셋에서 Pisiform과 Triquetrum, 그리고 Trapezium과 Trapezoid의 손등 뼈가 일부 겹치는 영역이 가장 크게 나타났다
- Resize + CropNonEmptyMaskIfExists
- CLAHE
- RandomRotation
- UNet++_EfficientNet b0
- UNet++_EfficientNet b7
- UNet++_MaxViT
- UNet++_HRNet
- AutoSAM
- Soft Voting Ensemble (0.9740)
EfficientNet b7 Fold 0 | HRNet Fold 0 | HRNet Fold 1 | HRNet Fold 2 | HRNet Fold 3 | HRNet Fold 4 |
---|
- 프로젝트 목표에 맞게 주어진 Hand-bone X-Ray 데이터에서 큰 사이즈의 뼈부터 작은 사이즈의 뼈까지 다양한 크기의 물체를 검출하는 모델 파이프라인을 구성하였다.
- Git / GitHub / Notion / Slack 협업 툴을 잘 활용하여 원할하게 실험 공유를 가능하게 되어서 실험에 대한 피드백을 확실하게 주고 받을 수 있었다. 또한 이어지는 실험에 대한 방향성도 더 쉽게 잡을 수 있었다.
repo/
├── AutoSAM/
├── configs/
│ └── torchvision_fcn_resnet50.yaml
│ └── smp_unetplusplus_efficientb0.yaml
├── eda/
│ └── eda.ipynb
│ └── calculate.py
├── src/
│ ├── dataset/
│ │ └── dataset.py
│ ├── models/
│ │ └── torchvision_models.py
│ │ └── smp_models.py
│ ├── loss.py
│ ├── optimizer.py
│ ├── scheduler.py
│ └── trainer.py
├── utils/
│ └── collect_and_save.py
│ └── convert_excel_to_csv.py
│ └── format.py
│ └── gt_visualize.py
│ └── labelme.py
│ └── resources.py
│ └── test_visualize.py
│ └── train_visualize.py
│ └── utils_for_visualizer.py
│ └── val_visualize.py
│ └── val_each_class.py
├── README.md
├── hard_ensemble.py
├── inference.py
├── main.py
├── soft_ensemble.py
└── train.py
python train.py -c {생성한 config 이름}.yaml
python inference.py -c {생성한 config 이름}.yaml -m {추론할 model checkpoint}.pt
python main.py -c {생성한 config 이름}.yaml