우리는 많은 물건이 대량으로 생산되고, 소비되는 시대를 살고 있습니다. 하지만 이러한 문화는 '쓰레기 대란', '매립지 부족'과 같은 여러 사회 문제를 낳고 있습니다.분리수거는 이러한 환경 부담을 줄일 수 있는 방법 중 하나입니다. 잘 분리배출 된 쓰레기는 자원으로서 가치를 인정받아 재활용되지만, 잘못 분리배출 되면 그대로 폐기물로 분류되어 매립 또는 소각되기 때문입니다.
따라서 사진에서 쓰레기를 Detection 하는 모델을 만들어 이러한 문제점을 해결해보고자 합니다. 문제 해결을 위한 데이터셋으로는 일반 쓰레기, 플라스틱, 종이, 유리 등 10 종류의 쓰레기가 찍힌 사진 데이터셋을 활용할 예정이며, 이를 통해 구축된 모델은 분리수거를 돕거나 어린아이들의 분리수거 교육 등에 사용 될 수 있습니다.
프로젝트 기간 : 24.09.30 ~ 24.10.28
부스트코스 강의 수강 및 과제 : 24.09.30 ~ 24.10.06
데이터 EDA / 데이터 전처리 / 베이스라인 모델 학습 : 24.10.07 ~ 24.10.13
데이터 증강 및 모델 성능 개선 : 24.10.14 ~ 24.10.18
하이퍼 파라미터 튜닝 / 앙상블 : 24.10.19 ~ 24.10.24
최종 자료 정리 및 문서화 : 24.10.25 ~ 24.10.28
김성규 |
김유경 |
김재진 |
박수영 |
이단유 |
Name | Roles |
---|---|
김성규 | 타임라인 관리, EDA 분석, Cascade r-cnn, EfficientDet, ATSS 모델 성능 실험, 앙상블(WBF) 적용 |
김유경 | Git 관리, small object 증강 실험, DDQ, H-Dino 모델 성능 실험 |
김재진 | EDA 분석, YOLO11, EfficientDet, DINO, ATSS 모델 성능 실험 |
박수영 | 회의록 작성 및 서버 사용 관리, 증강 실험 |
이단유 | EDA 분석, faster r-cnn 모델 성능 실험, 증강 실험, 보고서 관리 |
wrap up 레포트 : wrap up report
서버 : V100 GPU
버전 관리 : Github
기록 관리 : Notion, Google Docs
MLOps : WandB
기타 : Streamlit, Zoom
EDA
-
전체 데이터에서 Paper, Plastic bag, General trash 의 비율이 높으며, 클래스 당 객체 수의 분포가 고르지 않고 불균형이 심함을 확인했습니다. -> Oversamplig 기법 활용
-
또한, 바운딩 박스의 크기가 이미지 면적의 5% 이하에 집중되어 있음을 확인했습니다. -> Mosaic, Small Object 기법 활용
Preprocessing
- 데이터 시각화를 바탕으로 클래스 불균형 문제를 해결하기 위해 Oversampling 기법을 진행했습니다.
- Detectron2의 RepeatFactorTrainingSampler, mmDetection v3의 ClassAwareSampler를 사용
Model | Backbone | Oversampling | mAP_50 |
---|---|---|---|
faster R-CNN | resnext101_fpn | X | 0.4523 |
faster R-CNN | resnext101_fpn | O | 0.4872 |
Augmentation
아래와 같은 3가지 증강 기법을 Faster R-CNN 모델에 적용해보았습니다.
- 객체 탐지 논문에서 가장 많이 사용되는 기본적인 증강 기법들 (Horizontal/Vertical Flip, Random Crop, Color transform)
- 여러 장의 이미지를 하나로 결합하여 다양한 형태의 이미지를 생성하는 Mosaic 기법
- 작은 객체를 여러번 복사하여 붙여넣어 새로운 이미지를 생성하는 Small object 기법
(좌측부터 원본 이미지, Basic Aug, Mosaic, Small Object 증강 기법 적용)
No Aug | Basic Aug | Mosaic | Small Object | |
---|---|---|---|---|
mAP_50 | 0.3815 | 0.4640 | 0.4554 | 0.4645 |
Models
- 기본적인 1-stage, 2-stage 모델부터 최신 SOTA 논문에 등재된 모델들까지 다양하게 실험했습니다.
- 1-stage model : EfficientDet, YOLO11,
- 2-stage model : Cascade R-CNN, faster R-CNN, Cascade mask R-CNN
- SOTA model : ATSS, DDQ-DETR, DINO, H-DINO
TTA (Test Time Augmentation)
- 추론 과정에서 모델이 다양한 입력을 통해 일반화 성능을 높이기 위해 TTA를 도입했습니다.
- Resize와 RandomFlip 기법 적용
Model | Backbone | TTA | mAP_50 |
---|---|---|---|
H-DINO | ResNet50 | X | 0.3924 |
H-DINO | ResNet50 | O | 0.5488 |
Ensemble
- 성능이 가장 높았던 모델들을 활용하여, WBF, Soft-NMS, NMS 세 가지 기법의 앙상블을 적용하였습니다.
- 다만, 단일 모델 성능이 앙상블 방식보다 높았습니다.
Method | Model1 | Model2 | Model3 | mAP_50 |
---|---|---|---|---|
WBF | DDQ* | DINO* | 0.6597 | |
WBF | DDQ(Mosaic)* | DINO* | 0.6566 | |
WBF | ATSS | DINO* | DDQ* | 0.6581 |
NMS | ATSS | DINO* | DDQ* | 0.6421 |
Soft-NMS | ATSS | DINO* | DDQ* | 0.6258 |
(* : TTA 적용)
- 최종 선택된 모델은 아래와 같습니다.
Model | Backbone | Preprocessing | score threshold | etc | mAP_50 |
---|---|---|---|---|---|
DINO | Swin-l | Oversampling | 0.05 | feature map level : 6 TTA |
0.6660 |
DINO 실행 방법 및 코드
model/mmdetection_v3
내로 디렉토리 변경
cd model/mmdetection_v3
train.py
실행
python tools/train.py {config 폴더 경로}
# DINO Train:
python tools/train.py my_config/dino_swin_recycle_v3.py
test.py
실행
python tools/test.py {config 폴더 경로} {model checkpoint 경로} [tta 여부]
# DINO Test:
python tools/test.py my_config/dino_swin_recycle_v3.py my_config/work_dirs/dino_recycle/epoch_num.pth --tta
- 생성된 json file을
submission
형태로 변환
python ../../submission/json_to_submission.py {생성된 json file 경로} {output 디렉토리 경로} {output file 이름} {score_threshold} [train 여부]
# Convert
python ../../submission/json_to_submission.py my_config/work_dirs/dino_recycle/submission.json ../../submission dino_output_file 0.05
프로젝트는 다음과 같은 구조로 구성되어 있습니다.
📦level2-imageclassification-cv-20
┣ 📂etc # 프로젝트 설명을 위한 기타 파일 폴더
┣ 📂experiments # 실험 관련 폴더
┃ ┣ 📂EDA # 모델 학습 전, 후 EDA 폴더
┃ ┣ 📂ensemble # 앙상블 관련 폴더
┃ ┣ 📂mosaic # mosaic 증강 관련 폴더
┃ ┗ 📂small_object # 작은 객체 탐지 관련 폴더
┣ 📂model # 모델 라이브러리 관련 폴더
┃ ┣ 📂detectron2
┃ ┣ 📂mmdetection
┃ ┣ 📂mmdetection_v3
┃ ┗ 📂yolo
┗ 📂submission # csv output 폴더
- 본 프로젝트에서 사용한 데이터셋의 적용 저작권 라이선스인 CC-BY 2.0(link)의 가이드를 준수하고 있습니다.