Skip to content

boostcampaitech7/level2-objectdetection-cv-14

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📋 Project Overview

project_image

바야흐로 대량 생산, 대량 소비의 시대. 우리는 많은 물건이 대량으로 생산되고, 소비되는 시대를 살고 있습니다. 하지만 이러한 문화는 '쓰레기 대란', '매립지 부족'과 같은 여러 사회 문제를 낳고 있습니다.

분리수거는 이러한 환경 부담을 줄일 수 있는 방법 중 하나입니다. 잘 분리배출 된 쓰레기는 자원으로서 가치를 인정받아 재활용되지만, 잘못 분리배출 되면 그대로 폐기물로 분류되어 매립 또는 소각되기 때문입니다.

따라서 우리는 사진에서 쓰레기를 Detection 하는 모델을 만들어 이러한 문제점을 해결해보고자 합니다.

  • 입력
    • 쓰레기 객체가 담긴 이미지, bbox 정보(좌표, 카테고리)
    • bbox annotation은 COCO format
  • 출력
    • bbox 좌표, 카테고리, score 값을 리턴.
    • submission 양식에 맞게 csv 파일을 만들어 제출
    • COCO format이 아닌 Pascal VOC format

🗃️ Dataset

  • 전체 이미지
    • 9754 images
    • train
      • 4883 images
    • test
      • 4871 images
  • 클래스 수
    • 10 class
    • General trash, Paper, Paper pack, Metal, Glass, Plastic, Styrofoam, Plastic bag, Battery, Clothing
  • 이미지 크기
    • 1024 x 1024

😄 Team Member

김건수 박진영 방민혁 오홍석 이소영 이예진
T7103 T7156 T7158 T7208 T7222 T7225

🗂️ Role

Member Role
김건수 PM 역할 수행, YOLO Develop, Ensemble
박진영 ConvNeXT Develop, Ensemble, Util 기능 구현
방민혁 EDA, Data Relabel, ATSS Swin Develop, Ensemble
오홍석 PM 역할 수행, DETR 기반 Model Develop,
Util 기능 구현, Project 구조 및 서버 환경 구성
이소영 VFNet, RTMDet Model Develop, Util 기능 구현
이예진 EDA, Data Relabel, Pseudo Labeling, TTA

🧳 Project Progress Summary

아래의 항목들로 프로젝트를 진행한 과정을 설명한다.


Project Structure

📦 level2-objectdetection-cv-14
┣ 📂 EDA_data
┃ ┣ 📜 eda_(2).ipynb
┃ ┣ 📜 eda_dataset.ipynb
┃ ┣ 📜 eda_traindata.ipynb
┣ 📂 mmdetection
┃ ┣ 📂 configs
┃ ┣ 📂 custom_configs
┃ ┣ 📂 mmdet
┃ ┗ 📜 train.py
┃ ┗ 📜 inference.py
┣ 📂 mmdetectionV3
┃ ┣ 📂 configs
┃ ┣ 📂 custom_configs
┃ ┣ 📂 mmdet
┃ ┗ 📜 train.py
┃ ┗ 📜 inference.py
┣ 📂 yolo
┣ 📂 utils
┃ ┣ 📜 csv_pseudo.py
┃ ┣ 📜 Ensemble.py
┃ ┣ 📜 Gsheet.py
┃ ┣ 📜 modify_test.py
┃ ┣ 📜 pseudo_data_split.py
┃ ┣ 📜 pseudo_ensemble_labeling.py
┃ ┣ 📜 pseudo_labeling.py
┃ ┣ 📜 pseudo_labes_count.py
┃ ┣ 📜 split_val_train_log.py
┃ ┣ 📜 Stratified_Group_K_Fold.py
┣ 📃 requirements.txt
┗ 📃 README.md

🕵🏻 EDA

Class Imbalance, Object Size 등 여러 항목에 대해서 진행하였다.
아래는 그 중 하나에 대한 예시이다.
Wrap-UP Report 참고

BBox Area Distribution

image

  • Clothing은 상대적으로 큰 박스 크기를 가지고 있으며 Battery와 같은 물체는 작고 일정한 크기로 나타나는 경향을 확인
  • Glass, Plastic, Paper Pack, Plastic bag 등의 경우, 박스 크기가 매우 다양한 분포를 보임

🧪 Experiments

진행한 실험으로는 Data Relabeling, Pseudo Labeling 등이 있다.
아래는 그 중 하나에 대한 예시이다.
Wrap-UP Report 참고

Data Relabeling

  • 잘못된 라벨링에 대해서 수정하는 작업을 거침
  • Object 마다 label의 통일성 유지 ex) 전단지나 명함 같은 경우 General trash로 통일

📚 Model Selection and Develop

사용한 모델에는 ATSS Swin, ConvNeXT, DINO 등등 여러가지가 있다.
아래는 그 중 하나에 대한 예시이다.
Wrap-UP Report 참고

ATSS Swin

