BoostCamp

2021.08.30 - [Week 5] Day 1. 대회 2주차 시작

배기니어 2021. 8. 31. 02:32

1. 대회 진행 상황

 1.1. 주말에 train 코드 구현해서 학습 성공

  • train set과 validation set을 랜덤하게 8:2 비율로 나누어 학습

  • augmentation은 resize만 적용

  • F1 score : 0.675, Accuracy : 75.683

 

 1.2. 랜덤 스플릿 적용

  • data가 가장 적은 class의 데이터는 83개

  • 모든 class에서 83개씩 뽑아 1494개의 data를 가진 train set만들어 학습

  • 성능 하락

  • F1 score : 0.671, Accuracy : 72.397

 

 1.3. torchvision.transforms 적용

  • train set의 data가 적어 여러 가지의 transform을 적용하면서 epoch 학습

  • epoch 바깥에 transform 적용하여 매번 다른 transform이 적용된 dataset으로 학습

  • torchvision library의 transform package에서 RandomRotation, RandomGaussianBlur, RandomHorizontalFlip 2회씩 적용하여 6개의 train set 생성

  • 그러나 아무 일도 일어나지 않았다!

  • F1 score : 0.641, Accuracy : 71.270

 

 1.4. albumentations 적용

  • albumentation 함수 실행하며 적당한 augmentation 기법 선택

 

2. 피어세션

 • torchvision.transforms보다 albumentations 속도가 빠르다.

 • albumentations.OneOf : 여러 augmentation 중 하나 적용

 • config.json으로 hyperparameter 관리

 • wandb 사용하여 결과 정리

 • label smoothing loss 사용한 결과 안정적이지 않은 graph

 • albumentation과 cutmix 적용 후 성능 하락

 • k-fold 적용 방법 고민

 • model darknet53으로 수정하는 방안

 • kaggle mask datset 사용 여부 : 불가능(non-commercial) 

 

3. 오피스 아워

 3.0. 내가 고용주라면?

  - 연구, 서비스 등 고용주 입장에서 어떤 질문을 던질 지 생각해보기

  - 면접 때 물어볼 것 같다는 생각을 가지고 공부

 

 3.1. Solution

  • define problem

   - 롯데 제품 image classification

   - image -> 상품 이름(class)

   - 좋지 않은 validation score

   - class 별 data가 적은 문제

   - 서로 다른 class에 속하지만 유사한 모양

  • story line

   - 같은 캔 음료이지만 다른 것을 구별할 수 있도록 학습하고 싶다

   - 우선 비슷한 모양끼리 분류 : 캔, 페트, ...

   - 비슷한 모양의 제품끼리 label smoothing : 다른 제품일 수 있는 가능성 만들기

   - CNN + label smoothing -> validation score : 0.99, learder board score 소폭 상승

   - 다시 EDA, 문제 해석

   - test set의 data가 다르거나 validation score의 문제로 판단

   - pair 기반 접근 : 두 image의 제품이 동일한지 판단

   - CNN 통과하여 feature 추출하고, train set에서 유사한 것 return

   - image retrieval : image 간 유사도 측정 (SOTA : arcface loss)

   - GeM pooling layer : weight 적용한 pooling 방법

  • Method

   - train set -> CNN -> train feature vector 생성

   - test set -> CNN -> test feature vector 생성

   - train feature vector들과 test feature vector 간의 cosine similarity 측정

   - 가장 유사한 제품 return

   - Backbone : NFNet, EfficientNet

   - Data augmentation : image compression, cutout, flip, shift scale rotate

   - Learning rate scheduler : global warm-up scheduling + cosine annealing

   - stratified k-fold (5 fold) ensemble

   - TTA (Test Time Augmentation)

 


주말에도 꽤 오랜 시간을 투자해서 모델학습에 성공했다.

학습을 처음으로 돌려보는 것이라 에러가 어디서 왜 발생하는지 찾기가 너무 어려워서 오래 걸렸다.

결론은 batch size로 인한 gpu oom 문제였다.

다행히 강의를 잘 들어서 gpu monitoring까지 하는 것은 했는데 어디서 메모리가 초과되는지 찾는데 한참 걸렸다.

이래서 잘 알고 프로그래밍을 했어야 했는데 많이 아쉽다.

다음엔 좀 더 나아지겠지...