This project is the Naver Boost Camp CV11 team's submission code for Hand Bone Image Segmentation competition.
Given an image of hand bone, it is a matter of segmenting 29 bone parts.
- OS : Linux Ubuntu 18.04.5
- GPU : Tesla V100 (32GB)
├─eda
├─ensemble
├─mmdetection
├─mmdetection3
├─UniverseNet
├─yolov8
├─multilabel_kfold.py
└─streamlit
pip install -r requirements.txt
-
Move the path to the tools folder where the train.sh file is located
-
Write python3 train.py command in train.sh file
python3 train.py --model FCN --loss bce_loss --epochs 100
All arguments for config training
python3 train.py [-h] [--seed SEED] [--loss LOSS] [--model MODEL] [--epochs EPOCHS] [--val_every VAL_EVERY] [--train_batch TRAIN_BATCH] [--train_workers TRAIN_WORKERS] [--wandb WANDB] [--encoder ENCODER] [--save_dir SAVE_DIR] [--model_path MODEL_PATH] [--debug DEBUG] [--transform TRANSFORM] [--acc_steps ACC_STEPS] [--dataclean DATACLEAN]
-
Run
nohup sh train.sh
Metric : Dice coefficient
model | encoder | loss | wandb | public |
---|---|---|---|---|
MAnet | resnet101 | bce | 0.9516 | 0.9456 |
MAnet | resnet101 | smp_dice | 0.9513 | 0.9489 |
MAnet | resnet101 | calc | 0.9523 | 0.9484 |
MAnet | resnet101 | smp_focal | 0.9506 | 0.9452 |
MAnet | resnet101 | bce_with_logit | 0.9492 | |
MAnet | resnet101 | jaccard | 0.9538 | 0.9496 |
MAnet | resnet101 | tversky | 0.9524 | 0.9490 |
MAnet | resnet101 | comb(bce: 0.5, dice: 0.5) | 0.9526 | 0.9500 |
MAnet | resnet101 | comb1(bce: 0.33, dice:0.33, jaccard: 0.33) | 0.9524 | 0.9490 |
MAnet | resnet101 | comb2(bce: 1, dice: 3, jaccard: 6) | 0.9528 | 0.9500 |
MAnet | resnet101 | comb3(bce: 0.1, dice:0.6, jaccard: 0.3) | 0.9531 | 0.9503 |
We use comb3 as our loss. You can use it by set argument when training "--loss comb_loss"
Metric : Dice coefficient
augmentation | wandb | 리더보드 |
---|---|---|
ElasticTransform(300) | 0.9527 | 0.9507 |
Rotate(limit=45) | 0.9524 | 0.9502 |
RandomContrast(limit=[0,0.5], p=1) | 0.9617 | 0.9497 (inference transform: 0.9500) |
RandomContrast (limit=0.2, p=0.5) | 0.9515 | 0.9484 |
RandomContrast(limit=[0,0.5], p=0.5) | 0.9493 | 0.9471 |
Normalize | 0.9486 | 0.9465 |
ElasticTransform(400) | 0.9524 | 0.9450 |
Crop | 0.9479 | |
CenterCrop | 0.9343 | 0.9243 (inference transform: 0.2927) |
Equalize and remove black (200) | 0.6426(100) →0.7891 (200) |
We use ElasticTransform(300), Rotate(limit=45) and RandomContrast(limit=[0,0.5], p=1) as our final augmentation.
Metric : Dice coefficient
TTA | 리더보드 |
---|---|
TTA 적용 안했을 때 | 0.9710 |
HorizontalFlip | 0.9710 |
HorizontalFlip, Multiply([0.9,1,1.1,1.2]) | 0.9717 |
HorizontalFlip, Multiply([0.9,1,1.1,1.2]), Rotate 90 | 0.9585 |
We use HorizontalFlip, Multiply([0.9,1,1.1,1.2]) as our final TTA combination
- Final submission : Public : 0.9743(2nd) / Private : 0.9749(2nd)