Version Description Public mAP 50
1 ATSS Swin Base model 적용 0.5587
2 pretrained model 교체 (swin win12-384 model) 0.5397
3 Cascade Swin Base model 적용 0.5482
4 load_from(사전 학습된 가중치) 적용 0.6297
5 Anchor ratios 수정 0.6073
6 train_pipeline의 Resize를 multiscale_v1로 수정 0.6536
7 Hard Augmentation 0
8 train_pipeline의 Resize를 (1024,1024)로 수정 0.6558
9 train_pipeline의 Resize를 multiscale_v2로 수정 0.6800

🖇️ Ensemble

  • 모델간 앙상블에서 2가지 전략을 사용하였다.
  • Stratified Group K Fold Cross Validation
    • 각기 다른 Fold에 학습한 같은 구조의 모델간 앙상블 (NMS, WBF)
  • 다른 모델간 앙상블
    • Confusion Matrix와 같은 평가 지표를 활용하여 모델간 특성을 파악
    • 파악한 모델간 특성을 바탕으로 최적의 모델 조합 선택

Stratified Group K Fold Cross Validation Ensemble

Model Fold Avg Score WBF NMS
ConvNeXT 0.6929 0.7091 0.7063
DINO 0.6969 0.5328 0.7106
ATSS Swin 0.6791 0.6929 0.6970
YOLO 0.4360 0.5539 0.5272
CO-DINO 0.6955 0.6212 0.7111

Final Model Ensemble Strategy

image


Utils

프로젝트를 진행하면서 편의성을 위한 기능 또는 실험을 위한 추가 기능들을 구현하였다.

  • Stratified Group K Fold Cross Validation
  • Google Sheet을 이용한 실험 인자 기록 자동화
  • Pseudo Labeling 관련 기능
  • train / inference log 분할 기능 등등

아래는 그 중 하나에 대한 예시이다.
Notion 참고

Stratified Group K Fold Cross Validation

  • 학습한 모델의 성능 평가를 위해서 Validation Set을 분리해낸다.
  • 기존 데이터 셋의 클래스 분포를 유지한다. (아래 표 참고)
  • 같은 이미지에서 나온 annotation이 Train 또는 Validation에만 포함되도록 구분한다.
General trash Paper Paper pack Metal Glass Plastic Styrofoam Plastic bag Battery Clothing
training set 17.14% 27.45% 3.88% 4.04% 4.24% 12.72% 5.46% 22.37% 0.69% 2.02%
train - fold1 17.11% 26.73% 3.92% 4.07% 4.14% 13.01% 5.46% 22.88% 0.66% 2.02%
val - fold1 17.23% 29.88% 3.72% 3.96% 4.59% 11.70% 5.45% 20.66% 0.76% 2.04%
train - fold2 17.17% 27.75% 3.92% 4.16% 4.27% 12.52% 5.47% 22.21% 0.66% 1.88%
val - fold2 17.01% 26.23% 3.72% 3.58% 4.13% 13.53% 5.40% 23.02% 0.81% 2.58%
train - fold3 17.05% 27.66% 3.95% 3.81% 4.37% 12.35% 5.67% 22.51% 0.66% 1.99%
val - fold3 17.53% 26.55% 3.56% 5.04% 3.71% 14.29% 4.56% 21.79% 0.82% 2.16%
train - fold4 17.18% 27.19% 3.85% 4.00% 4.28% 12.66% 5.66% 22.37% 0.70% 2.11%
val - fold4 16.96% 28.54% 4.00% 4.23% 4.07% 12.94% 4.59% 22.40% 0.64% 1.64%
train - fold5 17.18% 27.88% 3.75% 4.19% 4.15% 13.05% 5.02% 21.92% 0.76% 2.11%
val - fold5 16.95% 25.66% 4.41% 3.46% 4.63% 11.33% 7.23% 24.25% 0.40% 1.68%

🏆 Project Result

Public Leader Board

Public Leader Board


Private Leader Board

Private Leader Board


🔗 Reference


Commit Convention

  1. Feature : 새로운 기능 추가
  2. Fix : 버그 수정
  3. Docs : 문서 수정
  4. Style : 코드 포맷팅 → Code Convention
  5. Refactor : 코드 리팩토링
  6. Test : 테스트 코드
  7. Comment : 주석 추가 및 수정

커밋할 때 헤더에 위 내용을 작성하고 전반적인 내용을 간단하게 작성합니다.

예시

  • git commit -m "[#issue] Feature : message content"

커밋할 때 상세 내용을 작성해야 한다면 아래와 같이 진행합니다.

예시

git commit
어떠한 에디터로 진입하게 된 후 아래와 같이 작성합니다.
[header]: 전반적인 내용
. (한 줄 비워야 함)
상세 내용


Branch Naming Convention

브랜치를 새롭게 만들 때, 브랜치 이름은 항상 위 Commit Convention의 Header와 함께 작성되어야 합니다.

예시

  • Feature/~~~
  • Refactor/~~~

About

level2-objectdetection-cv-14 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published