boostcampaitech2 / semantic-segmentation-level2-cv-02

semantic-segmentation-level2-cv-02 created by GitHub Classroom
4 stars 4 forks source link

Boostcamp Recycle Trash Semantic Segmentation Challenge

Code for 20th place solution in Boostcamp AI Tech Recycle Trash Semantic Segmentation Challenge.

πŸ“‹ Table of content



πŸ‘‹ νŒ€ μ†Œκ°œ

Contributors

κΉ€μ„œμ› μ΄μœ μ§„ μ΄ν•œλΉˆ μ •μ„Έμ’… μ‘°ν˜„λ™ ν—ˆμ§€ν›ˆ ν—ˆμ •ν›ˆ



β™» λŒ€νšŒ κ°œμš”

λŒ€λŸ‰ 생산, λŒ€λŸ‰ μ†ŒλΉ„μ˜ μ‹œλŒ€μ— μ‚΄λ©° 'μ“°λ ˆκΈ° λŒ€λž€', '맀립지 λΆ€μ‘±'κ³Ό 같은 μ—¬λŸ¬ μ‚¬νšŒ 문제λ₯Ό λ‚³κ³  μžˆλ‹€.
λΆ„λ¦¬μˆ˜κ±°λŠ” μ΄λŸ¬ν•œ ν™˜κ²½λΆ€λ‹΄μ„ 쀄일 수 μžˆλŠ” 방법이닀. ν•΄λ‹Ή λŒ€νšŒλŠ” μ“°λ ˆκΈ°λ₯Ό Segmentationν•˜λŠ” λͺ¨λΈμ„ λ§Œλ“€μ–΄ μ •ν™•ν•œ λΆ„λ¦¬μˆ˜κ±°λ₯Ό λ•λŠ” 것에 κΈ°μ—¬ν•œλ‹€.



πŸ“ 문제 μ •μ˜ 및 ν•΄κ²° 방법



πŸ’» CODE μ„€λͺ…

Archive contents

segmentation
β”œβ”€β”€ input
β”‚   └── data
β”œβ”€β”€ semantic-segmentation-level2-cv-02
β”‚   β”œβ”€β”€ base
β”‚   β”œβ”€β”€ data_loader
β”‚   β”œβ”€β”€ logger
β”‚   β”œβ”€β”€ loss
β”‚   β”œβ”€β”€ model
β”‚   β”œβ”€β”€ trainer
β”‚   └── utils
β”œβ”€β”€ train.py
β”œβ”€β”€ train_kfold.py
β”œβ”€β”€ test.py
β”œβ”€β”€ test_TTA.py
β”œβ”€β”€ visulaize.py
β”œβ”€β”€ csv_ensemble.py
└── create_resize_data.py

Train

cd segmentation/semantic-segmentation-level2-cv-02
  1. vanilla train
    python train.py [config path]
    python train.py configs/config.json
  2. k-fold train
    config file에 μ•„λž˜μ™€ 같은 인자 μΆ”κ°€
       "kfold": {
        "flag": true,
        "cnt": 5,
        "train_fold": "../input/data/train_fold.json", 
        "valid_fold": "../input/data/val_fold.json"        
    },
    python train_kfold.py [config path]
  3. Pseudo Labeling Train & Inference
    512x512 둜 inference ν•œ csv file μ€€λΉ„
    python pseudo_labeling.py --test_csv [csv file path]
  4. Expeiment with 256x256 image λΉ λ₯Έ μ‹€ν—˜μ„ μœ„ν•œ 256x256 scale image 둜 μ‹€ν—˜
    python create_resize_data.py

    resized data μ‚¬μš© μ‹œ config μ—μ„œ train, validation data loader μ•„λž˜μ™€ 같이 μˆ˜μ •

    "data_loader": {
    "type": "ResizedBasicDataLoader",
    "args": {
    "dataset": {
    "type": "ResizedBasicDataset",
    "args": {
    "data_dir": "../input/resized_data_256",
    "mode": "train",
    "transform": {"type": "BasicTransform", "args": {}}
    }

Inference

cd segmentation/semantic-segmentation-level2-cv-02
  1. vanilla inference
    python test.py -c [config path] -r [pth path]
  2. TTA inference
    python test_TTA.py -c [config path] -r [pth path]

Visualization Result

  1. test 이미지 μ‹œκ°ν™”
    semantic-segmentation-level2-cv-02/visualize.py 의 submission_path 에 μ‹œκ°ν™”ν•˜κ³ μž ν•˜λŠ” csv파일 경둜 λ„£κ³  Run Cell
  2. validation 이미지 μ‹œκ°ν™”
    wandb μ‚¬μš©, utils/wandb.py 의 show_images_wandb ν•¨μˆ˜λ‘œ validation μ‹œ 이미지 μ‹œκ°ν™”

Ensemble

ensemble_method : Hard Voting

cd segmentation/semantic-segmentation-level2-cv-02

submission.csv 경둜 μΆ”κ°€ ν›„

python csv_ensemble.py



πŸ‘€ DEMO κ²°κ³Ό

Backbone : EfficientNet-b4
Segmentation Head : UNet++
Original Image Ground Truth Predicted Image

data license : Naver Boostcamp AI Tech λŒ€νšŒκ΅μœ‘μš© μž¬ν™œμš© μ“°λ ˆκΈ° 데이터셋. CC BY 2.0