boostcampaitech2 / semantic-segmentation-level2-cv-09

semantic-segmentation-level2-cv-09 created by GitHub Classroom
2 stars 6 forks source link

재활용 품목 분류를 위한 Sementic Segmentation in Bostcamp

💻 하나둘셋Net()

😎 Members


공은찬 곽민구 김준섭 김진용 심용철 오재석 최현진
image image image image image image image
Notion TIL Git Blog Notion TIL Devlog

🔎 Competition Overview


image

잘 분리 배출 된 쓰레기는 자원으로서 가치를 인정받아 재활용되지만, 잘못 분리배출 되면 그대로 폐기물로 분류되어 매립 또는 소각되기 됩니다.
따라서 우리는 사진에서 쓰레기를 Segmentation하는 모델을 만들어 이러한 문제점을 해결해보고자 합니다. 문제 해경을 위한 데이터셋으로는 배경, 일반 쓰레기, 플라스틱, 종이, 유리 등 11종류의 쓰레기가 찍힌 사진 데이터셋이 제공됩니다.
여러분에 의해 만들어진 우수한 성능의 모델은 쓰레기장에 설치되어 정확한 분리수거를 돕거나, 어린아이들의 분리수거 교육 등에 사용될 수 있을 것입니다.

🎉 수행결과 best score?

✨ 리더보드(대회 진행): 11위 mIoU : 0.757

🎊 리더보드(최종): 14위 mIoU : 0.706



🎮 Requirements

⌨ Hardware

🔍 Reference

📏 역할

팀구성 역할
공은찬_T2009 Custom loss, Optimizer 적용
곽민구_T2255 Optimizer, Loss, Scheduler Test 진행
김준섭_T2056 Segmentation Multi-label Stratified K-fold 구성
김진용_T2063 Copy paste 데이터 셋 제작
심용철_T2122 Model 탐색, Resize 및 weighted loss 실효성 검증
오재석_T2133 Stratified K-fold 데이터셋 코드 틀 작성
최현진_T2234 Baseline Code 작성, Pseudo Labeling, Oversampling

🔨 수행 과정


🔑 Validation Dataset 구성



🔑 Oversampling

image

image



🔑 Pseudo Labeling



🔑 DenseCRF



📂 Archive contents

baseline/
├── train.py # main
├── trainer.py
├── dataset.py
├── test.py
├── utils.py
└── models/ # train model package
└── loss/ # loss metric package
└── scheduler/ # scheduler package
└── model
  └── exp1/ # model file will save here
util/
├── oversampling.py
└── pseudo_labeling.py
copy_paste/
├─ check_copy_paste.ipynb
├─ copy_paste.py
├─ mask_convert_json.py
├─ get_coco_mask.py
├─ README.md
└─ requirements.txt


💎Copy Paste


Augmentation Method:

  1. Random Horizontal Flip
  2. Large Scale Jittering
  3. Copy-Paste
  4. Large patch to Small patch
  5. Small patch to Large patch
  6. Random Flip

Copy_paste Quick Start

1. 쉘 스크립트를 사용하고자 한다면 해당 디렉토리에 들어가 다음 명령어를 입력한다.

./aug.sh


2. 명령어를 따로 입력하고자 한다면 다음과 같은 순서로 명령어를 입력한다.

1. 모듈 설치하기

pip install -r requirements.txt


2. 원본 이미지와 json 파일을 통해 segmentation mask 생성

python get_coco_mask.py  
--input_dir ../../input/data/ 
--split train_all


3. 원본 이미지, 원본 mask, 랜덤 이미지, 랜덤 mask로부터 copy_paste

python copy_paste.py --input_dir ../../input/data/ --output_dir ../../input/data/ 
--patch ["Paper pack", "Battery", "Plastic", 'Clothing',"Glass" ]
--remove_patch ["Paper", "Plastic bag"]
--json_path train.json
--lsj True
--lsj_max 2
--lsj_min 0.2
--aug_num 1500
--extract_patch True

image


4. mask로부터 json파일로 변환

python mask_coco_mask.py
--main_json train.json
--mode add

5. 결과

image

🛒 Train Test Quickstart

python train.py \
--model UPlusPlus_Efficient_b5 \
--epochs 200 \
--loss FocalLoss \
--val_json kfold_0_val.json \
--train_json kfold_0_train.json \
--train_augmentation CustomTrainAugmentation \
--batch_size 5
python test.py python test.py --model_dir model/exp --model_name epoch10.pth --augmentation TestAugmentation