2주차부터는 팀 단위로 대회가 진행되었다. 이때부터 협업의 어려움과 협업의 이점을 느낄 수 있었다. 우선, 기본적인 베이스라인 코드를 선정하는 데에도 한차례 어려움이 있었다. 각자 코드 스타일이 달랐고 디렉토리 구조를 가져가는 방법도 달랐다. 나는 train이나 inference 같은 특정 방법은 함수단위로 가져가서 범용적으로 쓰는 것을 선호했고 모든 과정은 main.py 파일을 통해 수행되는 것을 선호했다. 하지만 팀원들 중 파이썬 언어에 아직 익숙하지 않거나 다른 스타일을 선호하시는 분들이 있었고 최종적으로는 부스트캠프에서 제공하는 베이스라인 코드를 토대로 협업하였다.
팀원 중에서 모델의 성능이 높은 편에 속하였고 계속해서 모델을 개선시키는 역할을 맡았다. 또한 이전에 github 사용해본 경험이 있어서 팀원들이 올려주는 pull-request를 리뷰하며 코드를 통합하는 역할도 주로 하였다. 또한 프로젝트 루트 디렉토리 구조 개선, 코드 스타일 포맷팅 도구등을 추가하여 팀원들이 좀 더 효율적인 협업을 할 수 있도록 노력해보았다.
반대로 팀원들을 통해 여러가지 딥러닝 방법론을 배울 수 있었다. 이전에 AI 대회 경험이 전혀 없었기 때문에 어떤 방법론들이 있고 언제 적용해야 하는지 전혀 알지 못했다. 개인 학습시에는 train set과 validation set을 구분해서 학습시키지도 않았었고 seed도 고정하지 않아서 효율적으로 학습해지 못했다는 것을 깨달었다. 또 개인적으로 EDA과정을 소홀히 하였지만 팀원들이 한 EDA덕분에 train dataset에 좀더 깊은 이해를 할 수 있었다.
우리 팀은 크게 단일모델과 앙상블 모델 2개의 모델로 학습하였다. 나는 단일 모델을 맡아서 진행하였고 피어 세션에서 소통하면서 좋은 아이디어를 많이 얻을 수 있었다. 결과적으로 성능에 개선을 준 아이디어가 2가이 있었는데, age offset과 public dataset이었다. 이번 대회는 사실 마스크 착용여부나 성별 분류보다 나이 분류가 중요하였다. 나이 분류를 더욱 정확하게 하기위해서 우선 class imbalance를 해결할 필요가 있었다. 즉, 특정 클래스 데이터셋에 과도하게 데이터가 집중된 경향이 있었다. Age offset을 이용하여 애매한 나이 경계에 있는 데이터들을 제거하였고 불균형한 class data수를 맞추기 위해 public dataset을 추가해보았다.
대회 마감날 마지막으로 앙상블 기법, voting을 적용해 또 한 번의 큰 성능향상을 이루었다. 모델이 크게 2개(앙상블 모델, 단일 모델)로 분류되어 있었기 때문에 앙상블 과정에서 눈에 띄는 성능향상을 볼 수 있었다.
기본적인 파이썬 문법부터 딥러닝 방법론 등 다양한 지식을 팀원들로부터 배우는 알찬 2주였다고 생각한다. 처음에는 딥러닝 모델을 학습시키는 데에 있어서 과연 협업이 필요할까 라는 입장이었지만 서로 부족한 부분을 채워줄 수 있다는 점에서 내가 잘못 생각했다는 것을 느꼈다. 각자 사람마다 잘하고 좋아하는 분야가 다르기 때문에 협업은 필수불가결한 것 같다