네이버 부스트캠프/LEVEL-1

[부스트캠프][P-stage][WK05] P-stage level1 결산 및 개인회고

프로젝트 목표

  • Special Mission을 최대한 다 하기
  • Jupyter에서 벗어나 Python IDLE 환경에 익숙해지기
  • Git을 활용한 협업에 익숙해지기
  • 등수가 높으면 좋지만 기초를 탄탄히하고 되도록 많은 실험하기

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

개인 학습

  • 1주차
    • EDA, Dataset 및 Augmentation transform, 모델 구현 및 Fine-tuning 시도, Feature Extraction 시도 , 다양한 기법을 적용한 training 코드 작성, Tensorboard 사용 등 Special Mission 수행
    • 첫 주차 베이스라인 코드 공개 전 Jupyter를 활용한 resnet18, efficientnet 등 다양한 모델 실험 및 제출
    • albumentation을 활용한 다양한 augmentation 기법 적용
  • 2주차
    • 베이스라인을 기반으로 코드를 작성하여 공유
    • Jupyter 환경에서 벗어나 vscode를 활용해 IDLE 환경에서 실험 (모두 py 파일로 변경 후 쉘스크립트를 활용하여 파라미터 지정 및 코드 실행) -> 첫 시도!
    • Git 협업에 익숙해지기 위해 꾸준히 pull, push를 통해 코드를 백업해가며 반복학습.(중간에 모든 코드를 날려버리는 경험도 함)
    • 사전학습된 모델을 가져와 finetuning 하는 방식으로 여러 모델을 실험(EfficientNet, ResNet, ViT)
    • focal loss, crossentropy loss 등 각 loss와 모델간의 조합 실험
    • 외부 데이터 추가 및 데이터셋 구현
    • mask, gender, age별 모델링 구현(MaskBaseDataset_2) 및 통합결과 구현(total_result.py)
    • 결과물을 종합해 앙상블(hard voting)

공동 학습

  • 베이스라인 코드를 기반으로 새로운 베이스라인을 작성해 팀원들에게 공유
  • Git을 활용해 서로 브랜치를 생성하고 코드를 업로드하며 협업하는 방법을 익힘, Live Share를 활용해 한 명의 서버에서 모르는 내용을 설명하며 잘못된 부분을 수정, 협업하는 것을 경험
  • 부족한 시간에 모델을 팀원들과 나누어 학습
  • 서로 질문이 있으면 오픈채팅방과 줌을 활용해 언제든 도움을 주고받음

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

  • 사전학습된 모델을 가져와 finetuning 하는 방식으로 여러 모델을 실험(EfficientNet, ResNet, ViT)
  • albumentation을 활용해 여러 실험(이미지에서 불필요한 부분을 제거하기 위해 centor crop 적용)
  • 데이터의 불균형으로 age를 잘 분류하지 못하는 문제를 해결하기위해 적지만 외부데이터를 활용해 해결하고자 함
  • mask, gender, age별 각각의 모델을 구성하여 결과물을 조합하여 제출

내가 한 행동의 결과로 어떤 지점을 달성하고, 어떠한 깨달음을 얻었는가?

  • Jupyter 환경이 익숙해 무조건 사용했지만 IDLE 환경에서 실험하며 즉각적으로 결과를 확인할수는 없지만 실험을 관리하고 실행하는데 IDLE 환경이 더 편리하다는 사실을 깨달음. 이제 모듈화에 익숙해졌으며 쉘스크립트를 활용해 전보다 능숙하게 실험할 수 있게 되었습니다.
  • 베이스라인 코드를 확정하고 큰 틀을 유지하며 항상 서로 코드변경내역을 공유하고 git을 사용하면 나중에 코드정리에 훨씬 유용하고 깔끔하다는 사실을 깨달았습니다.
  • 데이터의 불균형이 모델의 성능에 큰 영향을 미치고, 이를 해결하기위한 방법으로 데이터증강이 아주 효과적이라는 사실을 확신하게 되었습니다.
  • 정확한 라벨링의 중요성을 알았습니다.

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

  • Git을 활용한 협업을 처음 제대로 해봤고, 이전에 진행했던 공모전, 프로젝트와 달리 코드정리와 버전관리, 백업이 훨씬 수월했습니다.
  • tensorboard를 통해 실험의 결과를 손쉽게 시각화해 확인 및 공유할 수 있었습니다.
  • Python IDLE 환경을 제대로 처음 활용해 실험해봤는데, 실험관리에 Jupyter보다 더 효율적이고 학습 자체의 시간 단축에도 도움이 되었습니다.

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

  • 어쩌다보니 팀을 리드하는 입장이 되어 프로젝트를 진행했는데, 개개인의 편차가 생각보다 커 각자에 맞는 역할을 나누고 프로젝트의 전반을 이끌어가는 것에 부족함을 느꼈습니다.
  • 이미지분류 모델의 정확도를 높이는데 있어 한계를 느꼈습니다. 분명 더 좋은방법이 있었을 것 같습니다. 스페셜 피어세션에서 얻은 정보로는 이미지의 사이즈를 키우는 방식도 효과가 있다고 합니다.
  • 아직 프레임워크와 작업환경에 익숙하지 않아 적응하는데 시간을 소요해 더 많은 실험을 하지 못한것이 아쉽습니다. 처음부터 vscode를 활용했다면 코드를 수정하기전 모델을 복원하지 못하는 일이 없었을 것입니다.
  • 실험을 행하는데 있어 근거가 조금 부족했던것 같습니다.
  • 시간 및 제출횟수의 부족으로 k-fold cross validation, TTA 등 적용하고 싶었던 기법들을 적용하지 못했습니다. 능력부족으로 시간의 한계에 부딪혔습니다.
  • 컴피티션에 너무 몰입한 나머지 더 다양한 실험을 하는 것과 loss별 가중치를 적용한 조합, Optuna적용, dropout적용 등 이미 적용시킨 부분들을 제대로 활용하지 못했습니다. 실험에 여유가 없었습니다.

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

  • 프로젝트 시작 전 전반적인 대회의 흐름에 대한 계획을 세우고 시작할 것입니다.
  • 팀원간의 역할 및 협업 전략을 분명히 할 것입니다.
  • 무작정 성능을 내기보다는 문제의 해결책과 해당 문제를 해결하는데 있어 문제가 되는 걸림돌(데이터 불균형 등)을 파악하고 전략을 세울 것입니다.
  • pytorch lightning을 활용해 볼 것입니다.
  • 외부데이터의 활용을 더 빠르게 생각하고 적용해볼 것입니다.
  • 메모리활용 및 코드의 효율성에 대해 더 고민해볼 것입니다.