Skip to content

boostcampaitech7/level2-cv-semanticsegmentation-cv-07-lv3

Repository files navigation

Hand Bone Image Segmentation

image

1. Competiton Info

본 대회는 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

Timeline

  • 2024.11.11 ~ 2024.11.28

Evaluation

  • 평가지표: Dice Coefficient

2. Team Info

MEMBERS

김민솔 김예진 배형준 송재현 이재효 차성연

Project Objective and Direction

  • Git을 이용하여 공통된 템플릿 코드를 사용하고, 체계적인 프로젝트 버전을 관리하였다.
  • 서버 사용률을 높일 수 있도록 실험 일정을 Notion으로 공유하여 관리하였다.
  • 실험의 목적을 달성하기 위해 독립 변인을 하나씩만 설정하여 각 요인이 모델 성능에 미치는 영향을 명확히 파악하고 분석할 수 있도록 하였다.

Team Component

  • 코드 작성 : (SMP Baseline Template) 배형준, (AutoSam) 김민솔, (시각화) 김예진
  • EDA와 데이터 전처리 : (EDA) 김예진, 송재현, 이재효, 차성연, (전처리) 김예진, 차성연, (K-Fold) 이재효
  • 하이퍼파라미터 실험 : (증강) 김예진, (손실 함수) 김예진, 차성연, (최적화, 옵티마이저, 스케줄러) 이재효
  • 모델 실험 : (모델) 김민솔, 배형준, 차성연, 이재효

3. Data EDA

  • 전체 이미지에 29개 클래스가 균일하게 포함되었다
  • 전체 이미지에서 손 끝 마디뼈인 finger-1, 4, 8, 12, 16과 손등 뼈 중에는 Trapezoid와 Pisiform의 픽셀 비율이 가장 적었으며, 팔 뼈인 Radius와 Ulna가 가장 큰 면적을 차지했다.
  • 꺾인 손목 데이터 비율은 학습(11.5%)보다 테스트(57.6%)에서 더 높고, 메타데이터에 값을추가하여 관리하였다
  • Multi-label 데이터셋에서 Pisiform과 Triquetrum, 그리고 Trapezium과 Trapezoid의 손등 뼈가 일부 겹치는 영역이 가장 크게 나타났다

3. Data Augmentation

  • Resize + CropNonEmptyMaskIfExists
  • CLAHE
  • RandomRotation

4. Model

  • UNet++_EfficientNet b0
  • UNet++_EfficientNet b7
  • UNet++_MaxViT
  • UNet++_HRNet
  • AutoSAM

5. Result

  • Soft Voting Ensemble (0.9740)
EfficientNet b7 Fold 0 HRNet Fold 0 HRNet Fold 1 HRNet Fold 2 HRNet Fold 3 HRNet Fold 4

Feedback

  • 프로젝트 목표에 맞게 주어진 Hand-bone X-Ray 데이터에서 큰 사이즈의 뼈부터 작은 사이즈의 뼈까지 다양한 크기의 물체를 검출하는 모델 파이프라인을 구성하였다.
  • Git / GitHub / Notion / Slack 협업 툴을 잘 활용하여 원할하게 실험 공유를 가능하게 되어서 실험에 대한 피드백을 확실하게 주고 받을 수 있었다. 또한 이어지는 실험에 대한 방향성도 더 쉽게 잡을 수 있었다.

5. Report

6. Project File Structure

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      

7. How to run

Train & Save Checkpoint

python train.py -c {생성한 config 이름}.yaml

Inference

python inference.py -c {생성한 config 이름}.yaml -m {추론할 model checkpoint}.pt

Main process (Train + Inference)

python main.py -c {생성한 config 이름}.yaml

About

level2-cv-semanticsegmentation-cv-07-lv3 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published