[부스트캠프 AI-Tech] 7주차

LKM·2022년 3월 6일
0

📝대회 개인 회고


나는 내 학습목표를 달성하기 위해 무엇을 어떻게 했는가?

■ 우리 팀과 나의 학습목표는 무엇이었나?

    • 베이스라인 코드를 혼자서 도전해보기
    • 대회의 전반적인 흐름과 서로 협업하는 경험 쌓기
    • 다양한 방법 시도 및 여러 프레임워크 체험
  • 개인
    • 나만의 베이스라인 코드 작성해보기
    • 대회의 전반적인 감을 잡기

■ 개인 학습 측면

  • 베이스라인 코드
    • 베이스라인 코드를 제공해주기 전에 jupyter notebook을 이용하여 저만의 베이스라인 코드를 작성하려고 노력했습니다. 처음 구현하다보니 참고를 많이 하였지만 제 손으로 처음부터 끝까지 작성했다는 것에 의의가 있다고 생각합니다.
    • 베이스라인 코드가 제공되고 나서는 IDE를 변경해야 할 필요가 있었습니다. jupyter는 빠르고 간단하게 작성할 때 좋았지만, 다양한 실험을 위해서는 체계적인 파이썬 프로젝트가 유리했습니다. 주어진 베이스라인 코드를 단순히 사용하는 것보다 분석하는 일이 중요하다고 생각했습니다.
    • 베이스라인 코드를 분석하여 내가 필요한 부분을 수정하거나 나에게 맞게 커스텀할 수 있었습니다.
  • 대회 전반적인 감
    • 본격적으로 대회에 참여한 적은 이번이 처음이라 방향을 잡기 어려웠습니다. 베이스라인 코드를 분석한 후에 어떤 기준으로 모델, 학습 방법, 하이퍼파라미터 등을 정해야할지 고민을 많이 했습니다. 고민한 끝에 간단한 모델과 기본적인 학습방법들부터 시작하게 되었습니다.
    • 하이퍼파라미터나 데이터 augmentation 등 베이스라인 코드에 요소부터 조율해가며 실험을 해나가보니 어떤식으로 실험을 해봐야할지 감이 잡혔습니다.

■ 공동 학습 측면

  • 인사이트 공유
    • 아침 데일리 스크럼과 피어세션 시간에 서로 학습할 때 어려웠던 점이나 새로운 아이디어를 공유하여 더 좋은 방향으로 실험을 할 수 있었습니다.
  • 협업 툴 사용
    • wandb를 빠르게 셋팅하여 서로의 실험 결과를 확인할 수 있었습니다.



나는 어떤 방식으로 모델을 개선했는가?

■ 사용한 지식과 기술

  • 데이터
    • MaskBaseDataset보다 사람별로 train,valid를 나눈 MaskSplitByProfileDataset이 성능이 좋았습니다. (valid acc 0.69 → 0.79)
    • 전체 데이터에서 80%를 train으로 사용하였고, 나머지 20%를 valid로 사용했습니다.
    • 데이터 불균형이 심하다고 느껴 Data Augmentation (CenterCrop, RandomHorizontalFlip, AddGaussianNoise)를 사용했습니다. (큰 성능향상은 느끼지 못했습니다.)
    • Stratified k-Fold (성능의 큰 향상을 느끼지 못했습니다.)
  • 모델
    • 단일모델 학습시 Resnet 18 < Resnet 50 < Efficient Net-b3 순으로 성능이 좋았습니다.
  • Optimizer
    • Adam이 SGD보다 성능이 좋았습니다. (valid acc 0.63 → 0.71)
  • Loss
    • F1 < Focal < Cross_Entropy 순으로 성능이 좋았습니다.
  • LR
    • StepLR
    • 0.0001 ~ 0.00001 사이를 사용했습니다.
  • Ensemble
    • Hard Voting (Resnet50, Efficient Net-b3)


전과 비교해서, 내가 새롭게 시도한 변화는 무엇이고, 어떤 효과가 있었는가?

  • wandb, tensorboard를 빠르게 사용해보고 실전에서 사용할 수 있었습니다.
    • wandb의 경우 다른 팀원분들과 실험 공유를 할 수 있었고, tensorboard로는 빠르게 실험 결과를 비교할 수 있어 실험 능률이 좋았습니다.
  • Vs code와 서버를 연결하여 서버에서 작업을 수행했습니다.
    • jupyter를 사용할 때와 달리 빠르게 학습과 평가를 할 수 있었고, nohup을 이용해 서버를 최대한 활용할 수 있었습니다.
  • 단일 모델로 다양한 시도를 해봤습니다.
    • 하나의 모델로 하이퍼파라미터 조율, data augmentation, k-fold등 다양한 시도를 하면서 어떤 방식으로 할 때 성능이 향상되는지 파악할 수 있었습니다.



마주한 한계는 무엇이며, 아쉬웠던 점은 무엇인가?

  • 하이퍼파라미터에 너무 집중한 것 같습니다.
    • 다양한 하이퍼파라미터가 존재했었는데, 수업 시간에 알려주신 tool을 이용하지 않고 직접 수동으로 조율하다보니 많은 시간을 투자하여 더 다양한 방법으로 학습을 못 한점이 아쉽습니다.
  • 평가 지표를 명화히 정하지 못했습니다.
    • 리더보드에 가깝게 평가 지표를 설정하지 않아 현재 실험한 결과가 좋게 나와도 리더보드에도 반영이 될지 의문을 갖게 되었습니다.
  • 데이터를 좀더 분석해보지 못한점이 아쉬웠습니다.
    • 처음 EDA 이후 데이터 분석에 소홀하여 성능 향상에 한계가 있었던 것 같습니다.
  • Wandb 설정을 했지만 활발히 사용하지 않았습니다.
    • 주어진 베이스라인 코드를 사용하면서 부터는 wandb를 거의 사용하지 않고, tensorboard만 사용하게 되어 실험 공유가 잘 이루어지지 않았습니다.
  • 어느 순간부터 성능향상이 주가 되었습니다.
    • 처음에는 점수에 관계없이 성장이 목표여서 베이스라인 코드 분석 및 다양한 방법들을 생각해보았습니다. 2주차를 시작하고부터는 실험을 하면서도 성능에 신경을 점점 쓰게 되어 다양한 방법을 시도하기 보다 단순 성능 향상을 위한 실험을 했던 것 같습니다.
  • 코드를 수정할 때마다 git에 업데이트를 하지 못해 코드 공유가 미흡했던 것 같습니다.



한계/교훈을 바탕으로 다음 프로젝트에서 스스로 새롭게 시도해볼 것은 무엇일까?

  • 하이퍼 파라미터를 찾는 tool을 이용하여 실험의 효율을 높일 것 입니다.
  • git을 활발하게 사용하여 PR로 서로의 코드 피드백을 자주 해볼 것입니다.
  • 처음 프로젝트 시작할 때 평가 지표를 명확히 설정하여 실험의 방향성을 확고히 할 것입니다.
  • 데이터의 분석이 가장 중요한 기초이기에 더욱 시간을 쏟아 EDA를 진행할 것 입니다.
  • 실험 결과 정리를 좀 더 체계적으로 하여 지금까지 했던 실험을 알아보기 쉽게 정리해볼 것 입니다.
profile
함께 자라기

0개의 댓글