Project
오늘의 목표 및 진척상황
- Eight Dimension Model 구성 및 Loss 실험
- Histogram Equalization 실험
- Random Brightness, HSV 실험
- Eight-teen Dimension Model Validation Set 재구성
- Seed 변경 Model
- ALL Data Train Model 학습
- Drop Out 실험
직면했던 문제와 학습한 내용
- 대분류 별 예측 모델 구성
어제와 동일한 목적을 가지고 Model을 구성했다. 어제 구성했던 Model은 Multi-Head Model의 형태로, 각각의 Layer로부터 Class에 맞는 Dimension의 결과를 출력했다. 오늘은 각 Class의 갯수만큼의 Dimension을 출력하는 형태로 구성했다. 마치 Multi Label Classification처럼 나오는 형태와 유사하다. 총 8개 Dimension으로, 각 Dimesion의 의미는 "Masked, Incorrect, No-Mask, Male, Female, ~30, 30~60, 60~의 의미를 갖는다. 이 모델의 출력과 구성에 맞도록 Pipeline을 설계하고 변경했다.
- 대분류 예측 모델의 Loss 실험
기존의 Model과 Architecture가 다르기 때문에, 여러 실험이 필요했다. 심지어 적합한 LR의 값도 달랐다. Loss는 CE Loss, Focal Loss, Weight CE Loss를 실험했다. 이때 Weight를 주기 위해서, 각 대분류별로 Weight를 구하는 Code가 추가됐다.
- Augmentation 실험
Center Crop과 약간의 Rotation 등을 제외하고는 Augmentation에서 성능 향상을 얻기 어려웠다. 이에 대해 고민해보니, 다양한 일반화를 위한 증강보다는 Test Set과 비슷한 형태로의 증강이 필요하다는 생각이 들었다. Test Set은 Train Set과 다르지 않는 특징을 가지고 있었다. 카메라를 세워놓고 찍은 듯한 사진이고, 비슷한 위치에 얼굴이 있는 형태였다. 이런 환경에서 생길수 있는 아주 작은 차이만 증강으로 얻으면 될 것 같다는 생각이 들었다. 이에, 아주 작은 값으로 Random Brightness, Random Contrast, HSV 등을 실험 해봤다. 하지만, 놀랍게도, 모두 성능을 하락시키는 요인으로 작용했다. 최종적으로는, Augmentation 없이 제출물을 만들 예정이다.
- 모든 Class 예측 모델의 Validation Set 변경
대분류별 예측 모델을 구성하기 전까지는, 기존의 방식이 문제가 있다고 생각하지 않았다. 같은 인물이더라도 착용한 Mask에 따라 Class가 달라지기 때문이었다. 생각을 조금 더 깊게 해보니, 비록 Class가 다르더라도 Mask에 따라 바뀔 수 있는 Class는 한정적이기 때문에 Model의 학습에 문제가 있었다. Validation Set에 Data Leaking이 일어난 것이고, Train Set과의 층화 추출에도 문제가 생기는 것이었다. 이에, 각 사람(ID)을 기준으로 CV를 구성하는 Code로 Pipeline을 재구성했다.
- Seed 변경 Model
현재 최고 Score에 해당하는 Model을 만들기가 어렵고, 다른 캠퍼들의 추격이 무섭다는 이유로 바보같은 선택을 한 것 같다. Seed만 다르게 해서, 최고 결과를 만들었던 Model을 학습시키고 있다. 이 때문에, 귀중한 GPU 자원이 매우 긴 시간동안 묶여있게 되었고, 더 많은 실험을 하지 못했다.
- ALL Data Train Model
조급한 마음에 또 하나의 실수를 했다. 이번에는 Validation Set 없이, 모든 Data를 Train에 사용한 단일 Model을 학습시켰다. 결과를 제출하지는 않았지만, 이 또한 귀중한 GPU 자원을 낭비한 시간이었다고 생각한다. 물론, 나중에 앙상블에 더 좋은 작용을 할 수 있을지도 모른다. 다만, 이런 일을 할 시간에 더 좋은 아이디어와 구현을 하는게 더 건강하고 성장할 수 있는 방향이었다고 생각한다.
- Drop Out 실험
먼저, 문영기 멘토님께 매우 감사하다는 말씀을 드리고 싶다. 반영성 캠퍼님이 모집한 새벽반 Zoom에 문영기 멘토님도 오셨었다. 이런저런 질답을 나누다가 우연히 전해주신 Tip이다. 'Data가 부족할 때에는, Dropout을 0.7로 놓고 실험해보라.' 새벽에 이 얘기를 듣자마자 적용해서 실험을 했는데, 놀랍게도 즉각 성능 향상이 이뤄졌다. 이에, 기존 최고 성능 Model의 환경에서 Dropout을 추가해 학습을 진행하고 있다.
추가로 진행 할 사항
- Ensemble Code 작성
- Seed 변경 Model 결과 제출
- ALL Train Model 결과 제출
- Drop Out Model 결과 제출
- 최종 결과에 사용할 Model 선정 및 제출
'네이버 부스트캠프 AI Tech' 카테고리의 다른 글
[P1] Day 50 (0) | 2021.04.11 |
---|---|
[P1] Day 49 (0) | 2021.04.11 |
[P1] Day 47 (0) | 2021.04.11 |
[P1] Day 46 (0) | 2021.04.11 |
[P1] Sunday 5 April (0) | 2021.04.11 |
Uploaded by Notion2Tistory v1.1.0