Skip to content

boostcampaitech7/level2-cv-semanticsegmentation-cv-04-lv3

Repository files navigation

🦴 Hand Bone Image Segmentation

(이미지 좜처 : Wikipedia)


✏️ Introduction

Bone Image Segmentation은 인곡지λŠ₯ λΆ„μ•Όμ—μ„œ μ€‘μš”ν•œ μ‘μš© λΆ„μ•Ό 쀑 ν•˜λ‚˜λ‘œ, 골절 진단, μ„±μž₯ 평가, 수술 κ³„νš λ“± λ‹€μ–‘ν•œ 의료 뢄야에 ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λŒ€νšŒλŠ” 제곡된 X-ray 손 뼈 μ΄λ―Έμ§€μ—μ„œ 29개의 뼈λ₯Ό λΆ„ν• ν•˜λŠ” AI λͺ¨λΈμ„ κ°œλ°œν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€. λŒ€νšŒμ˜ μ„±λŠ₯은 Semantic Segmentation taskμ—μ„œ λŒ€ν‘œμ μœΌλ‘œ μ‚¬μš©λ˜λŠ” dice coefficient둜 ν‰κ°€λ©λ‹ˆλ‹€.


πŸ“… Schedule

ν”„λ‘œμ νŠΈ 전체 일정

  • 2024.11.13 ~ 2024.11.28

ν”„λ‘œμ νŠΈ 세뢀일정


πŸ₯ˆ Result

Private λ¦¬λ”λ³΄λ“œμ—μ„œ μ΅œμ’…μ μœΌλ‘œ μ•„λž˜μ™€ 같은 κ²°κ³Όλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ—ƒοΈ Dataset Structure

dataset/
β”œβ”€β”€ meta_data.xlsx
β”œβ”€β”€ test
β”‚Β Β  └── DCM
β”‚Β Β      β”œβ”€β”€ ID040
β”‚Β Β      β”‚Β Β  β”œβ”€β”€ image1661319116107.png
β”‚Β Β      β”‚Β Β  └── image1661319145363.png
β”‚Β Β      └── ID041
β”‚Β Β          β”œβ”€β”€ image1661319356239.png
β”‚Β Β          └── image1661319390106.png
└── train
    β”œβ”€β”€ DCM
    β”‚Β Β  β”œβ”€β”€ ID001
    β”‚Β Β  β”‚Β Β  β”œβ”€β”€ image1661130828152_R.png
    β”‚Β Β  β”‚Β Β  └── image1661130891365_L.png
    β”‚Β Β  └── ID002
    β”‚Β Β      β”œβ”€β”€ image1661144206667.png
    β”‚Β Β      └── image1661144246917.png
    └── outputs_json
        β”œβ”€β”€ ID001
        β”‚Β Β  β”œβ”€β”€ image1661130828152_R.json
        β”‚Β Β  └── image1661130891365_L.json
        └── ID002
            β”œβ”€β”€ image1661144206667.json
            └── image1661144246917.json

데이터셋은 ν•œ μ‚¬λžŒμ˜ μ–‘ 손을 μ΄¬μ˜ν•œ X-Ray 이미지이며, ν•˜λ‚˜μ˜ ID에 ν•œ μ‚¬λžŒμ— λŒ€ν•œ 였λ₯Έμ† 및 μ™Όμ†μ˜ 이미지가 λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€. 각 μ΄λ―Έμ§€λŠ” μ˜ν•™μ μœΌλ‘œ λΆ„λ₯˜λœ 손 뼈 29κ°€μ§€μ˜ 클래슀λ₯Ό 가지며, 2048x2048 크기의 train 이미지 800μž₯, test 이미지 288μž₯으둜 κ΅¬μ„±λ©λ‹ˆλ‹€.

λ˜ν•œ, 각 ID에 ν•΄λ‹Ήν•˜λŠ” μ‚¬λžŒμ˜ λ‚˜μ΄, 성별, 체쀑, μ‹ μž₯에 λŒ€ν•œ Meta_dataκ°€ xlsx둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

Train json

Train json νŒŒμΌμ€ 각 이미지에 λŒ€ν•œ annotations이 ν¬ν•¨λ˜λ©°, id, type, attributes, points, label둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  • Images
      {"annotations": [{
          "id": "id", 
          "type": "poly_seg", 
          "attributes": {}, 
          "points": [[[10, 20], [30, 40], ... ]], 
          "label": "finger-1"} 
          ...]}
    • ⚠️ 데이터 λ³΄μ•ˆμƒμ˜ 문제둜 ID와 PointsλŠ” μž„μ˜λ‘œ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

βš™οΈ Requirements

env.

이 ν”„λ‘œμ νŠΈλŠ” Ubuntu 20.04.6 LTS, CUDA Version: 12.2, Tesla v100 32GB의 ν™˜κ²½μ—μ„œ ν›ˆλ ¨ 및 ν…ŒμŠ€νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Installation

이 ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ‹€μ–‘ν•œ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ•„λž˜ 단계λ₯Ό 따라 ν•„μš”ν•œ 라이브러리λ₯Ό μ„€μΉ˜ν•˜μ„Έμš”.

