CV 경진대회 개인 보고서 (Feat.Upstage)

[Fast-Up Report Guide 1을 기반으로 작성]

1. Abstract

  • Goal of the Competition
    • Document Type Classification | 문서 타입 분류
    • 총 1570장의 train 이미지 데이터, 3140장의 test 이미지 데이터
      • 17개의 클래스
      • 주어진 이미지들을 여러 클래스 중 하나로 분류하는 것이 이번 대회의 목적
    • 평가지표는 Macro F1 사용
      • 따라서 Public 리더보드를 참고하여 private 리더보드(최종)에서 최대한 높은 F1 score를 받는 것이 목표
        Macro F1 score 계산법
  • Timeline
    • February 05, 2024 - Start Date
    • February 19, 2024 - Final submission deadline
  • Description of the work
    • 팀원들과 데이터 EDA 진행
    • 학습 데이터셋 클래스별 이미지 분석, 테스트 데이터셋 클래스별 이미지 분석
      • 테스트 데이터셋에 적용되어있는 이미지 변형에 무엇이 있는지 파악
      • 파악한 이미지 변형 정리
        • 문서 자체의 변형에는 Rotate, Crop, Flip이 많은 부분을 차지
        • Mixup 되어있는 경우도 확인
    • Datat Augmentation으로 원본데이터에서 추가 노이즈 처리 진행
      • 최종 데이터 갯수 52608개로 데이터 증강
    • 최종 데이터 셋을 기반으로 팀원별로 다른 모델 및 방법으로 학습 진행
      • 각자 학습한 결과가 성능 향상이 되었을 시 Github에 code 공유
    • Public 리더보드 Macro F1 를 참고하여 최종 제출 파일 결정

 

2. Process : Competition Model

  • Describe the structure of your System.
    • 데이터 전처리
      • 테스트 데이터셋에 적용되어 있는 이미지 변형이 무엇인지 파악 후 정리
    • 피처엔지니어링
        • 분석한 이미지 변형을 정리한 것을 바탕으로, Augraphy와 Albumentations을 사용하여 데이터 증강
        • [Augraphy]
          ColorPaper
          OneOf: DelaunayTessellation, PatternGenerator, VoronoiTessellation 중 하나 선택적 적용
          AugmentationSequence: NoiseTexturize와 BrightnessTexturize 순차적 적용
          Post Phase: VoronoiTessellation
          Ink Phase: Folding
          Paper Phase: ColorPaper, ColorShift, ReflectedLight
          Post Phase: VoronoiTessellation
        • [Albumentations]
          HorizontalFlip
          VerticalFlip
          Rotate
          GaussianBlur
          RandomBrightnessContrast
          HueSaturationValue
          RandomGamma
          ColorJitter
          CoarseDropout
          GaussNoise
          RandomRotate90
          Flip
          OneOf: 여러 블러 기법 중 하나 선택 (예: MotionBlur, MedianBlur, Blur)
          ShiftScaleRotate
          OneOf: 여러 왜곡 기법 중 하나 선택 (예: OpticalDistortion, GridDistortion, PiecewiseAffine)
          OneOf: 여러 명암 및 색상 조정 기법 중 하나 선택 (예: CLAHE, Sharpen, Emboss)
          RandomBrightnessContrast
          HueSaturationValue
    • 최적화
      • 팀원별로 코드를 따로 작성하였음
      • 공통된 데이터셋으로 각자 다른 방법론으로 실험 진행 후 결과 공유
        • 더 나은 점수가 나온 방향으로 전환하여 코드 최적화 진행
    • 모델링
      • 결과적으로 마지막에 사용한 코드(이명진님)
        • mixup + scheduler = StepLR(optimizer, step_size=5, gamma=0.5),KFold
        • test data gaussian blur + NonLocalMeansDenoising
        • fc_layers = [(2048, 1024), (1024, 512), (512, 256), (256, 17)] batchnorm, dropout(p=0.2)
        • "classifier 내 activation function : SiLU()
        • EfficientNet_B4 모델 사용
    • F1 Score 기록
      • Public F1 Score : 0.9488
      • Private F1 Score : 0.9400
    • 결과 예측
      • 제출 횟수는 남아있었으나 GPU 자원의 문제로 학습에 시간이 오래 소요되어 강제로 epoch를 중단시켜 결과를 저장하였음 (feat. 이명진님)
        • 제 로컬 f1 score가 다른 팀원보다 낮았으므로, 제일 점수가 잘 나온 이명진님의 csv파일을 최종 제출

3. Process : Issues

  • Describe the issue that your team faced during the project.
    • 1. 테스트 데이터셋을 분석하여 해당 이미지들에 적용되어있는 이미지 변형들을 파악한 뒤 해당 내용을 학습 데이터셋에 적용하였으나 f1 score가 오르지 않았음
    • 2. 데이터 증강을 하였으나 다른팀들보다 리더보드 상으로 점수 격차가 좁혀지지 않았음
    • 3. ViT 모델을 사용하여 학습을 하였으나 생각보다 점수가 좋지 않았음
  • Describe the reason for the issue.
    • 위 1번 사항에 대한 이유
      • 테스트 데이터셋에 적용되어있는 이미지 변형들은 적절하게 파악한 것이 맞지만, 학습 데이터가 너무 적어 점수가 향상되지 않은 것이였음
    • 위 2번 사항에 대한 이유
      • 1차적으로 데이터 증강을 하였으나, 2만5천개의 데이터는 여전히 학습하기에 많은양의 데이터가 아니였음
    • 위 3번 사항에 대한 이유
      • ViT 모델은 매우 큰 규모의 데이터셋에서 뛰어난 성능을 발휘하도록 설계되었는데, 우리 팀이 학습에 이용한 데이터는 적은 규모여서 성능이 좋지 않았음
  • Describe the possible solution to imporve your project.
    • 위 1번 사항에 대한 해결책
      • 학습데이터를 5만개로 추가로 데이터증강시켜 학습하여 f1 score를 높이는데 성공하였음
    • 위 2번 사항에 대한 해결책
      • 2만5천개에서 5만개까지 데이터를 증강시켜 학습하여 f1 score를 높였음
      • 또한 시간상으로 진행하지 못했지만, 데이터를 10만개 이상으로 증강시켰다면 ‘efficientnet_b4' 모델로도 충분히 더 좋은 성적을 냈을 것으로 예상
    • 위 3번 사항에 대한 해결책
      • 데이터 증강을 다른 팀처럼 10만개 이상으로 했다면 ViT 모델이 충분히 좋은 성적을 냈을 것이라 예상
      • 시간 관계상 추가로 진행하지 못하고 마무리되었음

