이번 프로젝트는 드디어 기다리던 딥러닝 관련 프로젝트를 진행하였다. 업스테이지 과정에서 내가 가장 바라고 있었던 프로젝트였는데 드디어 진행하다니 주제는 주로 문서 및 자동차에 관련된 사진을 분류하는 모델을 만드는 것이다.
팀에 새로운 한명이 추가되었다. 해당 팀원은 딥러닝 중 추천 알고리즘을 주로 다뤘다고 한다. 컴퓨터 비전 대회를 하는 것은 처음이지만 그래도 딥러닝을 많이 해봐서 익숙하게 진행할 수 있다고 한다. 딥러닝 이론만 배운 나는 이번 기회에 많이 배울 수 있을 것 같았다. 기존 4명과 새로운 1명의 좋은 시너지를 기대하고 프로젝트를 시작하였다.
이번 대회를 통해서 문서 타입 데이터셋을 이용해 이미지 분류를 모델을 구축합니다. 주어진 문서 이미지를 입력 받아 17개의 클래스 중 정답을 예측하게 됩니다. computer vision에서 중요한 backbone 모델들을 실제 활용해보고, 좋은 성능을 가지는 모델을 개발할 수 있습니다. 그 밖에 학습했던 여러 테크닉들을 적용해 볼 수 있습니다.
팀구성 : 5인 1팀, 인당 3090ti서버를 VSCode와 SSH로 연결해서 사용
협업 환경 : Notion, Github
의사 소통 : Slack, Zoom, Offline Meeting
전체 목록
- 데이터 EDA
- 전처리 및 train/valid data 생성
- 딥러닝 모델링
- 파라미터 튜닝
팀 구성
배정 받은 팀은 5인이었다. 각자 학습한 수준을 기반으로 할 수 있는 모델링까지 각자 진행해 보기로 하였다. 전체 목록에 있는 역할은 전부 참여하였지만 각자 파트별로 비중을 둔 선택을 진행하여 주된 역할을 담당하였다.
여기에서 나는 주로 개인적인 모델링을 구현하는데 할애하였으며, 나의 적용 방법으로 각 label oversampling과 train, test split을 epoch마다 분리해서 랜덤화 sampling을 진행하는 것이었다.
1주차 : 업스테이지 강의를 보면서 용어를 익히고 적어도 대화를 통해 어떤 이야기를 하는지 내용을 이해할 수 있을 정도로 수준을 올려오기
2주차 : 데이터 레이블링과 train에서 잘못 레이블링 되어있는 사진을 바로잡기, baseline 모델을 이해하고 각자 원하는 모델을 선택하여 build up을 진행하기
3주차 : 최종적으로 자신이 원하는 모델을 구현하고 결과를 확인하면서 자신의 전략이 잘 이루어져 있는지 수시로 확인하기
notion의 간트 차트를 확인 할 수 있으며 notion에서 우리 팀에서 진행한 내용을 확인할 수 있다.
- 대회의 마무리 시기에는 같이 모여서 마무리 할 것(offline meeting)
- 각자의 일을 하다가 어느정도 결과가 나오면 같이 보면서 상의할 것
- 코드를 작성하고 진행할때 꼭 주석처리 및 마크다운 언어로 작성해둘 것
- 각자의 아이디어 및 사전 조사 자료는 노션에 공유해둘 것
- 특별한 사정이 없는 한 회의할 때 빠지지 말기
- 혼자서 계속 진행하지 말고 중간중간 상황에 대해 알려주기
최종 전략
Albumentation 모듈을 활용하여 rotate, flip, mixup, noise, cut-out 등 이미지 증강 기법을 활용하여 EDA와 전처리를 모두 진행하였다. 또한 test set을 활용하여 다음과 같이 병렬적으로 진행하였다.
- Human Classification
- Timm Pretrained Models
- Object Detection Models
- VIT Model
각자 원하는 모델을 선정하여 전략을 구상하여 진행하였다. 나만의 전략은 원본 데이터를 upsampling을 진행하여 개수를 100개로 통일 시킨 다음 1 epoch마다 새로운 valid set을 분리한 다음 각 train, valid에 증강을 하는 방식을 활용하여 진행하였다. 결과적으로 개인적인 모델의 최종 결과는 0.7정도가 나왔으며 팀 내 최종 스코어는 human : 0.98, model : 0.92가 나왔다.
새로운 시도
- 이미지에 대해 os 모듈을 활용하여 직접 다뤄보았다.
- 1epoch마다 새로운 데이터 분류를 통해 train, valid를 새로운 증강 없이 효율을 내었다.
좋은 변화
- 머신러닝에서 구현할 수 있는 방법을 딥러닝으로 적용해봤다.
- 이미지 안에서 EDA를 적용하는 방법에 대해 알게 되었다.
- 이미지 증강 방법에 대해 학습하고 직접 구현해 볼 수 있었다.
잘 되지 않은 것
- 팀원의 간극을 좁히지 못하였다. (수준차이)
- 성능을 올리기 위한 방법을 체계적으로 갖추지 못하였다.
- mixup을 적용해보려 했으나 잘 적합되지 않았다.
아쉬운 점
- 이번 대회에서 다른 할 일이 많았기 때문에 몰입도 있게 하지 못했었다.
- 사전 학습 모델을 활용하였지만 직접 모델을 구성해보고 싶었으나 시간의 부족 관계로 직접 구현하지 못했다.
배운점 및 시사점
- 이미지 데이터를 다루는 방법에 대해 배울 수 있었다.
- Timm 사전학습 모델을 활용하여 모델링을 할 수 있게 되었다.
딥러닝 경진대회를 처음 참여하면서 큰 욕심을 갖고 시작하였으나 예상한 것에 비해 사전 학습 모델만 구성하는 것 조차 쉽지 않았다. 더 많은 것들을 구현하고 가져가고 싶었지만 대게 뜻 대로 되지 않아서 매우 아쉬웠다.
다음 프로젝트인 NLP에서는 처음부터 목표를 크게 잡지 않고 내가 할 수 있고 가져갈 수 있는 것을 최대한 가져가야 겠다. 또한 팀원 그대로 진행하게 되는데 얻어갈 수 있는 것을 최대한 얻어가고 나에게 적합할 수 있는 것을 최대한 많이 적합해 보는 경험을 하고 싶다.