1. PyTorch μ„€μΉ˜

PyTorch 2.1.0을 μ„€μΉ˜ν•©λ‹ˆλ‹€. μ„€μΉ˜ 방법은 PyTorch 곡식 μ›Ήμ‚¬μ΄νŠΈλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

2. ν”„λ‘œμ νŠΈ μ˜μ‘΄μ„± μ„€μΉ˜

λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό ν΄λ‘ ν•˜κ³  ν•„μš”ν•œ μ˜μ‘΄μ„±μ„ μ„€μΉ˜ν•©λ‹ˆλ‹€:

git clone https://github.com/boostcampaitech7/level2-cv-semanticsegmentation-cv-04-lv3.git
cd level2-cv-semanticsegmentation-cv-04-lv3
pip install -r requirements.txt

πŸŽ‰ Project

1. Structure

Project
β”œβ”€β”€ base_config.yaml
β”œβ”€β”€ config
β”‚Β Β  β”œβ”€β”€ config.py
β”œβ”€β”€ data
β”‚Β Β  β”œβ”€β”€ augmentation.py
β”‚Β Β  └── dataset.py
β”œβ”€β”€ eda_and_visualization
β”‚Β Β  β”œβ”€β”€ confusion_matrix.py
β”‚Β Β  β”œβ”€β”€ EDA.ipynb
β”‚Β Β  └── visualize_csv.ipynb
β”œβ”€β”€ ensemble.py
β”œβ”€β”€ ensembles
β”‚Β Β  β”œβ”€β”€ hard_voting.py
β”‚Β Β  β”œβ”€β”€ __init__.py
β”‚Β Β  └── soft_voting.py
β”œβ”€β”€ error_analysis
β”‚Β Β  β”œβ”€β”€ analysis_from_wandb.ipynb
β”‚Β Β  β”œβ”€β”€ analysis_smp_encoder_decoder.ipynb
β”‚Β Β  β”œβ”€β”€ confusion_matrix.py
β”‚Β Β  β”œβ”€β”€ error_analysis.py
β”‚Β Β  └── evaluation.py
β”œβ”€β”€ experiments
β”‚Β Β  β”œβ”€β”€ completed
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ 10_completed_resnext101_32x8d.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ .....
β”‚Β Β  β”œβ”€β”€ ensemble.yaml
β”‚Β Β  β”œβ”€β”€ README.md
β”œβ”€β”€ inference.py
β”œβ”€β”€ inference.sh
β”œβ”€β”€ mmsegmentation
β”œβ”€β”€ models
β”‚Β Β  β”œβ”€β”€ base_model.py
β”‚Β Β  β”œβ”€β”€ DeepLabV3Plus.py
β”‚Β Β  β”œβ”€β”€ ....
β”œβ”€β”€ multi_inference.sh
β”œβ”€β”€ multi_train.sh
β”œβ”€β”€ README.md
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ train.py
β”œβ”€β”€ train.sh
└── utils
    β”œβ”€β”€ convert_format.py
    β”œβ”€β”€ download_artifacts.py
    β”œβ”€β”€ loss.py
    β”œβ”€β”€ metrics.py
    β”œβ”€β”€ optimizer.py
    β”œβ”€β”€ scheduler.py
    └── utils.py

2. Train & Inference

이번 λŒ€νšŒμ—μ„œλŠ” μ‹€ν—˜ κ΅¬ν˜„, 곡유, 그리고 μž¬ν˜„μ„±μ„ 높이기 μœ„ν•΄ YAML νŒŒμΌμ„ ν™œμš©ν•˜μ—¬ μ‹€ν—˜ νŒŒλΌλ―Έν„° μ„€μ • 및 κ΄€λ¦¬ν•˜λŠ” 방식을 λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ μ‚¬μš©ν•œ κΈ°λ³Έ μ„€μ • νŒŒμΌμ€ base_config.yamlμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ μ‹€ν—˜μ— μ‚¬μš©λœ YAML νŒŒμΌλ“€μ€ μ—¬κΈ°μ—μ„œ 확인 κ°€λŠ₯ν•©λ‹ˆλ‹€. λ˜ν•œ, 우리의 YAML 파일 μž‘μ„± κ·œμΉ™μ€ μ΄κ³³μ—μ„œ μžμ„Ένžˆ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, λ‹€μ–‘ν•œ λͺ¨λΈκ³Ό μ»€μŠ€ν…€ λͺ¨λΈμ„ μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. λͺ¨λΈ μž‘μ„± κ·œμΉ™μ€ λ‹€μŒμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ§‘β€πŸ€β€πŸ§‘ Contributors

⚑️ Detail

μš°λ¦¬λŠ” ν•΄λ‹Ή λŒ€νšŒλ₯Ό μœ„ν•΄ λ‹€μ–‘ν•œ λͺ¨λΈκ³Ό 방법둠을 μ μš©ν•˜μ˜€μœΌλ©°, 이에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ Wrap-Up Reportμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.