ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 부스트캠프 ai tech 2기 4주차 학습 정리 노트
    Boostcamp AI Tech 2기 2021. 8. 27. 23:25

    강의 복습

    3강 Dataset

    Bounding box : 필요한 부분만 잘라서 더욱 정제된 data를 feed한다. 직사각형의 경우 2개의 좌표만 사용하면 된다. 이번 대회의 경우 대부분 중앙에 인물이 배치되어있기 때문에 큰 필요는 없을 것으로 보인다.

    Resize : 계산의 효율을 위해 적당한 크기로 사이즈를 변경한다. 화질이 너무 좋은 경우 학습에 굉장히 많은 시간이 걸릴 수 있기 때문에 적절히 줄이는 것이 좋다.

    Data Augmentation : 주어진 데이터가 가질 수 있는 case, state의 다양성을 키운다.

     - torchvision.transforms : RandomCrop, Flip... Compose함수를 이용해 일괄 적용해보자!

     - Albmentations : transforms보다 빠르고, 다양하다.

    4강 Data Generation

    torchvision.transforms을 사용할 때 사이즈를 키운다면 회전, flip등을 거친 후에 키우는 것이 좋고, 사이즈를 줄인다면 사이즈를 먼저 줄인 후에 회전, flip등의 처리를 해주는 것이 속도 면에서 좋다.

    DataLoader : Dataset을 효율적으로 사용할 수 있도록 관련 기능 추가. Dataset을 다른 것으로 교체해도 문제 없게끔 효율적으로 작업하는 것이 중요하다. batchsize, shuffle, num workers, drop last...

    5강 Model (1) - Model with Pytorch

    Model : an informative representation of an object, person or system.

    Pytorch : Low-level,Pythonic, Flexibility

    nn.Module

     - Pytorch 모델의 모든 레이어는 nn.Module 클래스를 따른다.

     - 모든 nn.Module은 forward() 함수를 가진다 : 내가 정의한 모델의 forward()를 한번만 실행한 것으로 그 모델의 forward에 정의된 모듈 각각의 forward()가 실행된다.

    Parameters : 모델에 정의되어 있는 modules가 가지고 있는 계산에 쓰일 Parameter. 각 모델 파라미터 들은 data, grad, requires_grad 변수 등을 가지고 있다.

    6강 Model (2) - Pretrained Model

    torchvision.models : 너무나도 손쉽게 모델 구조와 PretrainedWeight를 다운로드 할 수 있다.

    feature extraction : backbone은 freeze하고 classifier의 패러미터만 업데이트

    fine tuning : backbone과 classifier의 패러미터를 모두 업데이트. similarity가 적더라도 보통 pretrained = True로 설정하는 것이 좋다.

    7강 Traning & Inference (1) - Loss, Optimizer, Metric

    loss.backward() : 모델의 파라미터의 grad값 업데이트

    Loss

     - Focal Loss : Class Imbalance 문제가 있는 경우, 맞춘 확률이 높은 Class는 조금의 loss를, 맞출 확률이 낮은 Class는 Loss를 훨씬 높게 부여.

     - Label Smoothing Loss : Class target label을 Onehot 표현으로 사용하기 보다는 ex) [0, 1, 0, 0, 0, ...] 조금 Soft 하게 표현해서 일반화 성능을 높이기 위함 ex) [0.025, 0.9, 0.025, 0.025, ...]

    Optimizer

     - StepLR : 특정 Step마다 LR 감소

     - CosineAnnealingLR : cosine 함수 형태처럼 LR을 급격히 변경

     - ReduceLROnPlateau : 더 이상 성능 향상이 없을 때 LR 감소

    9강 Enemble

     - Votiong

     - Cross validation

     - Stratified K-fold Cross validation : Split시에 class 분포를 고려한다.

     - TTA(TestTimeAugmentation)

    10강 Experiment Toolkits & Tips

     - Tensorboard

     - WandB

     - Jupyter Notebook

     - Python IDLE

    과제 수행 과정 및 결과

    수요일까지는 제대로 굴러가는 모델을 만들기 위해 계속해서 고군분투했다. 그러던 중 처음으로 원하는 정도의 숫자가 리더보드에 떴을 때의 기쁨은 말로 표현할 수 없을 정도였다. 이게 왜 안될까, 어디가 문제일까하며 하나 둘씩 뜯어보던 코드들 덕에 나도 모르는 새에 모델 학습의 전반적인 과정이 어떤 흐름인지 이해할 수 있었던 것 같다. 그 이후로도 데이터 전처리 방식이나 loss를 바꿔가며 여러가지 실험을 하는 재미를 느낄 수 있었다.

    피어 세션

    이번 주에는 어떻게 하면 좋은 결과에 다가갈 수 있을지 고민하고 실험해볼 것을 정리하는 시간을 가졌다. 혼자 고민해서는 나올 수 없었던 참신한 아이디어가 정말 많았고, 서로의 코드를 공유하고 팀원들의 코드를 통해 배우는 시간이 정말 유익했다. 우리 팀원들에겐 항상 감사한 마음 뿐이다.

    학습 회고

    드디어 p-stage에 첫발을 내딛었다. 지난 주 이 시간에 파이토치를 어려워하며 고민했던 것과 비교하면 한 주 동안 정말 많은 성장을 이뤄낸 것 같다는 생각에 뿌듯함이 든다. 결국 내가 필요한 부분을 구현해기 위해 노력하는 과정이 가장 빠른 성장의 길이었던 것이다. 지금 당장 구현하고 싶은 기능은 k-fold validation인데, 이것을 구현하는 과정이 기대될 정도로 지금의 배움이 즐겁다.

    그리고 난 주피터 노트북 환경이 익숙해 서버에서도 주로 ipynb파일 하나에서 작업을 진행했는데, 파이썬 IDLE과 같은 방법을 사용해 파일들을 모듈화시켜 이용하는 것이 편하기도 하고 특히 협업에 특화되어있다는 것을 배울 수 있었다. 이번 주말 동안 내 서버 환경을 이 방식으로 모두 바꿀 것이다. 부캠을 접하기 전엔 이렇다할 협업 기회가 없어 이러한 협업을 위한 코딩에 문외한 수준이었는데, 부캠을 통해 협업을 위한 코딩이 무엇인지 하나씩 배워나가 기쁘다. 

    이제 부캠으로 시작한 8월이 끝나간다. 남은 대회 기간 동안에도 많은 것을 시도해보고 또 실패해보며 배우자.

    댓글

Designed by Tistory.