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에서 새롭게 시도해볼 것은 무엇일까?
프로젝트 시작 전 전반적인 대회의 흐름에 대한 계획을 세우고 시작할 것입니다.
팀원간의 역할 및 협업 전략을 분명히 할 것입니다.
무작정 성능을 내기보다는 문제의 해결책과 해당 문제를 해결하는데 있어 문제가 되는 걸림돌(데이터 불균형 등)을 파악하고 전략을 세울 것입니다.