Skip to content

kupulau/Hand-Bone-Segmentation

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

48 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Hand Bone Image Segmentation

๐Ÿฅ‡ ํŒ€ ๊ตฌ์„ฑ์›


๐Ÿ—’๏ธ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ผˆ๋Š” ์šฐ๋ฆฌ ๋ชธ์˜ ๊ตฌ์กฐ์™€ ๊ธฐ๋Šฅ์— ์ค‘์š”ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •ํ™•ํ•œ ๋ผˆ ๋ถ„ํ• ์€ ์˜๋ฃŒ ์ง„๋‹จ ๋ฐ ์น˜๋ฃŒ ๊ณ„ํš์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

Bone Segmentation์€ ์ธ๊ณต์ง€๋Šฅ ๋ถ„์•ผ์—์„œ ์ค‘์š”ํ•œ ์‘์šฉ ๋ถ„์•ผ ์ค‘ ํ•˜๋‚˜๋กœ, ํŠนํžˆ, ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ์ˆ ์„ ์ด์šฉํ•œ ๋ผˆ Segmentation์€ ๋งŽ์€ ์—ฐ๊ตฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ชฉ์ ์œผ๋กœ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์งˆ๋ณ‘ ์ง„๋‹จ์˜ ๋ชฉ์ ์œผ๋กœ ๋ผˆ์˜ ํ˜•ํƒœ๋‚˜ ์œ„์น˜๊ฐ€ ๋ณ€ํ˜•๋˜๊ฑฐ๋‚˜ ๋ถ€๋Ÿฌ์ง€๊ฑฐ๋‚˜ ๊ณจ์ ˆ ๋“ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ, ๊ทธ ๋ถ€์œ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์—ฌ ์ ์ ˆํ•œ ์น˜๋ฃŒ๋ฅผ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์ˆ˜์ˆ  ๊ณ„ํš์„ ์„ธ์šฐ๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์˜์‚ฌ๋“ค์€ ๋ผˆ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ˆ˜์ˆ ์ด ํ•„์š”ํ•œ์ง€, ์–ด๋–ค ์ข…๋ฅ˜์˜ ์žฌ๋ฃŒ๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋“ฑ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์˜๋ฃŒ์žฅ๋น„ ์ œ์ž‘์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ๊ณต ๊ด€์ ˆ์ด๋‚˜ ์น˜์•„ ์ž„ํ”Œ๋ž€ํŠธ๋ฅผ ์ œ์ž‘ํ•  ๋•Œ ๋ผˆ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ ์ ˆํ•œ ํฌ๊ธฐ์™€ ๋ชจ์–‘์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ์˜๋ฃŒ ๊ต์œก์—์„œ๋„ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์‚ฌ๋“ค์€ ๋ณ‘ํƒœ ๋ฐ ๋ถ€์ƒ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์ด๊ณ  ์ˆ˜์ˆ  ๊ณ„ํš์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ์ˆ ์„ ์—ฐ์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์˜ ๋ชจ๋ธ์€ ์งˆ๋ณ‘ ์ง„๋‹จ, ์ˆ˜์ˆ  ๊ณ„ํš, ์˜๋ฃŒ ์žฅ๋น„ ์ œ์ž‘, ์˜๋ฃŒ ๊ต์œก ๋“ฑ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ๐ŸŒŽ


๐Ÿ“… ํ”„๋กœ์ ํŠธ ์ผ์ •

ํ”„๋กœ์ ํŠธ ์ „์ฒด ์ผ์ •

  • 2024.11.11 (์›”) 10:00 ~ 2024.11.28 (๋ชฉ) 19:00

ํ”„๋กœ์ ํŠธ ์„ธ๋ถ€ ์ผ์ •

schedule

๐Ÿ’ป ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

- Language : Python
- Environment
  - CPU : Intel(R) Xeon(R) Gold 5120
  - GPU : Tesla V100-SXM2 32GB ร— 1
- Framework : PyTorch
- Collaborative Tool : Git, Wandb, Notion

๐Ÿ“ ๋ฐ์ดํ„ฐ์…‹ ๊ตฌ์กฐ

