국문과 유목민

[일일 리포트] Day 27 (Level1_PStage_1) 본문

IT 견문록/2022_부스트캠프 AITech 3기(100일)

[일일 리포트] Day 27 (Level1_PStage_1)

논곰 2022. 2. 25. 20:11

해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.

▶ Today I Learned (핵심 요약 정리)

구현해야 하는 Task

오늘부터 P-Stage를 제대로 해보고자 모델을 돌려보면서 아래의 Taske들을 할 필요가 있다는 생각이 들었다.

  • 최적의 Model 찾기: 모델을 학습함에 있어서 현 Task에서 가장 잘 맞는 모델을 선정할 필요가 있음
  • Data Augmentation 최적의 방법 찾기: Data 전처리 작업이 더 맞다고 할 수 있다. DataLoader에 올리기 전 Data의 Overfitting을 방지하기 위한 Image Transform 최적의 방법 찾기
  • 새로운 데이터 추가 생성 방법: 데이터 Imbalance 문제를 해결하기 위해 Data Augmentation할 필요가 있음
  • 데이터 Leakage 현상 해결: 현재 데이터셋이 가지는 문제점을 해결하기 위해 파일별로 이미지의 입력이 들어가도록 설정
  • MLFlow 구현: 하이퍼 파라미터 튜닝을 효율적으로 하기 위해 MLFlow를 도입하면 좋을 것 같다.

pth, pt의 차이

파이토치를 구현하다보면, 모델을 저장할 때 어떤 코드에서는 'pth'로, 어떤 코드에서는 'pt'로 저장하는 것을 볼 수 있다. 그래서 두 형식의 차이점에 대해서 찾아봤는데 크게 정리된 부분을 찾을 수 없었던 것 같다. 보통은 pth를 더 많이 사용하는 것 같다.

 해당 부분을 검색하며 TensorFlow에서는 '.ckpt'형식을 사용하고, Pytorch에서는 'pt'나 'pth'를 사용한다는 것을 찾았다. 딱히 pt와 pth를 구분짓지 않고 사용하는 것으로 보이고, 그냥 Tensorflow와 구분을 주려는 느낌인 것 같다.

EarlyStopping  

모델을 돌리면서 Epcoch를 아무리 크게 줘도 어느정도 학습이 진행되다가 꽤 오랜 시간동안 개선이 되지 않는 경우가 많았다. 따라서 Overfitting을 방지하고, 실험의 효율을 위해 EarlyStopping을 구현했다. 다음 블로그를 통해 구현하는데 도움을 받았다. 우리의 Baseline코드의 경우 별도로 best accuracy의 모델을 저장하는 부분이 있기 때문에 해당 라이브러리에서 모델을 save하는 부분을 주석처리했다.

 

pytorch에서 EarlyStop 이용하기

Early Stopping Example 출처 - Early Stopping for PyTorch by @Bjarten(github) 설명과 주석을 일부 한글로 번역하였습니다. 원저자의 'pytorchtools.py'를 직접 페이지에서 다운로드 가능합니다. 이 노트북에서..

quokkas.tistory.com

▶ Review (생각)

 어제까지는 P-Stage를 위한 준비로 파트를 어느정도 나누고, 환경을 세팅하는 시간이었다면, 오늘은 본격적으로 Competition에 들어가는 시간이었다. 앞으로 해야할 Task들을 정리하고, 모델을 import해 와서 실험을 진행했다. 우선 Pretrained된 모델을 import해와서 모델을 만들어봤다.

 우선 Efficientnet-b3을 활용해 HyperParemeter를 바꾸지 않고, 학습 후 제출했을 때 F1Score가 60정도로 나와서 우리의 Task에 맞게 하이퍼 파라미터 등을 찾아서 학습을 진행했다. 다음 모델로 Efficientnet-b2를 사용했는데, EfficientNet은 Size의 영향을 받는다는 부분을 봤었기 때문에 우리의 Task에 맞는 모델을 선정하고자 했다. 그리고 image의 size를 증가시키고 Optimizer나 Learning_rate도 바꾸고 꽤 많은 부분을 건드렸다. Train 시에는 높은 train/valid accuracy를 보여줬지만 실제 제출했을 때는 F1-Score가 훨씬 안 좋게 나오는 것을 확인했다. 하지만 너무 많은 부분을 한꺼번에 바꿔서 어디서 문제가 발생했는지 찾지 못했다...

 앞으로 실험을 할 때는 한 번에 많은 것을 하려고 하지말고, 실험 결과가 Tracking될 수 있게 비슷한 부분끼리만 묶어서 학습을 진행해봐야겠다. 

 

Comments