본문 바로가기
Boostcamp AI Tech/[week 1-5] LEVEL 1

[Week 4 - Day 2] Pstage 이미지 분류 - Data Generation

by newnu 2021. 8. 24.
반응형

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]

(점프 투 파이썬) - 하위 디렉토리 검색하기

 

06-6 하위 디렉터리 검색하기

특정 디렉터리부터 시작해서 그 하위 모든 파일 중 파이썬 파일(`*.py`)만 출력해 주는 프로그램을 만들려면 어떻게 해야 할까? **1.** 다음과 같이 sub_dir_ ...

wikidocs.net

 

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))
반응형