4. Role

  • Describe your role with task in your team.
    • 팀원들과 공통된 데이터셋을 이용하여 모델링 후 결과 공유
    • 개인 결과 기록
      • 기록한 내용
      • 더보기
        Baseline code를 기반으로 수정

        [Try 1]
        model_name = 'resnet50’, early stopping, 이미지 크기 조정, 360도 무작위 회전, 
        좌우반전, 밝기/대비 조정, 블러, 채도, 선명도 적용
        로컬 점수는 좋은데 반면 리더보드에서의 성적은 좋지 않았음
        (local) train f1 score : 0.9363
        (local)valid f1 score : 0.9289
        제출 leaderboard f1 score : 0.358

        [Try 2]
        model_name = 'densenet201', early stopping, 이미지 크기 조정, 360도 무작위 회전, 
        좌우반전, 밝기/대비 조정, 블러, 채도, 선명도 적용
        로컬 점수 낮은 반면 리더보드에서의 성적은 괜찮음
        (local) train f1 score : 0.7984
        (local)valid f1 score : 0.8166
        제출 leaderboard f1 score : 0.6105

        [Try 3]
        Try 2와 동일한 환경에서 학습모델을 resnet34, Epoch 99에서 early stopping으로 멈춤
        (local) train score
        loss: 1.1923
        acc: 0.5983
        f1: 0.5723
        (local)valid score
        loss: 1.0821
        acc: 0.6405
        f1: 0.6189
        제출 leaderboard f1 score : 0.4897

        이후의 시도들은 제출 횟수 제한때문에 local에서만 test 후 제출하지 않음
        팀원들의 local score 보다 현저히 떨어지는 결과가 나왔기 때문
    • 제출 하지 못한 시도들
      • 최종 데이터 셋을 기반으로 ViT_base_patch16_224 모델을 사용
        • 하이퍼파라미터 최적화를 시도하였으나 local F1 score가 0.8을 조금 넘기는 기록
          • 그리고 시간이 너무 오래 소요되었음
        • 하이퍼파라미터 최적화를 제외하고 학습하였음
          • local 기준 score : Train Loss: 0.5632, Train Acc: 0.8051, Train F1: 0.8031
          • 팀원들이 다른 모델로 학습한 결과는 로컬에서의 F1 Score가 0.9 이상, LB Score 0.9 이상으로 성적을 보이는 상황이였으므로, 제출로 이어지지 못함
      • 학습하여도 정답률이 낮은 class 3, 4, 7에 대해 따로 학습하여 다른 모델로 학습한 csv 결과에 대체하려 시도
        •  학습까지는 성공했지만, 파일을 저장하는 부분에서 문제를 해결하지 못해 적용하지 못함

  • Describe papers or book chapeters you found relevant to the problem, references to see.
  • Explain which are relevant for your Project.
      • Vision Transformers와 Mixed을 사용함에 있어서 정보를 얻었음

5. Results

  • Write the main result of Competition
    • 팀의 대회 주요 결과는 5만개라는 적은 데이터로도 F1 Score 0.94를 받을 수 있을 정도의 code를 작성한 것
      • 더 많은 데이터와 GPU 자원이 있었더라면 그 이상의 점수를 받을 수 있을 것으로 예상
  • Final standings of the Leaderboard
    • 최종 리더보드 순위 5위

 

6. Conclusion

  • Describe your running code with its own advantages and disadvantages, in relation to other groups in the course.
    • 데이터 증강을 하는데 있어서 테스트 데이터셋에 적용된 이미지 변형을 모두 파악하지 못한 상태로 데이터 증강
      • 자주 나온 빈도 수 만큼 계산하여 데이터 증강을 했어야했는데 대회 중반부터 인지하였음
    • GPU 자원의 한계로 학습하는데 시간이 오래 걸려 실험 결과를 기록하는데 시간이 부족하였음
      • 사실 code를 작성하는 부분은 어려운 것이 아닌데, 데이터가 5만개 정도 되는 시점부터 어떤 모델이 성능이 좋게 나오는지, 어떤 테크닉을 사용하면 결과가 어떻게 나오는지 기록하기에는 시간이 크게 소요되었음
  • Sum up your project and suggest future extensions and improvements.
    • GPU자원은 모두가 사실상 동일한 조건에서 대회를 진행하였으므로 크게 아쉬움은 없음
    • 다만 데이터 증강에 대해서 더 적극적으로 나서서 큰 규모의 이미지 데이터로 학습을 진행했으면 좋았을 것 같음
    • CV 대회나 학습은 학습모델선정, GPU자원, 시간 삼위일체가 맞아야 좋은 결과가 나오는 것 같음
    • 앞으로 유사한 대회나 프로젝트를 진행한다면 어떻게해야 좋은 결과가 나올지 다른팀들의 인사이트를 보고 배웠음