Skip to content

UpstageAILab/upstage-cv-classification-cv4

Repository files navigation

Review Assignment Due Date

Document Type Classification | 문서 타입 분류

Team CV 4조

박패캠 이패캠 최패캠 김패캠 오패캠 오패캠
강승현 김형수 이소영A 김창희 진성준 김하연
팀장, 담당 역할 담당 역할 담당 역할 담당 역할 담당 역할 담당 역할

0. Overview

Environment

  • (컴퓨팅 환경) 인당 RTX 3090 서버를 VSCode와 SSH로 연결하여 사용
  • (협업 환경) Github, Wandb
  • (의사 소통) Slack, Zoom

1. Competiton Info

Overview

  • computer vision domain에서 이미지 분류를 위한 대회로, 주어진 문서의 이미지를 해당 문서 유형으로 분류하는 대회

Timeline

  • February 5, 2024 - Start Date
  • February 19, 2024 - Final submission deadline

2. Components

Directory

├── README.md
├── changhee
│   ├──DTC.ipynb
│   ├──DTC10.ipynb
│   ├──DTC11.ipynb
│   ├──DTC12.ipynb
│   ├──DTC13.ipynb
│   ├──DTC14.ipynb
│   ├──DTC15.ipynb
│   ├──DTC16.ipynb
│   ├──DTC17.ipynb
│   ├──DTC18.ipynb
│   ├──DTC19.ipynb
│   ├──DTC2.ipynb
│   ├──DTC20.ipynb
│   ├──DTC2_mixup.ipynb
│   ├──DTC3.ipynb
│   ├──DTC4.ipynb
│   ├──DTC5.ipynb
│   ├──DTC6.ipynb
│   ├──DTC7.ipynb
│   ├──DTC8.ipynb
│   ├──DTC9.ipynb
│   ├──aug_data1.ipynb
│   ├──aug_data2.ipynb
│   ├──aug_data2A.ipynb
│   ├──aug_data3.ipynb
│   ├──aug_data4.ipynb
│   ├──aug_data5.ipynb
│   └── eda.ipynb
├── hayeon
│   ├── Denoising.ipynb
│   ├── EDA.ipynb
│   ├── HybridEfficientNetSwinTransformer.ipynb
│   ├── efficientnetb0.ipynb
│   ├── efficientnetb1.ipynb
│   └── efficientnetb2.ipynb
├── hyeongsoo
│   ├── augmentation_1.ipynb
│   ├── augmentation_2.ipynb
│   ├── augmentation_3.ipynb
│   ├── augmentation_4.ipynb
│   ├── augmentation_5.ipynb
│   ├── eda_1.ipynb
│   ├── eda_2.ipynb
│   └── eda_3.ipynb
├── seongjun
│   ├── 02.ipynb
│   ├── 04.ipynb
│   └── EDA01.ipynb
├── seunghyun
│   ├── augment.ipynb
│   ├── augmentation.ipynb
│   ├── augmentation_240213.ipynb
│   └── model_240215.ipynb
└── soyoung
    ├── offline_augmentation.ipynb
    ├── eda_code.ipynb
    ├── custom_efficientnetb4.ipynb
    └── 3_7_14_classifier.ipynb

3. Data descrption

Dataset overview

  • (훈련 데이터셋) 운전면허증, 진료확인서, 이력서, 차량 번호판 등 총 17종의 1570장의 문서 이미지
  • (테스트 데이터셋) 훈련 데이터셋과 동일하게 17종의 문서 유형을 가진 3140장의 문서 이미지

EDA

  • 클래스 불균형

    • 0 ~ 16번까지의 클래스 중 1, 13, 14번의 클래스를 가진 이미지의 수가 타 클래스에 비해 적은 것을 확인

  • 테스트셋에서의 이미지

    • 비교적 선명하고 정방향인 훈련 데이터셋과 달리 원본사진에서 회전, 좌우반전, 이동, 잉크번짐 등으로 변형된 사진들을 다수 확인할 수 있음.
  • 이미지 크기

    • 학습 데이터

      • Width - Mean: 497.61 / STD: 79.35

      • Height - Mean: 538.17 / STD: 76.05

    • 평가 데이터

      • Width - Mean: 517.09 / STD: 79.83

      • Height - Mean: 518.55 / STD: 79.79

