Code for 20th place solution in Boostcamp AI Tech Recycle Trash Semantic Segmentation Challenge.
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
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
cd segmentation/semantic-segmentation-level2-cv-02
- vanilla train
python train.py [config path]
python train.py configs/config.json
- 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]
- Pseudo Labeling Train & Inference
512x512 로 inference 한 csv file 준비
python pseudo_labeling.py --test_csv [csv file path]
- 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": {}}
}
cd segmentation/semantic-segmentation-level2-cv-02
- vanilla inference
python test.py -c [config path] -r [pth path]
- TTA inference
python test_TTA.py -c [config path] -r [pth path]
- test 이미지 시각화
semantic-segmentation-level2-cv-02/visualize.py 의 submission_path 에 시각화하고자 하는 csv파일 경로 넣고 Run Cell - validation 이미지 시각화
wandb 사용, utils/wandb.py 의 show_images_wandb 함수로 validation 시 이미지 시각화
ensemble_method : Hard Voting
cd segmentation/semantic-segmentation-level2-cv-02
submission.csv 경로 추가 후
python csv_ensemble.py
Backbone : EfficientNet-b4
Segmentation Head : UNet++
Original Image | Ground Truth | Predicted Image |
---|---|---|
data license : Naver Boostcamp AI Tech 대회교육용 재활용 쓰레기 데이터셋. CC BY 2.0