Project

오늘의 목표 및 진척상황

  • Loss별 성능 실험 (Weight Focal Loss, F1 Loss)
  • Baseline Code 정리
  • Data Noise 확인
  • Crop Size 재조정
  • 이전 Augmentation 재확인
  • Same Label Mix-up 시도

직면했던 문제와 학습한 내용

  1. Loss 실험

    Weight CE Loss보다 성능이 잘 나오는 Loss가 있을지 실험을 했다. Weight Focal Loss와 F1 Loss 모두 기대했었는데, 결국 Weight CE Loss가 성능이 가장 좋았다.

  1. Baseline Code 정리

    실험을 병렬적으로 진행하다보니, Code 간에 사소한 차이가 계속 발생했다. 실험의 객관성을 확보하기 위해 Baseline을 다시 정리했고, Default 상태에서 값을 하나씩만 바꿔 실험을 재개했다. 특히, Metric이나 실험의 Title, File 저장 구조 등을 개선했다.

  1. Data Noise 확인

    Noise Data를 Control 하는게 이번 Competition의 주 승부처일 줄 알았다. 토론 글에 올라온 Noise 등을 보며 그렇게 생각했는데, 실제로 확인해보니 잘못 된 생각인 것 같다. 문제는 이것조차 모두 모니터링 한 것이 아니기 때문에, 함부로 단정지을 수는 없다. CleanLab Package를 통해 Noise로 의심되는 Data를 시각화 해서 확인했는데, 실제 Noise는 그렇게 많지 않았다. 정말 일부의 File만 Labeling의 오류가 있는 느낌이었다. Noise가 심할 경우 CleanLab을 통해서나, 군집화 기법으로 일부 데이터를 덜어내려고 했는데, 그럴 필요까지는 없을 것 같다.

  1. Crop Size 재조정

    오히려, 위 시각화를 통해 새로운 인사이트를 얻었다. 최초에 일부 데이터만으로 Crop의 Size가 224x224면 충분하다고 생각했었지만, Model이 판별하기 어려워하는 Data를 살펴보니 문제가 있었다. 224x224 Size로 Crop할 경우 윗 머리카락이 잘리는 경우가 많았고, 실제로 얼굴이 꽉 찬 Image에 대한 Probability가 낮게 나왔다. 이를 고려하여, Crop Size를 300x256으로 변경했더니 성능이 꽤나 많이 상승했다.

  1. Filp and Rotation

    224x224 Size로 Crop할 때에는 Flip과 Rotation을 적용했을 때 성능이 낮아지는 현상이 있었다. Data의 특성 상 두 Augmentation은 성능 향상에 도움이 될 것이라고 생각했는데, 아니어서 의아했었다. 위에서 시각화를 통해 Crop Size를 재조정 하면서, 이 Augmentation에 대한 재확인이 필요하다고 생각됐고, 실제로 성능 향상으로 이어졌다.

  1. Same Label Mix-up 시도

    Mix-up이 성능 향상에 도움이 된다길래 적용해보려고 했는데, 이게 생각보다 쉽지 않았다. 가장 큰 문제는 Label의 형태다. 현재 Label이 One Hot Vector가 아니라, Class Number로 되어 있는 형태라 이거를 Smoothing 할 수가 없다. 지금 사용하고 있는 CE의 기대값이 Number 형태이다 보니, 여기서부터 변경이 필요한 상태이다.

    차선책의 방법으로 같은 Label에 대해서만 Mix-up을 수행해보려 했다. 이러면 Label에 대해서 처리할 필요가 없다고 생각 했기 때문이다. 이게 효과가 있을지는 사실 의문이다. Label에 대한 Smoothing이 중요했던 것은 아닐까하는 생각도 든다.

    아무튼, 이런 저런 시도를 했는데 결국은 학습까지 시도하지 못했다. 구현은 다음과 같이 했다. Random하게 Train Index 내에서 Same Label인 Image를 불러와서, Mix-up을 수행하는 것이다. 이는 Train 단계에서만 일어나도록 했고, Mix-up의 확률도 지정해줄 필요가 있었다. 위 조건들을 부합하면서 구현을 하다보니 생각보다 까다로웠고, 실제로 학습에서는 동작하지 않았다. 처리 시간이 길어서 그런지, Data Loader의 Worker가 죽거나 Memory Error를 발생시켰다. 그래서 구현되어 있는 Mix-up Code를 이해하고 적용하는 방향으로 전환했다.

추가로 진행 할 사항

  • CE Loss 변경 및 Mix-up 구현 재도전
  • 대분류 별 Model 구조 설계
  • 상위권 캠퍼들 학습정리 확인

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P1] Day 47  (0) 2021.04.11
[P1] Day 46  (0) 2021.04.11
[P1] Saturday 4 April  (0) 2021.04.11
[P1] Day 45  (0) 2021.04.11
[P1] Day 44  (0) 2021.04.11

+ Recent posts