Skip to content

πŸ‘©β€πŸŽ¨ Computer Vision Semantic Segmentation Competition

Notifications You must be signed in to change notification settings

swkim-sm/semantic-segmentation-level2-cv-02

Β 
Β 

Repository files navigation

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ν•˜λŠ” λͺ¨λΈμ„ λ§Œλ“€μ–΄ μ •ν™•ν•œ λΆ„λ¦¬μˆ˜κ±°λ₯Ό λ•λŠ” 것에 κΈ°μ—¬ν•œλ‹€.

  • Dataset μ„€λͺ…

    • 512 x 512 크기의 train 2617μž₯ (80%) , public test 417μž₯ (10%) , private test 420μž₯(10%)
    • 총 10개의 class 쑴재
      • Background, General trash, Paper, Paper pack, Metal, Glass, Plastic, Styrofoam, Plastic bag, Battery, Clothing
    • coco format으둜 images , annotations 정보 쑴재
      • images : id, height , width, filename
      • annotatins : id, segmentation mask , bbox, area, category_id , image_id
  • 평가방법

    • Semantic Segmentation : mIOU



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

  • Template
    pytorch template ν˜•μ‹μ— 맞게 직접 κ΅¬ν˜„

  • Model
    FCN
    UNet, UNet++
    DeepLab, DeepLab++, DeepLab+++
    HRNet, HRNet_OCR

  • Techniques
    Data hard augmentation
    Mixup, Cutmix
    Stratified K-Fold
    Pseudo Labeling
    TTA
    Ensemble
    WandB



πŸ’» 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
  1. 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]
  1. Pseudo Labeling Train & Inference
    512x512 둜 inference ν•œ csv file μ€€λΉ„
python pseudo_labeling.py --test_csv [csv file path]
  1. 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]
  1. 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

About

πŸ‘©β€πŸŽ¨ Computer Vision Semantic Segmentation Competition

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%