Prologue

이번 프로젝트는 드디어 기다리던 딥러닝 관련 프로젝트를 진행하였다. 업스테이지 과정에서 내가 가장 바라고 있었던 프로젝트였는데 드디어 진행하다니 주제는 주로 문서 및 자동차에 관련된 사진을 분류하는 모델을 만드는 것이다.

팀에 새로운 한명이 추가되었다. 해당 팀원은 딥러닝 중 추천 알고리즘을 주로 다뤘다고 한다. 컴퓨터 비전 대회를 하는 것은 처음이지만 그래도 딥러닝을 많이 해봐서 익숙하게 진행할 수 있다고 한다. 딥러닝 이론만 배운 나는 이번 기회에 많이 배울 수 있을 것 같았다. 기존 4명과 새로운 1명의 좋은 시너지를 기대하고 프로젝트를 시작하였다.

개요

1. 프로젝트 개요

A. 개요

이번 대회를 통해서 문서 타입 데이터셋을 이용해 이미지 분류를 모델을 구축합니다. 주어진 문서 이미지를 입력 받아 17개의 클래스 중 정답을 예측하게 됩니다. computer vision에서 중요한 backbone 모델들을 실제 활용해보고, 좋은 성능을 가지는 모델을 개발할 수 있습니다. 그 밖에 학습했던 여러 테크닉들을 적용해 볼 수 있습니다.

B. 환경

팀구성 : 5인 1팀, 인당 3090ti서버를 VSCode와 SSH로 연결해서 사용
협업 환경 : Notion, Github
의사 소통 : Slack, Zoom, Offline Meeting

2. 프로젝트 팀 구성 및 역할

전체 목록

  • 데이터 EDA
  • 전처리 및 train/valid data 생성
  • 딥러닝 모델링
  • 파라미터 튜닝

팀 구성
배정 받은 팀은 5인이었다. 각자 학습한 수준을 기반으로 할 수 있는 모델링까지 각자 진행해 보기로 하였다. 전체 목록에 있는 역할은 전부 참여하였지만 각자 파트별로 비중을 둔 선택을 진행하여 주된 역할을 담당하였다.

여기에서 나는 주로 개인적인 모델링을 구현하는데 할애하였으며, 나의 적용 방법으로 각 label oversampling과 train, test split을 epoch마다 분리해서 랜덤화 sampling을 진행하는 것이었다.

3. 프로젝트 수행 절차 및 방법

A. 팀 목표 설정

1주차 : 업스테이지 강의를 보면서 용어를 익히고 적어도 대화를 통해 어떤 이야기를 하는지 내용을 이해할 수 있을 정도로 수준을 올려오기
2주차 : 데이터 레이블링과 train에서 잘못 레이블링 되어있는 사진을 바로잡기, baseline 모델을 이해하고 각자 원하는 모델을 선택하여 build up을 진행하기
3주차 : 최종적으로 자신이 원하는 모델을 구현하고 결과를 확인하면서 자신의 전략이 잘 이루어져 있는지 수시로 확인하기

B. 프로젝트 사전기획
(1) Time-line 수립

notion의 간트 차트를 확인 할 수 있으며 notion에서 우리 팀에서 진행한 내용을 확인할 수 있다.

(2) 협업 문화
  1. 대회의 마무리 시기에는 같이 모여서 마무리 할 것(offline meeting)
  2. 각자의 일을 하다가 어느정도 결과가 나오면 같이 보면서 상의할 것
  3. 코드를 작성하고 진행할때 꼭 주석처리 및 마크다운 언어로 작성해둘 것
  4. 각자의 아이디어 및 사전 조사 자료는 노션에 공유해둘 것
  5. 특별한 사정이 없는 한 회의할 때 빠지지 말기
  6. 혼자서 계속 진행하지 말고 중간중간 상황에 대해 알려주기

4. 수행 결과

최종 전략

Albumentation 모듈을 활용하여 rotate, flip, mixup, noise, cut-out 등 이미지 증강 기법을 활용하여 EDA와 전처리를 모두 진행하였다. 또한 test set을 활용하여 다음과 같이 병렬적으로 진행하였다.

  1. Human Classification
  2. Timm Pretrained Models
  3. Object Detection Models
  4. VIT Model

각자 원하는 모델을 선정하여 전략을 구상하여 진행하였다. 나만의 전략은 원본 데이터를 upsampling을 진행하여 개수를 100개로 통일 시킨 다음 1 epoch마다 새로운 valid set을 분리한 다음 각 train, valid에 증강을 하는 방식을 활용하여 진행하였다. 결과적으로 개인적인 모델의 최종 결과는 0.7정도가 나왔으며 팀 내 최종 스코어는 human : 0.98, model : 0.92가 나왔다.

5. 자체 평가

새로운 시도

  • 이미지에 대해 os 모듈을 활용하여 직접 다뤄보았다.
  • 1epoch마다 새로운 데이터 분류를 통해 train, valid를 새로운 증강 없이 효율을 내었다.

좋은 변화

  • 머신러닝에서 구현할 수 있는 방법을 딥러닝으로 적용해봤다.
  • 이미지 안에서 EDA를 적용하는 방법에 대해 알게 되었다.
  • 이미지 증강 방법에 대해 학습하고 직접 구현해 볼 수 있었다.

잘 되지 않은 것

  • 팀원의 간극을 좁히지 못하였다. (수준차이)
  • 성능을 올리기 위한 방법을 체계적으로 갖추지 못하였다.
  • mixup을 적용해보려 했으나 잘 적합되지 않았다.

아쉬운 점

  • 이번 대회에서 다른 할 일이 많았기 때문에 몰입도 있게 하지 못했었다.
  • 사전 학습 모델을 활용하였지만 직접 모델을 구성해보고 싶었으나 시간의 부족 관계로 직접 구현하지 못했다.

배운점 및 시사점

  • 이미지 데이터를 다루는 방법에 대해 배울 수 있었다.
  • Timm 사전학습 모델을 활용하여 모델링을 할 수 있게 되었다.

프로젝트를 마치며

딥러닝 경진대회를 처음 참여하면서 큰 욕심을 갖고 시작하였으나 예상한 것에 비해 사전 학습 모델만 구성하는 것 조차 쉽지 않았다. 더 많은 것들을 구현하고 가져가고 싶었지만 대게 뜻 대로 되지 않아서 매우 아쉬웠다.

다음 프로젝트인 NLP에서는 처음부터 목표를 크게 잡지 않고 내가 할 수 있고 가져갈 수 있는 것을 최대한 가져가야 겠다. 또한 팀원 그대로 진행하게 되는데 얻어갈 수 있는 것을 최대한 얻어가고 나에게 적합할 수 있는 것을 최대한 많이 적합해 보는 경험을 하고 싶다.

profile
Data Science를 정복하기 위해 기록용 Velog

0개의 댓글