๐Ÿ“ฆdata
  โ”œโ”€๐Ÿ“‚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
  • ํ•™์Šต์— ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋Š” 800๊ฐœ, ์ถ”๋ก ์— ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋Š” 288๊ฐœ๋กœ ๊ฐ๊ฐ data/train/, data/test ์•„๋ž˜์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ œ๊ณต๋˜๋Š” ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์…‹์€ ์†๊ฐ€๋ฝ, ์†๋“ฑ, ํŒ” ๋ถ€์œ„์˜ 29๊ฐœ ์ข…๋ฅ˜์˜ ๋ผˆ๊ฐ€ ์ฐํžŒ 2048 x 2048 ํฌ๊ธฐ์˜ ์‚ฌ์ง„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • json ํŒŒ์ผ์€ ๊ฐ ํ•™์Šต ์ด๋ฏธ์ง€์˜ ๋ผˆ ์ข…๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•œ annotation file์ž…๋‹ˆ๋‹ค.

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๐Ÿ“ฆlevel2-cv-semanticsegmentation-cv-03-lv3
 โ”ฃ ๐Ÿ“‚.github
 โ”ƒ โ”— ๐Ÿ“‚ISSUE_TEMPLATE
 โ”ƒ   โ”— ๐Ÿ“œbug_report_template.yaml
 โ”ƒ   โ”— ๐Ÿ“œdocumentation_issue_template.yaml
 โ”ƒ   โ”— ๐Ÿ“œenhancement_request_template.yaml
 โ”ƒ   โ”— ๐Ÿ“œfeature_request_template.yaml
 โ”ƒ โ”— ๐Ÿ“œ.keep
 โ”ƒ โ”— ๐Ÿ“œpull_request_templat.md
 โ”ฃ ๐Ÿ“‚EDA
 โ”ƒ โ”— ๐Ÿ“œEDA.ipynb
 โ”ฃ ๐Ÿ“‚baseline
 โ”ƒ โ”— ๐Ÿ“‚config
 โ”ƒ   โ”— ๐Ÿ“œbase_config.yaml
 โ”ƒ   โ”— ๐Ÿ“œsetting.txt
 โ”ƒ โ”— ๐Ÿ“‚utils
 โ”ƒ   โ”— ๐Ÿ“‚ensemble_input
 โ”ƒ     โ”— ๐Ÿ“œ9542.csv
 โ”ƒ     โ”— ๐Ÿ“œ9680.csv
 โ”ƒ   โ”— ๐Ÿ“‚wandb
 โ”ƒ     โ”— ๐Ÿ“œwandb.ipynb
 โ”ƒ   โ”— ๐Ÿ“œclasswise_ensemble.py
 โ”ƒ   โ”— ๐Ÿ“œcrop_to_2048.ipynb
 โ”ƒ   โ”— ๐Ÿ“œearly_stop.py
 โ”ƒ   โ”— ๐Ÿ“œhard_ensemble.py
 โ”ƒ   โ”— ๐Ÿ“œvisualize_test.ipynb
 โ”ƒ   โ”— ๐Ÿ“œvisualize_train.ipynb
 โ”ƒ   โ”— ๐Ÿ“œwandb.py
 โ”ƒ โ”— ๐Ÿ“œdataset.py
 โ”ƒ โ”— ๐Ÿ“œinference.py
 โ”ƒ โ”— ๐Ÿ“œloss.py
 โ”ƒ โ”— ๐Ÿ“œmodel.py
 โ”ƒ โ”— ๐Ÿ“œmodel_tk.py
 โ”ƒ โ”— ๐Ÿ“œmodel_ui.py
 โ”ƒ โ”— ๐Ÿ“œscheduler.py
 โ”ƒ โ”— ๐Ÿ“œtrain.py
 โ”ฃ ๐Ÿ“‚baseline_monai/cv-03
 โ”ƒ โ”— ๐Ÿ“‚configs
 โ”ƒ   โ”— ๐Ÿ“œbase_train.yaml
 โ”ƒ โ”— ๐Ÿ“‚loss
 โ”ƒ   โ”— ๐Ÿ“œbase_loss.py
 โ”ƒ   โ”— ๐Ÿ“œloss_selector.py
 โ”ƒ โ”— ๐Ÿ“‚models
 โ”ƒ   โ”— ๐Ÿ“œbase_model.py
 โ”ƒ   โ”— ๐Ÿ“œmodel_selector.py
 โ”ƒ   โ”— ๐Ÿ“œmonai_unet.py
 โ”ƒ   โ”— ๐Ÿ“œmonai_unetplusplus.py
 โ”ƒ โ”— ๐Ÿ“‚scheduler
 โ”ƒ   โ”— ๐Ÿ“œscheduler_selector.py
 โ”ƒ โ”— ๐Ÿ“‚utils
 โ”ƒ   โ”— ๐Ÿ“œwandb.py
 โ”ƒ โ”— ๐Ÿ“œdataset.py
 โ”ƒ โ”— ๐Ÿ“œinference.py
 โ”ƒ โ”— ๐Ÿ“œtrain.py
 โ”ƒ โ”— ๐Ÿ“œtrainer.py
 โ”ฃ ๐Ÿ“œ.gitignore
 โ”ฃ ๐Ÿ“œCapitate_crop.ipynb
 โ”ฃ ๐Ÿ“œREADME.md
 โ”ฃ ๐Ÿ“œSAM_sample.ipynb

