https://github.com/boostcampaitech4cv3/level1_imageclassification_cv-level-cv-19
https://www.notion.so/3f3a9a603c5348939bd3c16996aa2c22
→ weighted random sampler가 어떻게 작동하는지 안다면 아닐수도 있다. 만약 데이터 수가 적은 클래스가 그 클래스의 특징을 뽑아낼 수 없을만큼 적다면 모델이 그 클래스의 특징을 학습하는 것이 아닌 각 instance에 대해 학습을 하게되어 오히려 overfitting이 발생할 수 있다. sampler 실험 결과 마스크 분류 대회에서 sampler를 사용하지 않았을 때가 weighted random sampler를 사용했을 때보다 더 높은 성능을 보여주는 것을 확인했다. weighted random sampler를 사용한다면 보정이 필요한 해당 클래스의 일반적인 특성을 뽑을 수 있도록 데이터셋을 늘려주거나 그게 힘들다면 hard augmentation을 통해 일반화 성능을 높혀주는 것이 좋은 선택일 수 있다.
→ 앙상블에 사용하는 모델의 성능이 비슷비슷하게 좋으면 적용해볼만 하다. 하지만 성능 차이가 너무 많이 난다면 오히려 성능이 낮은 모델이 noise가 되는 것을 확인했다. 여러 모델을 적용할 때 성능이 어느정도 잘 나오는 모델을 넣는 것이 좋은 선택일 수 있으며 좋은 성능을 내는 모델의 weight를 더 주는 것을 추천한다.
→ 앙상블 모델을 사용하는 것은 inference하는데 시간이 배로 걸린다. 성능은 좋겠지만 그에 따른 cost가 있다는 것을 명심하자
→ 정말 중요하다. 실험 정리가 되지 않는다면 insight를 얻기 어렵다. 또한 감으로 하이퍼 파라미터를 바꿀 수 밖에 없다. 어떤 이유로 뭘 적용했고, 결과가 어땠고 왜 잘나왔는지 못나왔는지 정리하자. 나중에 보고서를 잘 쓰려면 잘 정리하자!
팀프로젝트를 하다보면 서로 예민해질 수 있고, 서로 의사소통이 잘 안될 수 있다. 어느 정도 분위기를 풀어주는 스몰톡이나 장난을 치는 건 필요하다고 생각한다.
프로젝트를 위한 깃 전략으로 git flow를 적용했고 우리 프로젝트에 맞게 우리끼리 세부적인 컨벤션을 맞췄다. 프로젝트가 끝나고 보니 디버깅할때도 편하고 어떤 문제가 있어서 어떻게 해결했는지 알아보기 쉬워졌다.
혼자서만 코딩하다보니 파이썬이 객체지향언어라는 것을 종종 잊고 의식의 흐름대로 쓰게된다. 결국 나만 이해할 수 있는 코드가 만들어지는데, 팀 내에서 이게 뭐지?하는 경우가 많이 생길 수 있다. 또한 merge할 때 conflict나면 여기서부터 이제 답도없어지는 경우가 발생한다.. 코드를 가져다쓰는것도 중요하지만 다른사람들도 잘 사용할 수 있도록 정리하는 것이 중요하다.
10/24(월)~11/3(목)까지 대회일정동안 정말 바쁘게 지냈고, 팀 성적은 20팀중 5등에 드는 높은 성과를 거두었다. 대회를 진행하면서 개인적인 목표는 ‘협업을 잘하는 것’이었다. 결과적으로 기대 이상으로 목표를 성취했다고 생각한다. 코드를 공유하는데 깃허브를 사용했고, 결과를 정리하는데 노션과 구글 스프레드 시트를 활용했다. 깃허브를 잘 활용하기 위해 회의를 길게 가졌는데, 여기서 각자 의견이 달랐지만 결국 모두가 수긍할 수 있는 전략을 채택했다. 브랜치를 만들 때나 커밋을 할 때 화면을 공유해 ‘이 상황에서는 브랜치를 어떻게 파고, 커밋 메세지는 이런식으로 통일하자’는 것을 보여주면서 설명해줘서 모두가 깃 컨벤션과 전략에 대해 이해할 수 있었다고 생각한다. 사실 본인은 깃허브를 이용해 다른사람들과 같이 협업하는게 처음이라 처음에 걱정이 많았는데 문제가 생길 때마다 화면을 공유했고, 팀원들이 잘 해결해줘서 도움이 많이 되었다.
지금와서 생각해보면 깃허브를 잘 활용하기위한 필요조건은 의사소통을 잘하고 코드를 클래스로 잘 만드는 것인데 의사소통이 원활하게 잘 되었고, 이쁘게 클래스로 잘 만들어줘서 잘 돌아가던 프로그램이 안되는 상황은 발생하지 않았다. 한 예시로 본인이 sampler를 train.py에다가 구현했는데 다른 팀원이 sampler.py파일에 이쁘게 클래스로 만들어줘서 누가봐도 이쁘고 이해할 수 있도록 만들어줬다. 객체지향언어가 왜 필요한지 가슴으로 깨우쳤다.
새벽 4시까지 회의하고 매일 회의에 회의를 가지는 피곤한 일정이었지만, 모두가 열심히해준 덕분에 재밌게 프로젝트를 할 수 있었다. 아마 프로젝트에서 팀원들 각자가 해보고 싶었던 것은 모두 해봤을 것이라 생각되며, 얻고싶은 것들을 얻어가지 않았을까 생각한다. 누군가는 코드를 많이 작성해보고 싶었고, 누군가는 프로젝트에서 깃허브를 잘 활용해보고, 누군가는 실험을 많이해 인사이트를 얻고, 문제를 정의하고 작동원리를 이해해 모델을 성능을 높이려고 한 팀원들이 있었다. 각자 해보고 싶은 것들이 프로젝트에 정말 필요했던 것이고, 잘 반영되어 20팀중 5등이라는 좋은 성적을 거둘 수 있었다. 첫번째로 한 협업 프로젝트를 정말 즐거운 기억으로 남길 수 있어서 팀원들에게 정말 고맙다.