본문 바로가기
패스트캠퍼스&업스테이지 AI Lab 1기

CV 경진대회 후기 - 패스트캠퍼스&업스테이지 AI Lab 1기

by 아르카눔 2024. 2. 20.

1. Abstract

  • Goal of the Competition
    • Document Type Classification 경진대회. 주어진 데이터를 활용하여 17개의 문서 클래스를 예측.
  • Timeline
    • Feburary 05, 2024 - Start Date
    • Feburary 07, 2024 - Mentoring1
    • Feburary 16, 2024 - Mentoring2
    • Feburary 19, 2024 - Mentoring3
    • Feburary 19, 2024 - Final submission deadline
  • Description of the Data
    • 문서는 금융, 보험, 물류, 의료 등 도메인을 가리지 않고 많이 취급됩니다. 이 대회는 다양한 종류의 문서 이미지의 클래스를 예측합니다.
    • 문서 타입 데이터셋을 이용해 이미지 분류를 모델을 구축합니다. 주어진 문서 이미지를 입력 받아 17개의 클래스 중 정답을 예측하게 됩니다.
    • 1570장의 학습 이미지를 통해 3140장의 평가 이미지를 예측
    • 데이터가 어떤 class를 가지고 있는지 설명하는 meta.csv와 각 이미지 파일과 label을 매치한 train.csv 제공
    • 아래는 17개의 클래스 설명이다.
      0 계좌번호, 1 임신 의료비 지급 신청서, 2 자동차 계기판, 3 입·퇴원 확인서, 4 진단서, 5 운전면허증, 6 진료비 영수증, 7 외래 진료 증명서, 8 국민 신분증, 9 여권, 10 지불 확인서, 11 의약품 영수증, 12 처방전, 13 이력서, 14 의견 진술, 15 자동차 등록증, 16 자동차 등록판
    • car_dashboard와 vehicle_registration_plate가 이질적, 나머지 classes의 이미지는 모두 문서의 형태
    • test data는 flip, rotate, mixup 등이 되어 있는 문서 이미지
    • 성능 지표는 Macro F1 Score
    • 경진대회 데이터는 AI Stages가 제공했다.
  • Description of the Work
    • 총 5명의 조원이 각자 EDA, 리서치, 피쳐엔지니어링, 모델링 후 결과 공유
    • 오전 10시와 오후 5시에 하루에 2번씩 회의
    • 얻은 인사이트, 구현한 코드, 모은 데이터, 리서치, 의문점 등 논의
    • 여러차례 멘토링을 통해 의문점이나 추가적인 사항에 대한 정보 공유

2. Process : Competition Model

  • AI Stages에서 제공한 서버 이용해서 학습
  • 조원들은 EfficientNet, ResNet, ViT, EVA 02 등 다양한 모델들을 사용
  • 본인은 EfficientNet V2 M에만 집중
  • OCR을 활용한 LayoutLM V3를 활용하려 했으나 tesseract를 비롯하여 한국어 OCR이 다소 활용이 어려워 제외. pytesseract는 영어, 중국어 모델은 있지만 한국어는 없어서 NLP tokens를 활용한 멀티모달 학습이 불가.
  • Classifier만을 학습하는 Transfer Learning 시도
  • 전체 모델을 추가적으로 학습하는 Fine-Tuning 시도
  • Two Stage Model: 첫 번째 EfficientNet V2 M으로 자동차계기판, 자동차번호판, 문서를 분류. 두 번째 EfficientNet V2 M으로 나머지 15가지의 문서를 분류.

3. Process : Issues

  • Issues.
    • 다소 깔끔하지 못한 Test 데이터에 대한 문제
    • Test 데이터 보다 Train 데이터의 숫자가 적은 문제
    • Class 별로 데이터의 개수가 다른 문제
  • Solutions to Imporve Your Project Performance.
    • 다양한 Augmentations를 적용하여 Train 데이터의 수를 늘리고 다양한 데이터를 학습하여 robust한 모델 생성. 동시에 오버피팅 방지.
    • 16 Offline Augmentations: 다양하게 변형된 features를 학습하여 robust한 모델을 만들기 위해 offline 방법 적용.
      • HorizontalFlip
      • VerticalFlip
      • ShiftScaleRotate
      • Grayscale
      • ColorJitter
      • Blur
      • MedianBlur
      • Spatter
      • Defocus
      • ZoomBlur
      • OpticalDistortion 2장
      • Perspective 2장
      • Rotate 2장
    • Class Imbalance 문제를 해결하기 위해 Focal Loss를 Cross Entropy Loss에 추가해서도 학습

4. Role

  • EDA, 리서치, 피쳐 엔지니어링, 모델링

5. Results

리더보드

  • 7th, Public Score: 0.9303
  • 6th, Final(Public + Private) Score: 0.9183

6. Conclusion and Retrospective

  • Class Imbalance 문제를 해결할 때 Oversampling을 적용해볼 필요가 있었다.
  • Optimizer의 weight_decay나 lr scheduler 등을 적용해보지 못해서 아쉽다.
  • Train Loss과 Validation Loss가 똑같이 하락하고, Epochs도 30회 이내로 돌렸으나 오버피팅이 발생한 것으로 보여서 이를 해결하기 위한 방법이 필요하다. Mixup, Cutmix, 추가 Augmentations, 그리고 offline augmented images에 추가적으로 onlien augmentations 적용.
  • 잘못된 라벨링 제거 혹은 수정 필요. 직접 찾거나 fastup을 이용.
  • 문서의 경우 제목만 crop한 경우도 존재한다.
  • 성능이 높았던 모델들을 앙상블하여 제출하는 방법도 고려해야 한다. TTA (Test Time Augmentation) 추가 공부 필요.
  • ViT 계열이나 EfficientNet B4, B7, Wide ResNet, CAFormer, MaxViT 등 다양한 모델의 실험도 고려해볼만하다.
  • Kaggle이나 다른 레퍼런스를 추가로 찾아봤으면 좋았을듯하다.
  • 다른 팀원들과 토론하면서 인사이트를 얻을 수 있었고 각자 EDA, Augmentations, 코드를 공유하여 시간을 아낄 수 있었다.
  • 멘토분을 통해 새로운 정보와 인사이트를 얻을 수 있었다. 추가적으로 살펴볼 모델과 논문들도 알게 되었다.
  • 보다 체계적으로 augmentations이나 현황에 대한 리뷰를 수행하고 이를 해결하기 위한 프로세스를 수행하지 못해서 아쉽다. 이를 보완해서 보다 메타적인 관점에서 문제와 현재 상황을 볼 필요가 있다.