본문 바로가기
머신러닝 · 딥러닝

[UNI-DTHON 2021] 후기

by gibro 2021. 12. 9.

UNI-DTHON은 고려대, 서울대, 성균관대, 숙명여대 등 총 8개의 SW 관련 단과대 및 학부/학과 단위 학생회 임원진 연합인 UNI-D가 개최한 대회로 해커톤 트랙과 데이터톤 트랙으로 나뉜다. 이번 대회에서는 재학생, 휴학생 모두 참여 가능하여 군인 신분으로 데이터톤 트랙에 참가하였다. 

 

대략적인 주제는 미리 알려주고 구체적인 내용은 대회 당일에 공개된다(3일간 진행하는 것이라 이미지 분류 문제가 나올 것 같았다). 3일의 시간이 주어졌지만 마지막 날인 일요일 오전 7시까지 코드를 제출해야 했으므로 사실상 시간은 2일만 주어진 거나 다름없었다. 따로 학습 환경은 제공되지는 않아 나는 사지방에서 코랩으로 대회를 진행하였다.

 

평가는 깃헙에 추론 코드를 제출하면 운영진 측에서 추론 코드 + 테스트 데이터로 모델의 정확도를 측정하는 방식이었다. 추론은 15분이라는 시간제한이 존재하였고 12시간에 한번 평가가 진행되었다. 총 3번의 평가 중 마지막 날 오전 7시에 평가한 점수로 순위가 결정되었다.

1일 차

주제는 Multi-Label Image Classification. Ai Hub의 데이터로 대회가 진행되었다. 코랩으로 대회를 진행하였으므로 1) 코랩에 업로드한 데이터를 로드하는 방법2) 구글 드라이브에 업로드한 데이터를 로드하는 방법 둘 중 한가지를 선택해야 했다. 1번 방법은 런타임 초기화때마다 데이터를 다시 업로드해야 하므로 2번 방법을 선택하였다. 하지만 데이터의 크기가 커서 구글 드라이브에 업로드하는데 자그마치 8시간이 걸렸다... 데이터 업로드에 너무 많은 시간을 쏟은 것 같다.

 

모델의 경우 이미지 분류에서 뛰어난 성능을 내는 pretrained EfficentNet-b0를 베이스라인 모델로 잡았다.  점점 더 복잡한 모델을 적용하여 정확도를 높이려 하였지만 학습시간의 부족과 추론 시간제한으로 인해 b0 모델로만 학습을 진행하였다. 파이토치에서 pretrained EfficientNet 모델을 로드하고 싶다면 아래의 리포지토리를 참고하길 바란다.

https://github.com/lukemelas/EfficientNet-PyTorch

 

GitHub - lukemelas/EfficientNet-PyTorch: A PyTorch implementation of EfficientNet and EfficientNetV2 (coming soon!)

A PyTorch implementation of EfficientNet and EfficientNetV2 (coming soon!) - GitHub - lukemelas/EfficientNet-PyTorch: A PyTorch implementation of EfficientNet and EfficientNetV2 (coming soon!)

github.com

2일 차

업로드된 데이터를 확인한 결과 다양한 확장자의 이미지 파일이 존재하였다. 그 중 gif 파일이 섞여 있었고 jpg 파일이지만 막상 보면 gif 파일인 경우도 존재하였다. 움직이는 이미지는 OpenCV를 통해 이미지를 로드할 수 없으므로 제외하였다. gif 파일을 제외한 모든 데이터를 학습에 이용하려 했지만 학습 시간이 1 epoch에 24시간이 걸리는 것을 보고 데이터 수를 줄였다. 150개의 label 별 이미지 데이터를 50개씩 랜덤으로 뽑아 총 7500개의 데이터로 학습을 진행하였다. 하지만 이렇게 적은 데이터로도 학습 시간이 상상히 오래 걸리는 것이었다. 구글링 결과 구글 드라이브에서 데이터를 로드하는 경우 로컬에서 데이터를 로드하는 것보다 훨씬 오래 걸린다는 사실을 발견했다.. 그리고 램 사용량이 계속해서 증가하는 현상을 발견하였는데 대회가 끝날 때까지 이유를 발견하지 못하였다.

 

이미지 어그멘테이션으로 rotate만 적용하였고 Optimizer는 RAdam, Learning rate scheduler는 StepLR 기법을 사용하였다.

 

후기

다재다난 했던 사지방에서의 대회 참여의 결과는?

 

 

시간 초과로 인한 0점이었다..ㅠㅠ 주최 측에서 샘플 데이터를 제공하였고 실제 테스트에 사용될 데이터의 수는 샘플 데이터의 10배 이상이라는 정보가 제공되었다.  샘플 데이터로 추론 시간을 측정했을 때는 40초였다. 넉넉하게 잡아 실제 테스트 데이터가 20배 많다고 가정했을 때, 40s x 20 < 900s(15분) 이어서 시간이 충분하다고 생각했다. 하지만 아쉽게도 시간제한에 걸리고 말았다..

 

코랩 말고 VM으로 대회를 진행했다면.. 과 같은 생각이 많이 들었던 대회였다. 그래도 Vision분야 대회에 참여하는 것은 처음이라 대회를 준비하면서 Transfer Learning, Image Augmentation, Pytorch Dataloader, Model Ensemble, TTA(Test Time Augmentation) 등 많은 것을 배울 수 있었다. 마지막 날 코드 제출 후 진행한 발표도 유익하였다. 상위 팀들은 대부분 이미지 어그멘테이션으로 Center Crop을 진행하였다. 학습 데이터의 특징을 파악하여 전처리를 진행한 것이다. 입상한 팀 중에는 ViT(Vision Transformer) 모델을 사용한 팀이 있었다. CV(Computer Vision) task에 transformer model을 사용할 수 있고 좋은 성능을 보인다는 것을 알 수 있었다. 

 

대회에 아쉬움이 남아 GCP(Google Cloud Platform)를 사용하여 추가적인 공부를 하려고 한다. 시간제한 때문에 시도해 보지 못한 방법들 Model Ensemble, TTA(Test Time Augmentation) 을 시도해 보고 추가적인 데이터를 통해 모델 학습을 진행할 예정이다.샘플 데이터로 테스트를 진행했을 때 정확도는 0.8360. 최종 목표는 모델 성능을 높여 테스트 정확도를 0.8360 이상으로 높이는 것이다!

'머신러닝 · 딥러닝' 카테고리의 다른 글

[UNI-DTHON 2021] 추가 공부 정리  (0) 2022.03.11

댓글