Data Processing

  1. 학습 데이터에서 잘못 레이블 되어 있는 데이터를 찾아 수정

  2. Augmentation

    • 주어진 학습 데이터의 수(1,570장)가 평가 데이터(3,140장)의 수보다 적고, 정방향의 선명한 학습 데이터와 다르게 평가 데이터는 많이 변형되어 있기 때문에 다양한 augmentation 기법을 활용하여 이를 보완하였음

    • 학습 시간 단축을 위해 augmentation을 거친 이미지를 저장하여 사용하는 offline 방식으로 증강

    • Albumentation: Albumentation 라이브러리에서 Transpose, ToGray, HorizontalFlip, Blur,GaussianNoise, ShiftScaleRotation 등을 활용하여 훈련데이터를 변형하고 데이터의 수를 증강

    • Augraphy: Augraphy 라이브러리에서는 PatternGenerator, BrightnessTexturizeInkBleed 방식을 활용하여 훈련데이터를 변형하고 데이터 수를 증강

  3. 클래스 불균형을 oversampling을 통해 보완

4. Modeling

Model descrition

  • 이소영
    • resnet50, resnext50, efficientnet_b0, efficientnet_b4 pre-trained 모델로 실험
      • 성능이 가장 좋았던 efficientnet_b4으로 고정
  • 강승현
    • timm : resnet34, resnet50, wide_resnet101_2, efficientnet_b0
    • huggingface transformers : dit-large-finetuned-rvlcdip
      • 학습 시간과 리더보드 결과를 고려했을 때 efficientnet_b0 최종 선택
  • 김하연
    • Hybrid EfficientNet Swin-Transformer, efficientnet_b0, efficientnet_b1, efficientnet_b2
  • 김창희
    • resnet_34, deit_base_patch16_224, vit, efficientnet_b0, efficientnet_b4 중 efficientnet_b4가 가장 성능이 좋아 선택

Modeling Process

  • 이소영

    • 이미지 전처리 시 Resize 대신 문서의 가로 세로 비율이 유지되도록 Padding 적용 -> 성능 향상

    • 예측 결과를 시각화하여 양식이 유사한 3, 7, 14 클래스에 대한 예측 성능이 떨어진다는 것을 확인

      • 3, 7, 14 클래스에 대한 샘플링 가중치를 증가시킴 -> 성능 향상
      • 3, 7, 14 클래스 별도 학습
        • efficientnet_b5 pre-trained 모델로 해당 클래스만 따로 학습하여 기존 결과값 대체 -> 스코어 향상
    • Test-Time Augmentation 적용

      • nference 단계에서 평가 이미지에 Flip(반전), RandomRotate(90도 단위 랜덤 회전)을 적용해 online 방식으로 augmentation하여 N회 예측 수행
        • 20회 inference 후 soft-voting 앙상블 -> 스코어 향상
    • 리더보드 기준 최상위 예측값들을 hard-voting으로 앙상블 -> 최종 리더보드 Public 스코어 0.9631 달성

  • 강승현

    • 데이터 분할

      • K-Fold Cross-Validation 후 voting
      • 8 : 2 , 9 : 1 random split
        • 최종 선택 : K-Fold Cross-Validation 후 voting
    • 학습률(LR) : 0.001 ~ 0.005

      • 최종 선택 : 0.001
    • Earlystopping 적용(patience : 2 ~ 5)

      • 최종 선택 : 5
    • 손실 함수는 Cross-Entropy Loss 최적화 알고리즘은 Adam 사용

      -> 최종 리더보드 Public 스코어 0.9397 달성

  • 김하연

  • Hybrid EfficientNet Swin-Transformer
    Hybrid EfficientNet Swin-Transformer

    • ImageNet이 사전학습된 EfficientNet 인코더와 swin transformer block을 활용하는 Hybrid Swin Transformer 사용
    • Train Accuracy: 0.8893, Train F1 Score: 0.8546, Validation Accuracy: 0.8604, Validation F1 Score: 0.8224
  • EfficientNet Ensemble

    EfficientNet-B0 EfficientNet-B1 EfficientNet-B2
    EfficientNet-B0 EfficientNet-B1 EfficientNet-B2
    • EfficientNet B0, B1, B2는 모델 크기와 input image resolution에서 차이가 있으며 B0가 가장 작은 크기를 가지고 B2가 상대적으로 큰 크기를 가짐
    • 각 모델을 K-Fold 진행
    • 세 모델 결과값 hard voting ensemble하여 최종 제출 결과 f1 score 0.9384
  • 김창희

    • 3, 4, 7, 14 번에 예측 성능이 떨어지는 것을 확인
      • 3, 4, 7, 14번에 클래스 가중치 적용
      • 3, 4, 7, 14번 데이터 추가적인 증강
    • fine-tuning에서 lr과 batch_size에는 양의 상관관계가 있다는 것을 확인
      • 최적의 조합인 batch_size : 16, lr : 1e-4 사용
    • 최종적으로 상위 3개의 예측값들을 hard-voting으로 앙상블 -> public f1 score 0.9560

5. Result

Leader Board

  • Leader Board

  • F1 Score: 0.9547

Presentation

6. etc

Meeting Log

Reference

  • Insert related reference

About

upstage-cv-classification-cv4 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published