1. 강의
Pre-processing
- Resize( 계산의 효율)
- Filter, crop,...
Generalization
Bias : 얼마나 target에서 떨어져 있는지
- High Bias : underfitting
Variance : 얼마나 분산되어 있는지
- High Variance : overfitting
Data Augmentation
- torchvision.transforms 함수 사용
- albumentations
torch.utils.data
Datasets
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self):
pass
def __getitem__(self,index):
return None
def __len__(self):
return None
torch.utils.data의 Dataset 라이브러리 상속
__init__ : MyDataset 클래스가 처음 선언되었을 때 호출
__getitem__ : MyDataset의 데이터 중 index 위치의 아이템 리턴
__len__ : MyDataset 아이템의 전체 길이
DataLoader
Dataset을 효율적으로 사용할 수 있도록 관련 기능 추가
train_loadertorch.utils.data.DataLoader(train_set,
batch_size = batch_size,
num_workers = num_workers,
drop_last = True,)
-> (Batch, Channel, Height, Width)
drop_last : batch_size 나누고 남는 데이터 버리기
2.실습
1. Image Statistics
- 이미지 불러오기, 데이터셋의 RGB 평균, 표준편차 계산
glob() : 인자로 받은 패턴과 이름이 일치하는 모든 파일과 디렉토리의 리스트 반환
from glob import glob
glob('*.jpg') # 현재 디렉토리의 jpg 파일
#['mask1.jpg','mask2.jpg']
glob(r'C:\U*') # C:\에서 이름이 U로 시작하는 디렉토리나 파일 찾기
#['C:\\Users','C:\\usr']
os.listdir(dirname) : 해당 디렉토리에 있는 파일들의 리스트
os.path.join(dirname,filename) : 파일의 전체 경로를 포함한 파일 이름
os.path.spiltext(full_filename) : 파일의 확장자만 따로 분리
import os
filenames = os.list(dirname)
for filename in filenames:
full_filename = os.path.join(dirname,filename)
ext = os.path.splitext(full_filename)[-1]
2. Dataset
- Augmentation, Define Dataset
* GaussianNoise : 이미지 압축, 전송 등의 과정에서 일어나는 정규분포를 따르는 오차값
Albumentations
numpy 형식으로 이미지를 받아 데이터 변형
opencv기반 빠르고 다양한 augmentation 방법 제공
import albumentations as A
transform = A.Compose([
A.RandomCrop(width=256, height=256),
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
])
getattr(object,name) : object에 존재하는 속성의 값을 가져온다
class GenderLabels:
male = 0
female = 1
id, gender,race,age = profile.split("_")
gender_label = getattr(GenderLabels, gender)
# gender가 'male' 이면 gender_label 값은 0
# gender가 'female' 이면 gender_label 값은 1
torch.utils.data.random_split(dataset,lengths,generator=<torch._C.Generator object>)
data.randomsplit(dataset,[train개수, val 개수])
import torch.utils.data as data
dataset = MaskBaseDataset(
img_dir=img_dir
)
train_dataset, val_dataset = data.random_split(dataset, [n_train, n_val])
3. DataLoader : 여러 이미지를 batch_size 만큼 묶어 전달
train_loader = data.DataLoader(
train_dataset,
batch_size=12,
num_workers=4,
shuffle=True
)
4. Visualize Processed Data
- DataLoader를 이용하여 데이터 전처리 시각화하여 확인
images, labels = next(iter(train_loader))
'Boostcamp AI Tech > [week 1-5] LEVEL 1' 카테고리의 다른 글
[Week 4 - Day 4] Pstage 이미지 분류 - Training & Infernece (0) | 2021.08.27 |
---|---|
[Week 4 - Day 3] Pstage 이미지 분류 - Model (0) | 2021.08.25 |
[Week 4 - Day 1] Pstage 이미지 분류 - EDA (0) | 2021.08.24 |
[Week 3 - Day 4 ] Pytorch (0) | 2021.08.20 |
[Week 3 - Day 3 ] Pytorch (0) | 2021.08.20 |