Pstage 회고록을 먼저 작성하고, 저의 일기를 써보려고 합니다.
"첫 대회, 하나씩 준비해나가다"
캐글, 데이콘 대회 경험이 전무했기 때문에 시작 전부터 어떻게 준비해야 할지 걱정이 많았다. 멘토님의 조언을 바탕으로 가장 처음 수행한 것은 '협업툴 관리하기'였다. 노션의 칸반 기능을 사용해서 팀원들의 진행 상황이 동기화되었고, 앞으로 해야 할 일과 기록을 고정할 수 있어 편리했다. 다만, 처음엔 노션의 각 칸과 깃헙 이슈에 연결하여 에러, 또는 실험 과정을 기록하려고 했지만 생각보다 깃헙과 노션을 동시에 정리하는 것이 쉽지 않았던 것 같다. 베이스라인 코드가 주어진 후, 우선 '코드를 실행해 보자'가 목표였다. 처음 보는 라이브러리가 많았고, 사용법을 익힌 후에 수정해야겠다는 생각을 했다. 생각보다 실행은 쉽지 않았다. 많은 오류에 부딪혔지만, 끝내 해결했고 베이스라인 코드 사용법 가이드라인(train.py 사용하기, inference.py는 어떻게 사용하는가, tensorboard 실행하기)을 만들 수 있었다.
"Data augmentation을 계획하고 실행하다"
EDA를 통해 클래스의 불균형이 심하고, 나이를 구분하는 테스크가 어려울 것이라는 사실을 알게 되었다. 데이터의 증강이 필요하다고 생각했고, 처음엔 이미지 크롭을 시도해 보았다. 대체적으로 얼굴이 사진의 중앙에 위치하기 때문에 CenterCrop만으로도 효과가 있겠다는 생각이었다. 결과적으로 테스트 과정에서 정확도가 오르는 것을 알 수 있었다. 이미지 크롭 실험을 수행한 후, Mixup을 구현해 보겠다는 다짐을 했다. Mixup 논문 리뷰를 통해 어떤 방법론인지 파악하고, 효과를 기대하며 구현을 진행했다. Input dimension과 output을 유의하며 베이스라인 코드를 수정하였고, F1Loss도 그에 맞게 수정하여 배포했다. 과정에서 생기는 에러와 해결 방법, 최종 코드를 깃헙을 통해 공유하였다. 하지만 arg parse로 자유롭게 mixup을 on/off 할 수 있도록 코드를 구성하지 못했고, loss 선택에 제약이 있었다. 조금 더 코드를 보완하여 Weighted CrossEntropy 등을 적용하여 Mixup의 효과를 측정해 보고 싶다.
"회고 : 대회를 되돌아보다"
Mixup을 사용했을 때, 과연 효과는 더 좋아진 것일까? 어떻게 사용하면 더 좋은 효과를 가져올 수 있는가? 첫 번째, Mixup의 효과를 비교할 수 있는 실험을 진행하지 못했다. Mixup을 적용하기 전, 제출 시 모델의 성능이 좋지 않았다. 이를 처음엔 모델의 문제라고 생각하고 제대로 분석하지 않았으며, 이로 인해 Mixup의 효과를 정량적으로 표현하지 못한 것이 아쉬웠다. 모델의 성능이 좋지 못한 이유를 찾아본 결과, 데이터의 transform 함수를 우연성이 부여되는 data augmentation을 제외하고, Test dataset과 Train dataset에 동일한 값을 부여하지 않았기 때문이라는 것을 알게 되었다. 수정 후에 모델의 성능이 정상 범위를 되찾은 것을 확인했다. 하지만 여기에서 한 가지 의문점이 있었다. CenterCrop, Resize 등의 우연성은 없는 데이터의 변형은 Train과 Test 데이터셋에 동일하게 부여해도 되는가? 이에 대한 생각은 아직도 정리 중이다. 조만간 납득할 만한 답을 얻을 수 있길 바란다.
두 번째, Mixup은 어떻게 사용하면 더 좋은 효과를 가져올지 생각해보았다. 이번에 구현했던 코드는 전체 데이터 중 x_1과 x_2를 랜덤하게 고르고, lambda 비율만큼 섞어서 새로운 데이터를 생성한다. 따라서, 데이터의 수가 2배로 증강되는 효과가 있다. 하지만, 여기서 간과한 점은 이미 마스크를 착용한 데이터가 타 그룹에 비해 5배 많기 때문에 클래스 불균형 문제는 더 심해질 수 있다는 점이다. 기존 마스크를 쓴 데이터를 5개에서 2,3개 정도의 일부분만 사용하고 그 외 제대로 안 쓴 그룹과 쓰지않은 그룹을 한정으로 mixup을 사용하면 더 좋은 결과가 있을 것이라고 생각한다. 다만, 60대 클래스를 잘 구분하는 데 있어서 어떤 방법이 제일 적합한가에 대한 의문은 아직도 남아있다. 29에서 30, 59에서 60 등의 경곗값을 더 잘 구분할 수 있는 방법론이 있을지 알아보고자 한다.
Pstage 회고록 끝.
나는 열심히 사는 사람들을 보면 설렌다. 저런 열정을 배우고 싶다는 생각이 솟구친다.
그래서인지 근래 네이버 부캠을 하면서 참 즐겁다는 생각을 많이 했다. 오늘은 회고 겸 고민에 대해 작성해보려고 한다.
스스로에게 동기 부여하는 것이 힘들다. 그래서 항상 일을 벌인다. 이번에도 동기부여를 위한 나만의 장치를 여러 개 심어놓았다. 한 가지는 알고리즘 채널, 다른 하나는 모각코이다. 알고리즘 채널에 오늘 풀 문제를 올리고, 다 풀면 코드를 댓글로 남겼다. 한 번 두 번 올리다 보니 피드백을 받는 날도 있었고, 같이 문제를 풀어보는 분들도 생겼다. 이제는 조금씩 습관처럼 올리고 있다. 시작한 지 2주 조금 안된 것 같지만, 앞으로도 계속 꾸준히 올릴 생각이다.
모각코는 Pstage를 하면서 마지막 목요일과 금요일은 운영하지 못했지만, 그 외 코어타임에 캠을 켜고 공부를 했었다. 8시 반부터 한 시간 동안 코딩 문제를 풀고, 9시 반부터 출석과 데일리 스크럼을 준비한다. 그리고 코어 타임에 집중해서 네이버 부캠 일정을 끝내는 것, 그게 내가 정한 공부 루틴이다. 캠을 켜고 공부하지 않으면, 너무 많은 유혹(유튜브, 낮잠 등)에 시달리는 사람이기 때문이다.
항상 나와의 약속은 어렵다. 이렇게 어떻게든 나와의 약속을 지키기 위해 일종의 발악 중이다. 이를 꾸준히 지키는 사람 들이 너무 멋있다는 생각이 들고, 나는 왜 이게 맘처럼 안될까 생각할 때도 있다. 하지만 어느 정도 인정해야 하는 것 같다. 나는 아직 이런 사람이고, 내가 되고 싶은 나는 노력 없인 절대 될 수 없다.
내 꿈은 10년 안에 내 분야의 전문가가 되고, 그동안의 이야기를 책으로 내는 것이다. 아직 어떻게 해야 좋은 글을 쓸 수 있을지도 모르겠고, 어떤 이야기를 써야할지도 모르겠다. 이번 기회에 일기처럼 회고록을 남겨볼까 생각하고 있다. 오늘 시도해봤는데, 그동안의 생활도 되돌아보게 되고, 생각을 정리할 수 있어서 좋았다.
일단 뭐라도 해보고, 어떻게든 해보자. 오늘의 일기 끝.
'네이버 부스트캠프 AI tech 3기' 카테고리의 다른 글
회고 (4주차) (0) | 2022.02.11 |
---|---|
회고 3주차 (0) | 2022.02.04 |
9. ResNet 구현 (0) | 2022.02.03 |
8. ResNet 리뷰 (0) | 2022.02.03 |
7. PyTorch DataLoader (0) | 2022.02.02 |