https://github.com/KimGeunUk/Mask-Image-Classification
목표
사람 얼굴 이미지를 입력으로 받아 마스크를 쓰고 있는지, 정확히 쓴 것이 맞는지, 대략적인 나이가 몇 살인지를 분류하는 모델 개발
나의 역할 및 시도
- Multi Class 문제를 Multi Task로 구현하여 학습한 결과, Valid F1 Score가 약 3.5% 향상
- 각 Task에서 클래스의 불균형이 존재하여 CrossEntropyLoss에 클래스별 가중치를 추가하였고, 이로 인해 Valid F1 Score가 약 1% 향상
- 나이를 예측하는 Task의 성능을 픽셀 수준의 데이터 증강 기법과 각 범주를 이진 분류 모델 구분하여 학습한 One-vs-Rest 방법을 도입하였으며, 이로 인해 Valid F1 Score가 약 2% 향상
개인 회고 ★
이번 프로젝트를 진행하며 “협업”의 중요성을 뼈저리게 깨달았습니다. 부스트캠프를 참여 하기 전 팀 프로젝트를 진행할 때, 맡은 파트를 혼자서 진행하였고 여러 대회를 참여하더라도 혼자서 참여를 하였기 때문에 협업을 경험해보지 못하였습니다. 때문에 이번 프로젝트를 시 작할 때 협업의 방향을 잡지 못하였고, 3~4일 정도 소중한 시간을 낭비하게 되었습니다. 멘토님의 피드백을 받고 부랴부랴 협업을 진행하 여 프로젝트를 무사히 잘 끝냈지만, 이 3~4일 정도의 시간이 있었다면 더 좋은 결과와 과정이 있었을 것인데 많은 아쉬움이 남았습니다. 이렇게 몸소 협업의 중요성을 깨달아 앞으로 협업을 진행할 때 ‘어떻게 시작해야 하는지’와 ‘어떻게 진행할지’에 대해 감을 잡게 되어 한편으 로 많은 도움이 되었습니다.
처음 프로젝트의 데이터를 확인했을 때, 처음으로 눈에 들어온 것은 18개의 클래스였습니다. 특히 Mask, Gender, Age의 특징을 한번에 분류 하여 클래스를 예측하는 데, 개인적으로 든 생각은 ‘각자 분류를 할 때 집중해야 하는 특징들이 다를 것인데 하나의 모델을 사용하는 것은 성능을 떨어뜨리지 않을까?‘였습니다. 이 가설의 결과가 궁금하여 팀원에게 먼저 3개의 모델을 독립적으로 학습하는 코드를 구현하는 파 트를 맡고 싶다 얘기하였고 저는 주로 이것을 기반으로 프로젝트를 진행하였습니다. 이렇게 다양한 아이디어를 정리하여 실험을 진행할 순서를 정하였고 각자 맡은 파트에서 다양한 실험을 진행하였습니다. 각자 맡은 파트에 서 좋았던 부분을 붙이고, 좋지 않았던 부분을 제외하는 등 조금씩 좋은 결과를 얻었지만 스스로 “왜 ?”를 생각하지 않았던 것이 조금 아쉬 웠습니다. 예를 들어 적절한 Loss를 탐색할 때 ‘Cross Entorpy가 Label Smoothing Loss보다 성능이 잘나와서 이걸 써야 할 것 같아 !’에 서 끝나는 것이 아니라, ‘Cross Entropy가 왜 Label Smoothing Loss 보다 성능이 잘나올까..? 얘들이 너희들은 어떻게 생각해 ?”라고 물 어보고 스스로 생각하고 정리를 했으면 어땠을까 하는 아쉬움이 남습니다. 멘토님의 피드백을 듣고 이전에 했던 실험에서 스스로 생각한 이유를 정리하긴 했지만, 실험했을 당시 생각하고 정리했더라면 조금 더 좋은 결과와 과정을 남길 수 있었을 것이라 생각합니다. 이후, 이렇게 “왜 ?”를 계속 생각하면서 가장 좋지 않은 성능인 Age 모델의 개선에 집중하였습니다. 다양한 가설을 세우고 실험을 진행하 였지만 대부분 실패를 하였고, 프로젝트 마지막 날 앞서 3개의 모델을 독립적으로 학습하듯이, Age의 Hard Label를 조금 완화하면서 각 구간의 특징에 집중할 수 있게 < 30 이진 분류 모델, ≥30 <60 이진 분류 모델, ≥ 60 이진 분류 모델 3개의 독립적인 모델을 학습한 뒤, 8가 지의 경우의 수를 잘 조합하여 추론을 하였습니다. 결과, 성능이 제일 좋게 나왔지만 프로젝트의 기간이 종료되어 마지막 앙상블, KFold, 최신 모델 등을 적용하지 못하였습니다.
이번 프로젝트에서 가장 힘들었던 점은 가설의 좋지 않은 결과의 축적과 Validation Score의 의문 이였습니다. 저희가 세운 가설 중 ‘이건 정말 성능이 오를 것 같은데?’라고 생각했던 아이디어가 여럿 있었지만 대부분 그렇지 못하였습니다. 그래서 그런지 이때까지 저희 모델의 성능 측정 지표인 Validation F1 Score를 믿어도 괜찮을까?에 대해 의문이 생기기 시작했고 성능은 계속 정체 되어 많이 답답했습니다. 하지만 이러한 가설과 그 결과들이 쌓여 성능을 올리는 것이 아니라 스스로 성장하는 데 초점을 맞추는 것이 좋다는 멘토님의 말씀을 듣고 저 희는 최대한 결과에 신경 쓰지 않도록 노력했습니다. 이번 프로젝트에서 많은 시행 착오, 실패, 아쉬움 등이 있었지만, 그만큼 얻는 것들이 많아 매우 뜻 깊은 시간 이였습니다. 이번에 배운 내 용들을 잊지 않고 다음 프로젝트에 적용하여 스스로를 더욱 발전시키는 것이 목표입니다.
감사합니다.
'Competition' 카테고리의 다른 글
[2023] / [Naver Boostcamp AI Tech] Hand Bone Segmentation (0) | 2023.09.07 |
---|---|
[2023] / [Naver Boostcamp AI Tech] Recyclable Waste Object Detection (0) | 2023.09.07 |
[2023] / [DACON] 제1회 코스포 x 데이콘 자동차 충돌 분석 AI 경진대회(채용 연계형) - Private 9th (0.68156) (0) | 2023.02.20 |
[2023] / [DACON] 포디블록 구조 추출 AI 경진대회 (0) | 2023.02.03 |
[2022] / [DACON] 건설기계 오일 상태 분류 AI 경진대회 - Private 20th (0.57507) (0) | 2022.12.16 |