
다양한 연령 및 성별의 사람들이 마스크를 착용한 사진이 주어진다.
해당 이미지에서는 마스크를 제대로 쓴 경우, 마스크를 잘못 쓴 경우와 마스크를 쓰지 않은 경우 총 3가지 Case가 존재한다.
연령과 성별, 마스크 착용 여부를 고려하여 Labeling(Classification)을 하는 목적의 대회였다.

설명
실제로 모델을 활용해보는 것은 이번 대회가 처음이였다.
과연 Pretrained Model의 성능이 좋을지, Custom Model을 활용하여 처음부터 해당 Data에 맞는 모델을 형성하는 것이 좋을지 궁금하여 실험해보기로 하였다.
Public
Private
느낀 점
아무래도 Pretrained Model의 구조는 나보다 훨씬 AI에 대해 잘 알고 있는 사람이 개발했을 뿐더러, 외부 데이터를 활용할 수 없는 이번 대회에서는 수많은 데이터로 어느 정도 학습이 된 Pretrained Model의 성능을 따라갈 수 없다고 생각하였다.
설명
CNN 중 Pretrained Model은 여러 가지가 존재했다.
이 중 어느 것이 가장 성능이 좋을지를 판단하기 위해 여러 모델을 활용하여 실험을 진행해봤다.
F1 Score 기준 성능
설명
마지막 대회날 다른 Classification 대회에서 활용한 기법을 팀원이 추천해주었다.
실제로 개념을 읽어보니 성능을 올릴 수 있을 것이라 생각하여 시도해보았다.
Public
Private
느낀 점
Accuracy 자체는 높아졌으나, 이번 대회 Main Metric은 f1 socre였기 때문에 눈물을 머금고 포기할 수 밖에 없었다.
Accuracy가 좋다고 f1 score도 좋아지는 것은 아닐 수도 있다는 것을 알게 된 실험이였다.
개념 이해를 완벽히 수행해야 함
나는 Cross-Validataion에 대한 기법을 알고는 있었다. 하지만, 프로젝트가 끝나고 피드백을 하면서 이 개념을 사실 제대로 이해하지 못했다는 것을 알게 되었다.
먼저, Cross-Validation은 데이터를 쪼개고 HyperParameter를 수정한 뒤 마지막에는 모든 Data를 활용하여 Parameter를 학습시키는 것이다. 특히 김소연 캠퍼의 코드를 읽으면서, 김소연 캠퍼도 이와 같은 방식을 활용했다는 것을 알게 되었다.
하지만 나는 Cross-Validation을 잘못 이해하여 8:2로 데이터를 쪼개고 8로 Model을 학습시킨 뒤 가장 좋은 Best Model에 나머지 2를 추가적으로 학습시키는 과정을 수행하였다.
이는 나의 이해도가 많이 부족하였고, Early Stopping을 위해서는 무조건 Accuracy 계산이 필요하다는 나의 착각으로 생성된 환장의 콜라보레이션 이였던 것 같다.
또한 우리가 활용한 Cross-Validation은 Holdout Method인데, 이는 주로 9:1 또는 7:3 비율을 활용한다는 것을 알게 되었다. 즉, 마지막 결과가 상위인 팀이 우연히 9:1로 시도해봤는데 좋은 점수를 낸다는 것을 이미 세간에는 널리 알려진 지식이였다는 의미이다. 만약, 내가 이 프로젝트를 수행하기 전 이 사실을 알았다면 조금 더 성능을 끌어올릴 수 있었을 거라는 후회가 들었다. 또한, K-fold Cross Validation을 조금 더 잘 활용하여 Stratified K-fold Cross Validation 기법까지 활용했다면 더욱 성능을 올릴 수 있지 않았을까 하는 후회가 들었다.
많은 지식을 쌓아야 한다.
많이 알고 있어야 실제 프로젝트에도 적용할 수 있다는 것을 알게 되었다. 마지막 팀 프로젝트 발표 때 첫 번째 팀이 발표하는 것을 보며 내가 모르는 용어들이 많이 나왔다. 이런 용어들을 알지 못했으니 당연히 활용해보지 못했고, 팀 내에서도 EfficientNet이나 Transform 중 RandomErasing 등 유용할 것 같은 몇 가지 기법들을 몰라서 처음부터 활용하지 못했던 것이 많이 후회되었다. 꼭 다음 프로젝트를 할 떈 많은 것을 공부하여 프로젝트의 방향성을 처음부터 잘 잡았으면 좋겠다.
편견을 버리자
이번 프로젝트에서 가장 후회되는 점이다. 만약 내가 처음부터 Layer가 깊어야 한다는 편견을 버렸다면 실험 결과가 어떻게 되었을까? 더 좋아지지 않았을까?
실제로 처음 실험 결과를 보면 1층 Layer가 더 좋은 Accuracy를 가지는 것을 알고 Loss도 더 좋았는데 왜 3층 Layer를 활용하기 위해 여러 가지 기법을 추가하여 억지로 3층 Layer 기법을 활용했을까?
다음 프로젝트부터는 절대로! 편견을 가지지 않고 실험 결과에만 의존하여 모델을 향상하는 습관을 가져야겠다.
먼저 다음 프로젝트를 시작하기 전에 논문이나 블로그, StackOverflow나 Kaggle 등을 많이 돌아다니며 기법을 흡수하는데 능력을 다 해야 겠다고 생각했다.
모르면, 활용할 수도 없다는 것을 알게 되었다.
그리고 이번 프로젝트에는 GitHub를 잘 활용하지 못했다. 다음 프로젝트 때는 GitHub를 조금 더 잘 활용하여 Push와 Pull에 Comment를 달며 변경점을 조금 더 확실히 파악할 수 있도록 해야겠다.
특히, 내가 소스트리를 활용하는데 소스트리는 Private한 Repository를 가지고 오는데 특정 설정이 필요하므로, 이런 설정 방법을 블로그에 따로 정리해야 겠다는 생각이 들었다. 결국 나중에 활용할 GitHub Repository는 모두 Private할 것이기 때문이다.
마지막으로 이번에 배운 WandB를 다음 프로젝트에는 처음부터 활용하여 경향성 파악을 하며 프로젝트에 대한 정확도를 효율적으로 높이도록 해봐야 겠다.