baseline code ์„ค๋ช…

1) train.py

  • argparse๋ฅผ ํ†ตํ•ด ์„ค์ • ๊ฐ’์„ ๋ฐ›์•„ ๋ชจ๋ธ ํ•™์Šต์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ

2) model.py

  • ๋ชจ๋ธ์„ ์ •์˜ํ•œ ํŒŒ์ผ
  • Model_Selector ํด๋ž˜์Šค๋กœ UNet++, DeepLabV3 ๋“ฑ์˜ ๋ชจ๋ธ ์„ ํƒ ๊ฐ€๋Šฅ

3) inference.py

  • ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์™€ ์˜ˆ์ธก๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ

4) dataset.py

  • ํ•™์Šต ๋ฐ ์ถ”๋ก  ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ ํŒŒ์ผ

5) loss.py

  • ํ•™์Šต ์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ loss๋ฅผ ์ •์˜ํ•˜๊ณ  ์„ ํƒํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ

6) scheduler.py

  • ํ•™์Šต ์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ scheduler๋ฅผ ์ •์˜ํ•˜๊ณ  ์„ ํƒํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ

โš™๏ธ requirements

  • opencv-python-headless==4.10.0.84
  • pandas==2.2.3
  • scikit-learn==1.5.2
  • albumentations==1.4.18
  • matplotlib==3.9.2
  • os
  • random
  • datetime
  • cv2
  • numpy
  • tqdm
  • omegaconf
  • argparse
  • torch
  • wandb

pip install -r requirements.txt


โ–ถ๏ธ ์‹คํ–‰ ๋ฐฉ๋ฒ•

ํ•™์Šต ๋ฐ ์ฒดํฌํฌ์ธํŠธ ์ €์žฅ

python train.py --config base_config.yaml

์ถ”๋ก 

python inference.py --config base_config.yaml

base_config.yaml ์„ค๋ช…

ํด๋ฆญํ•ด์„œ ํŽผ์น˜๊ธฐ/์ ‘๊ธฐ
  1. Data root:

    • ์„ค๋ช…: ํ•™์Šต ์ด๋ฏธ์ง€, annotation ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: image_root: /data/ephemeral/home/level2-cv-semanticsegmentation-cv-03-lv3/data/train/DCM label_root: /data/ephemeral/home/level2-cv-semanticsegmentation-cv-03-lv3/data/train/outputs_json
  2. Hyperparameter:

    • ์„ค๋ช…: ํ•™์Šต ์‹œ ์‚ฌ์šฉ๋˜๋Š” ํ•˜์ดํผ ํŒŒ๋ผ๋ฏธํ„ฐ(๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ, ํ•™์Šต๋ฅ , random seed)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: train_batch_size: 4 val_batch_size: 2 learning_rate: 1e-4 random_seed: 42
  3. Train:

    • ์„ค๋ช…: ํ•™์Šต ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ, epoch, validation ์ฃผ๊ธฐ, ์†์‹ค ํ•จ์ˆ˜, ์Šค์ผ€์ค„๋Ÿฌ, ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ, accumulation step, patience๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: model: 'unetplusplus' num_epoch: 60 val_every: 5 loss: 'diceiou_loss' scheduler: 'CosineAnnealingWarmRestarts' image_size: 1024 accumulation_steps: 4 patience: 3
  4. Test:

    • ์„ค๋ช…: ์ถ”๋ก  ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋œ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: test_image_root: "/data/ephemeral/home/level2-cv-semanticsegmentation-cv-03-lv3/data/test/DCM"
  5. Save directory:

    • ์„ค๋ช…: ํ•™์Šต๋œ ๋ชจ๋ธ, ์ถ”๋ก  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: save_dir: "checkpoints" save_file_name: "unet++_diceiou_best_model.pt" csv_file_name: "output_unet++_diceiou.csv"
  6. Project name:

    • ์„ค๋ช…: ์‹คํ—˜ ์ฃผ์ œ์™€ ์„ค๋ช…์„ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ: project_name: '์‹คํ—˜ ์ฃผ์ œ' detail: '์„ธ๋ถ€ ๋‚ด์šฉ'

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Jupyter Notebook 99.0%
  • Python 1.0%