(3강) Dataset

💡
데이터 전처리와 일반화에 대해 알아본다.

Pre-processing

Dataset이란, Vanilla Data를 학습할 수 있도록 만든 상태를 의미한다. 이를 위한 모든 과정을 전처리라고 한다. 이렇게 전처리 파이프라인을 구축해두면, 추가적으로 수집하는 데이터를 학습 가능하도록 할 수 있다. 실제 현업에서의 Data는 엄청난 양의 전처리를 필요로 하고, 실제로 업무의 가장 많은 비중을 차지한다. (지금 잘 배워둬야하는 이유이다.)

모델이 데이터를 잘 학습하기 위한 다양한 전처리 기법으로는 Resize, Crop, 밝기 조절 등이 있다.

Generalization

Data는 일반화 되는 것이 중요하다. 특히 Augmentation은 이미지 처리에 매우 중요한 부분을 차지한다. 이는 주어진 데이터가 가질 수 있는 경우와 상태의 다양성을 모델에게 학습시키는 과정이라고 이해할 수 있다. 이는 문제 정의와 도메인에 대한 이해로부터 시작된다.

Data Augmentation과 Problem의 관계

Augmentation을 적용하는 방법으로는, torchvision.transforms 혹은 Albumentations를 참고하는 것이 좋다.

마지막으로, 언제나 적용할 수 있는 '무조건'의 방법은 없다는 것을 명심하자.

매번 실험해보고, 이를 증명하자.


(4강) Data Generation

💡
Data Feeding에 대해 알아본다.

Data Feeding

Model에게 Data를 Feeding 한다는 것은, Model의 상태에 맞게 Data를 잘 전달해야 함을 의미한다. 속도를 높이기 위해 양만 늘리는 식의 접근은 위험할 수 있다.

Model의 성능에 맞게 Data를 전달해줘야, 빠른 학습 및 실험이 가능하다.

또한, Data를 생성하는 과정에도 주목할 필요가 있다.

Transforms의 순서에 따른 속도 차이의 예시

torch.utils.data

Torch 내부에 있는 Dataset과 DataLoader는 전혀 다른 기능을 하는 완전히 다른 Class이다. DataLoader는 Dataset을 효율적으로 사용할 수 있도록 관련 기능을 추가한 Class이다. 재활용성 등을 위해 하는 일을 완전히 구분해 놓은 것이다. 매우 많은 기능을 가지고 있고, 이를 잘 활용하면 Data Feeding에 큰 도움이 될 수 있다.

num_workers에 따른 속도 차이의 예시


Reference

Dataset, DataLoader Tutorials

Albumentation

imgaug

catalyst

PyTorch Custom Dataset Examples


Project

오늘의 목표 및 진척상황

  • Cross Entropy Loss Expect Input 확인 및 개선
  • Labeling 검토 및 함수화
  • Label 별 층화추출 Code 작성
  • Data Loader Return Value 확인 및 개선
  • 학습 시 Score 감소 문제 해결

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

  1. Cross Entropy Loss

    기존에 Label을 One-Hot Vector 형태로 반환했었는데, Cross Entropy Loss은 Int와 같은 Type의 Input을 기대하기 때문에 오류가 발생했음. 이에 따라, Label을 Int Type으로 구성함.

  1. Labeling

    Labeling이 제대로 됐는지 Data 분포와 함께 확인함. 또한, Labeling Code를 함수화해서 재사용성을 높임. Label이 Int Type으로 구성되어서, Stratified K Fold를 사용할 수 있었음. 이를 통해 Label 별 층화추출 Code를 구성함.

  1. Data Loader

    Data Loader가 Data를 가져올 때 shape와 관련된 이슈로 오류가 계속 발생함. 최초에는 이를 해결하기 위해 Dataset return 시 reshape을 수행했음. 문제는, Tensor Type의 return이 예상 외의 값을 가져온다는 것이었음. 이 때문에 학습을 진행해도 Score가 오히려 감소하는 현상이 발생함.

추가로 진행 할 사항

  • Model이 한 개의 Class로만 예측을 수행하고 있는 문제 해결
  • Albumentation 사용 방법 확인하기
  • Colab에서 사용할 수 있도록 Code 구성하기
  • 다양한 실험 시 Option을 간편하게 적용할 수 있도록 Code 구성하기

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

[P1] Day 44  (0) 2021.04.11
[P1] Day 43  (0) 2021.04.11
[P1] Day 41  (0) 2021.03.31
[U] Day 40 - Lightweight V  (0) 2021.03.28
[U] Day 39 - Lightweight IV  (0) 2021.03.28

+ Recent posts