Upstage AI Lab

Upstage AI Lab 3기 - Computer Vision [경진대회] Image Classification

CodingEducation 2024. 8. 13. 09:31

CV5팀 : 박석, 백경탁, 한아름, 위효연

 

CV 프로젝트 개요.


▣ 주제 : Document Type Classification | 문서 타입 분류

문서는 금융, 보험, 물류, 의료 등 도메인을 가리지 않고 많이 취급됩니다. 이 대회는 다양한 종류의 문서 이미지의 클래스를 예측합니다.

 

문서 타입 분류를 위한 이미지 분류 대회 
문서 데이터는 금융, 의료, 보험, 물류 등 산업 전반에 가장 많은 데이터이며, 많은 대기업에서 디지털 혁신을 위해 문서 유형을 분류하고자 함.
대회에 사용될 데이터는 총 17개 종의 문서로 분류되어 있음.


문서 타입 데이터셋을 이용해 이미지 분류를 모델을 구축하고  주어진 문서 이미지를 입력 받아 17개의 클래스 중 정답을 예측하는 대회.

 환경

Upstage Server VPN 연결하여 사용(GPU사용 가능)

 결과물

input : 3140개의 이미지
output : 주어진 이미지의 클래스

 평가 방법

평가지표 : Macro F1
F1 score는 Precision과 Recall의 조화 평균을 의미합니다. 클래스마다 개수가 불균형할 때 모델의 성능을 더욱 정확하게 평가할 수 있습니다.

 

Macro F1 score는 multi classification을 위한 평가 지표로 클래스 별로 계산된 F1 score를 단순 평균한 지표입니다.

Public 평가 : 전체 Test 데이터 중 랜덤 샘플링 된 50%
Private 평가 : 전체 Test 데이터 중 나머지 50%


 일정

프로젝트 전체 기간 (2주) : 7월 30일 (화) 10:00 ~ 8월 11일 (일) 19:00

 


프로젝트의 주요내용을 먼저 회고한 후 상세내용을 기록하겠습니다.

1. 프로젝트내에서 내 학습목표를 달성하기 위해 무엇을 어떻게 했는가?

 

팀 목표
1) 대회 중위권에 들 수 있는 모델을 만들자.(F1 score 0.9이상을 만들자)
2) 각 팀원의 수준에 맞는 모델과 방법을 다양하게 시도해 보고, 회의시간에 아이디어나 진행내용을 공유하자.

개인 학습 측면
1) 부족한 CV 지식을 습듭하기 위해 대회 초반에는 Computer Vision Advanced 강의 전체 수강 목표
2) BaseLine code를 기본으로 조금씩 수정하여 모델을 테스트함으로써 CV모델링에 대해 이해하고 기초를 튼튼히 하고자 함.
3) EDA분석과 전처리가 중요함을 인식하여 Augmentation에 집중하기로 함
4) 데이터의 오류가 있을 수 있음을 인지하고 오류데이터를 탐색하여 올바르게 수정하려고 노력함.
5) 모델 성능을 높임과 동시에 일반화된 모델을 만들기 위해 하이퍼파라미터 튜닝을 적극 시도함.
6) CrossEntropy 손실함수뿐만 아니라 불균형 데이터에 성능이 좋은 Focal Loss함수를 사용하여 성능을 비교해 봄.


잘한 점.

CV BaseLine code에 간단한 Augmentation코드를 넣어서 실행하고 Summit했는데,

의외의 높은 점수( 0.7338)가 나와 놀랐었다. 다른 팀원이 여러번 시도 했던 점수는 0.6대 였던거와 비교하면...

이에 희망을 갖고 0.9점대를 달성하기 위한 노력을 시작하게 되었다.

딥러닝 초보입장에서 여러가지 모델(resnet34, resnet50, efficientnet b4/b5/b6 등)을 테스트하고 하이퍼파라미터 튜닝을 하여 즉, Albumentation, Augraphy, 이미지 사이즈 변경, Batch사이즈 변경, Learning Rate 변경, CosineAnnealing, kFold, WeightDecay, Early Stopping, Loss Function 등 여러 시도를 해보며, 딥러닝 모델을 학습하여 목표 점수 0.9점을 넘어섰다.

 

지난번 대회를 마치며 이후에 시도해보고자 했던 목표는 딥러닝 모델로 중간정도의 성적을 내는 것이었는데

개인적인 학습목표를 어느정도 달성할 수 있었다.

아쉬웠던 점.
CV경진대회 세미나를 통해 다른 팀에서 사용했던 많은 방법들을 알지 못했고, 좀 더 다양한 방법이 있음에도 적극적으로 탐색하지 않았던 점에 대해 반성한다. 

다음 경진대회에서 시도해 보고 싶은 것.

좀 더 다양한 아이디어와 여러가지 방법 탐색을 위해 팀원들과의 적극적인 소통이 필요함을 알게 되었으며, 적극적인 정보 공유를 통해 좀 더 많은 딥러닝 모델을 테스트 해보고, 그로 인한 여러 모델에 대한 앙상블을 해보겠다.

 


팀원 4명이 협업하는 프로젝트

팀장님은 ML분야에서 10년 이상 경험이 있고, 나머지 3명은 ML/DL분야 초보였음.

박석 팀장은 Datarobot을 이용하여 딥러닝 모델을 테스트하여 성능 상위 모델을 선정하였고,

나머지 3명은 자신의 수준에서 BaseLine code를 수정하여 CV모델을 만들어 진행해 보고 잘 안되는 점이나

아이디어를 오전과 오후 회의 시간에 공유하기로 하였음.

 

프로젝트 문제해결을 위한 접근 아이디어

 

2024년 8월 4일

- BaseLine code를 이해하자.

- BaseLine code를 조금 변경하여 Summit을 해보자. 어느정도의 점수가 나오는지 감을 잡자

 

2024년 8월 5일

- 데이터 EDA를 하자.

- 오류 데이터가 있는지 찾아보고 수정하자.

 

2024년 8월 6일

- 많은 데이터 Augmentation을 해보기 위해 Offline방식을 바꾸자

- 기본 모델로 테스트를 해보자.(resnet50, efficientnet_b4)

 

2024년 8월 7일

- Augmentation 데이터를 늘려보자.(총 47100)

- 과적합 방지를 위해 weight decay를 사용해 보자.

 

2024년 8월 8일

- 추가 증강 데이터를 만들자(총 62800)

- 하이퍼 파라미터를 바꿔서 테스트 해보자.

 

2024년 8월 9일

- 손실함수를 바꿔보자

- 앙상블에 대해서 고민해 보자.

 

2024년 8월 10일

- 앙상블에 대해 적극 시도해 보자.

- 또 다른 모델을 시도해 보자.

 


아래는 코딩과 모델 테스트 주요 내용에 대한 순차적 기록입니다.

 


딥러닝은 아직 잘 모르겠어서 BaseLine Code 이해를 바탕으로 코드를 수정하면서 대회를 진행함.