Classification 대회 끝!!!!!!!
2주간의 classification 대회가 끝이 났다. 우리 팀은 8등이라는 결과물을 얻어냈다~!!! 8조라서 8등 시작할 때부터 리더보드 순위에 연연하지 말자라고 말은 했지만...... 아예 신경이 안쓰일 수는 없는 법. 오히려 순위를 올리기 위해 여러가지 방법을 시도할 수 있었던 것이 좋았던 것 같다. 2주 간 정말 정말 여러가지를 시도해 보았고 실행했다. 특히 역대급으로 느낀 점이 많았는데 밑에 차차 적어 볼 예정이다.
크게 느꼈던 점은 내 생각은 우물안 개구리라는 것이었다. model에만 집중해서 바꿔가며 실행했는데 동료 캠퍼분들은 data에 초점을 맞추고 data의 결함을 해결함으로써 성능을 올리셨다. EDA는 대충하고 넘어가서 data가 imbalance한 것은 신경도 못썼던 것 같다. 이렇게 성능이 올라가니 더 감명을 받았다. model뿐만 아니라 data에 집중해서 문제를 해결하는 것이 model 못지 않게 중요하다는 것을 뼈저리게 느꼈다.
또 협업에 대해서도 고민을 많이 해본 시간이었다. 어떤 branch 전략을 사용할지, 어떤 컨벤션을 사용하고 어떤 것이 좋은 협업 방법인지 계속 생각했다. 정통 git-flow로 main, dev, feat 3개의 branch를 자주 사용하지만, 나도 git이 익숙치 않고 팀원분들도 익숙하지 않았기에 좀 더 단순히 가져가서 main, feat 2개의 branch만을 이용했다.
그래도 각 기능을 만들어 PR을 날리고 서로 확인하고 Merge를 함으로써 아 협업은 이렇게 하는거구나! 라는 것을 깨달아 갈 수 있었다. 특히 Git과 Github사용에 있어서는 적극적으로 행동했다. 과거에는 좀 머뭇거리고 별로 하기 싫어했는데 이럴 수록 더 Git, Github 같은 도구들을 사용하기 어려웠다. 과거 학교 멘토링 때도 질문이나 Git등을 적극적으로 하지 못해 후회한 경험이 있어서 이번에는 그런 것들을 보완하기 위해 더욱더 적극적으로 참여했다. Readme파일에 나름대로 branch를 만들고 PR을 날려서 Merge 하는 방법도 가이드 하였다.
또 헷갈리는 점이 있으면 직접 실험을 했다. 예를들어 뭔가 commit, push 하는 상황 때 이거 이렇게 해도 되나? 라는 생각이 들면 따로 Repo를 파서 해보고 실제 적용을 했다. 이렇게 하니까 좀 더 확신을 가지고 commit, push를 할 수 있었다. 물론 중간에 충돌 해결하는데 애먹기도 했다.... 아직은 좀 더 경험이 필요하다.
그리고 PR을 날리면 서로 코드리뷰를 해주는데 이부분은 조금 아쉬운 점이다. 좀 더 확실하게 코드리뷰하는 인원을 정해서 했다면 더 좋은 프로젝트를 할 수 있지 않았을까 라는 생각이 든다. 이렇게 정해서 한다면 팀원들이 코드리뷰를 하며 프로젝트에 대한 이해를 잘 할 수 있고, 코드에러를 방지할 수 있을 것이다. 물론 시간이 좀 부족한 등의 제약사항이 있었기도 했지만 그래도 코드리뷰에 대한 확실한 룰을 필요해 보였다.
아 또 생각난 것은 생각보다 이론과 직접 실험을 돌려나온 결과값은 괴리가 꽤 있었다. 분명 이론상으로는 좋아야하는데 왜 결과가 더 나빠지지.....?그래서 좀 낙담하기도 했다. 도대체 어떻게하면 성능이 좋아지지... 이런 생각을 할 때 동료캠퍼분들이 성능을 올려주셔서 힘을 내서 다시 실험을 할 수 있었던 것 같다. 마지막에는 EfficientNet 과 60세 데이터 증강을 통해 팀 제출 2등 성과를 낼 수 있었다!
또 아쉬운 점..... 앙상블 개념을 완전 잘못 이해하고 있었다. statified k-fold가 계속 같은 모델로 training과 validation을 진행해서 Overfitting 이 계속해서 일어났고, 급기야 k-fold 같은 기법을 도대체 왜쓰는 거야..? 라는 생각을 했다. 시간은 5배로 걸리는데 성능은 한자리수를 찍었기 때문이다. 따라서 k-fold 에 대한 불신이 가득 했는데 프로젝트가 끝난 후 팀원분과 얘기하는데 내가 완전 잘 못 이해하고 있었다. model을 계속 초기화 시켜서 k-fold를 진행해야했는데 내가 코드를 가져오는 과정에서 model을 불러오는 부분을 빼먹어버린 것이다. 성능 더 올릴 수 있었는데... 라는 생각과 함께 후회가 밀려왔다. 다음엔 제대로 적용해보고 싶다.
반대로 잘한 점들도 생각이 난다. 공유하려고 한 점이다. Error shooting을 위해 노션에 Trouble shooting 게시판을 만들었다. 그리고 실험결과라던지, 궁금한 거나 이해가 안되는 점, 앞으로 할 시험들을 서로서로 공유하며 진행하였다. 특히 Github에서 초반에 틀을 잡아놨던지라 base code기반으로 실험을 진행할 수 있었다. 또 label smoothing, Early stop, k-fold 에 대해 서로 각자의 이유를 대며 토의 하니 더 잘 이해할 수 있었다. 이렇게 빠르게 공유하니까 잘 나온 성능의 코드를 바로 가져다가 쓸 수 있었다.
그러나 이것도 아쉬운 점은 있다. 최대한 공유를 하려고 했지만 dataset에 대한 공유를 깜박하고 서로 다른 dataset을 사용하고 있었다. 그리고 초반에는 혼자 코드 수정을 막 했던지라 팀원들이 어떤 작업을 하고 있는지 모를 때도 있었다. 그래서 좀 더 5명이서 중간 중간 방향을 잡아주고 플젝을 진행했었어도 좋았을 것 같다.
마지막으로, 알게 된 키워드에 대해서는 공부하고, 또 혼자 적용해봐야겠다고 느꼈다. SwinTransformer, EfficientNet 등 model에 대해서는 아직 잘 모르기에 논문을 읽으며 공부를 해봐야겠다. 또 Wandb 등의 툴도 사용해보고, SSH로 원격접속해서 서버에서 로컬로 가져와서 작업을 해본 경험도 정말 좋았다. Augmentation 같은 경우는 좀 더 익숙해지게 연습을 해야겠고, Cutmix 등의 기법은 직접 구현을 해봐야겠다. 또 배경 제거 라이브러리 rembg 등도 직접 사용해보진 못했지만 다음에는 적용해서 결과를 내봐야겠다.
찐 마지막으로 내가 모델 향상을 위해 한것들을 정리해봐야겠다.
처음에는 주로 2가지 모델을 사용하였다. VGG19 와 ViT이다. 실험을 통해 VGG19 보다 ViT가 학습이 빠른 경향이 있었고 정확도 또한 좋게 나왔다. 또 ViT의 전체 parameter를 학습하는 것과 freeze한 parameter를 학습하는 것을 비교했었다.
그리고 single-class문제 예측을 mask, gender, age로 나누어서 training하는 multi-class문제로 치환하였다. 하지만 예측 성능은 생각보다 좋지 않게 나와 헤메고 있을 때 동료 캠퍼분들이 제시한 방법들을 조합하여 성능이 좋은 모델을 발견할 수 있었다.
EfficientNet, smooth loss와 57세까지 training시 60대에 포함시키며 data를 증강한 방법을 통해 달성하였다. 또 어디 까지 포함시켜야 성능이 좋을지 각각 53세, 55세, 57세로 나누어 실험을 진행하였다. 그리고 horizontal flip, rotate 이미지 등의 augmentation을 활용한 TTA로 미세하게 성능을 올릴 수 있었다. 이를 통해 팀제출 중 2등의 모델을 찾았다. 서로 공유가 빨리 빨리 되어 이룰 수 있었던 성과였다.
마무리하며....
대회를 마치고 이제 랩업리포트를 작성중이다. 겪었던 경험들이 잊혀지기 전에 먼저 기록하기 위해 회고를 적는다. 여러가지 깨닫는 점이 많았던 대회였고 앞으로 남아있는 대회도 Level2 팀원들과 함께 성공적으로 진행해보고 싶다. 다다음주 부터는 Object Detection 대회가 있는데 다음주에 어느정도 공부를 해둬야겠다는 생각이 든다. Level 1 오기의 아이들 8조 고생많이 하셨고 마무리까지 잘 하면 좋겠습니다! 읽어주셔서 감사합니다.
대회를 진행하며 도움받았던 곳들 Link
https://l-yohai.github.io/AI-Competition의-협업을-위한-플래닝가이드/
AI Competition의 협업을 위한 플래닝가이드
🍡 떡볶이조 팀원들 🔥 김다영 김아경 문하겸 박지민 이요한 전준영 정민지
l-yohai.github.io
https://earth-coding-lab.notion.site/ECL-Git-Flow-e5fed1b7b7074b498363b97ab89d3c9a
ECL Git-Flow
ECL Git-Flow
earth-coding-lab.notion.site
https://pytorch.org/docs/stable/notes/amp_examples.html
CUDA Automatic Mixed Precision examples — PyTorch 2.0 documentation
Shortcuts
pytorch.org
https://github.com/ashleve/lightning-hydra-template
GitHub - ashleve/lightning-hydra-template: PyTorch Lightning + Hydra. A very user-friendly template for ML experimentation. ⚡
PyTorch Lightning + Hydra. A very user-friendly template for ML experimentation. ⚡🔥⚡ - GitHub - ashleve/lightning-hydra-template: PyTorch Lightning + Hydra. A very user-friendly template for ML ex...
github.com