2021.08.24 - [Week 4] Day 2. 대회 진행 중
벌써 많은 캠퍼분들이 리더보드에 제출하고 계신다.
우리 팀 분들도 다 잘하고 계신 것 같다.
나는 아직 프로그래밍 스킬이나 사용법에 익숙하지 않아 더 연습이 필요하다.
그래서 수업 진도에 맞춰 따라가고 있다.
조급해하지 않는게 집중에도 좋고 정신적으로 안정이 될 것 같다.
공부한 내용
1. Dataset
1.1. Dataset
1.1.1 Dataset
• 데이터를 하나씩 내보낼 수 있도록 기능 구현
• Vanilla data는 문제 해결에 바로 사용 불가
• Overview에서 정의한 문제를 바탕으로 데이터를 일반화하는 작업 필요
• 모델은 Dataset을 바탕으로 학습
• EDA를 통해 데이터를 이해하는 것이 먼저
• Data Analysis를 바탕으로 Data Pocessing에서 적용할 수 있는 방법 모색
• ML pipeline에서 Data Processing 과정에 해당
• Data의 type, 형태, domain 등에 따라 Dataset 만드는 방식이 다름
1.1.2. Pre-processing
• Dataset 처리 과정
• Model 만들기 전 전처리 과정
• Data science의 많은 비중 차지
• 많은 시간 소요
• 어떤 domain에서는 특정 전처리 방법이 중요한 경우가 있음
• 반드시 전처리를 해야 성능이 좋아지는 것은 아님
• 전처리 진행 후 실험을 통해 성능 테스트
1.1.3. Data Science
• 어떤 data라도 문제를 잘 정의하고 해결하는 것이 목표
• 현실은 data에 많은 문제가 있는 경우가 대부분
• Pre-processing에 사용할 함수 이해 필요
• 좋은 data가 좋은 성능을 낼 확률 높음
1.1.4. Bounding Box
• 사진은 특정 대상만 명확하게 찍을 수 없는 경우가 대부분
• 원하는 object를 명확하게 표시하기 위한 metadata
• object를 제외한 나머지 픽셀은 noise
• bounding box를 이용해서 data를 처리하면 score 향상에 도움
1.1.5. Resize
• 이미지의 해상도가 높으면 계산량이 증가하므로 학습 어려움
• resizing은 작업의 효율화
• 학습에 최적인 size를 찾는 것이 효율적
1.2. Generalization
1.2.1. Bias & Variance
• Bias
- High Bias = Underfitting
- model이 data를 fitting하지 못해서 일부 data에 편향된 결과 발생
- data를 너무 고려하지 않은 경우
- data를 적게 사용한 경우
• Variance
- High Variance = Overfitting
- 학습이 너무 많이 진행되어 model의 복잡도 증가
- noise, 이상값 등 너무 많은 data를 fitting하는 경향
1.2.2. Train & Validation
• Validation
- 학습이 제대로 되었는지 검증하기 위한 dataset
- 학습에 이미 사용된 train set을 이용하여 검증하면 제대로 된 검증 불가능
- 학습에 이용되지 않은 분포인 validation set을 이용해 모델의 일반화 검증
1.2.3. Data Augmentation
• data를 일반화하는 과정
• data 적용 대상을 통해 data에 발생할 수 있는 noise 추측 가능
• domain에서 발생할 수 있는 모든 경우를 다 담은 dataset을 사용한다면 test set에 noise가 있더라도 좋은 결과를 산출할 수 있다는 아이디어
• 다양한 이미지 학습 효과
• torchvision.transforms
• Albumentations
2. Data Generation
2.1. Data Generation
• model이 학습을 효율적으로 할 수 있도록 dataset에서 data를 generation하는 방법
• 빠른 training과 inference가 목표
2.2. Data Feeding
• Feed : model의 성능을 알고 data를 넘기는 것
• 효율을 높이기 위해 model의 처리량만큼 data를 generation하는 것이 중요
• Generator의 성능, model 성능 benchmarking 후 확인
• Dataset의 전처리 과정에 따른 생성 능력 차이
2.3. torch.utils.data
• Datasets
- 기본 구조 : __init__, __getitem__, __len__
• DataLoader
- batch와 연관된 option : shuffle, sampler, collate_fn
- num_workers : 테스트하며 적정 값 찾아야 함
• Dataset과 DataLoader는 분리
- 코드 재사용성 측면에서 분리하는 것이 좋음
- Dataset과 DataLoader는 하는 일이 다름
- DataLoader에 Dataset만 변경하여 재사용 가능
3. Special Mission
3.1. EDA
• 성별 비교
- 여성 1658, 남성 1042
- 여성이 남성의 약 1.6배
• 나이 비교
- 30대 이하와 30대 이상 60대 미만의 수가 많다.
- 60대 이상의 수가 매우 적다.
• 나이 & 성별 비교
- 60대 이상의 데이터가 적은 것을 위에서 본 것보다 더 확실하게 알 수 있다.
• 마스크를 제외하면 눈과 목 정도가 노출되는데 나이를 어떻게 학습할 것인가?
• validation set에서 어떤 데이터를 틀리게 예측했는지 분석하면 성능 향상을 위한 아이디어가 떠오르지 않을까?
3.2. Labeling
• train data의 label을 만들기 위한 class 생성
• input : train.csv
• output : 18900개의 데이터 생성
4. 피어세션
• Filezila와 Xshell 사용 방법 공유
• 모델 학습 속도 개선 방안
- validation 분리 시 dataframe 상태에서 분리하는 것보다 tensor 상태에서 분리하는 것이 빠름
- batch size 늘려 epoch 당 학습 속도 단축
• 60대 이상 데이터가 부족
• miss labeling 문제
• accuracy vs. f1 score
- accuracy 높아도 f1이 낮은 경우 있다.
- f1을 loss로 사용하는 방법 고민
• Data Aumentation
- 마스크 쓴 데이터 많아 데이터 불균형 문제 발생 가능
- normal, incorrect 이미지를 늘리는 방법 고민
- SMOTE 적용 방법 고민
• 일반화 중요성
- validation set으로만 측정하는 것에 한계가 있어 보인다.
- to(device) 사용 : model, image_batch, label_batch
• loss 계산 방법
- label을 one-hot encoding 적용하여 loss 계산
• Pytorch image augmentation 기법
http://incredible.ai/pytorch/2020/04/25/Pytorch-Image-Augmentation/
• 도메인 선택 결과 공유
Dataset의 어떤 정보까지 게시가 가능하고 불가능한지 잘 모르겠어서 자세한 내용 적기가 고민된다.
시각화 강의를 빨리 마저 들어서 분석 결과를 더 잘 표현할 수 있도록 해야겠다.