transform = transforms.Compose([transforms.Resize((228, 228)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
이미지 전처리 1)
이미지 픽셀의 평균, 표준편차를 계산해서 정규화.
# calculate the mean and standard deviation of train_ds
import numpy as np
meanRGB = [np.mean(x.numpy(), axis=(1,2)) for x,_ in train_ds]
stdRGB = [np.std(x.numpy(), axis=(1,2)) for x,_ in train_ds]
meanR = np.mean([m[0] for m in meanRGB])
meanG = np.mean([m[1] for m in meanRGB])
meanB = np.mean([m[2] for m in meanRGB])
stdR = np.mean([s[0] for s in stdRGB])
stdG = np.mean([s[1] for s in stdRGB])
stdB = np.mean([s[2] for s in stdRGB])
print(meanR, meanG, meanB)
print(stdR, stdG, stdB)
위의 코드는 분석할 코드와 상관없는 예시 코드이다.
0.4467106 0.43980986 0.40664646
0.22414584 0.22148906 0.22389975
결과값은 이렇게 나왔다 한다.
train_transformer = transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.RandomVerticalFlip(),
transforms.ToTensor(),
transforms.Normalize([meanR, meanG, meanB], [stdR, stdG, stdB])
])
train_ds.transform = train_transformer
이미지 데이터셋의 평균과 표준 편차를 계산하여 나온 결과값이다.
RGB 값을 각각의 평균, 표준편차를 산출해 각 RGB 값을 통일해 normalization 한다.
하지만 목적은 같다.
예를 들어 이미지 데이터 경우, 픽셀 정보를 0~255 값을 가지는데 이를 255로 나누면
0.0 ~ 1.0 사이의 값를 가지게 됨.
이런 행위를 fearture scale을 하는 정규화(Normalization)라고 함.
표준화를 하면 optimal solution(최적해)로의 수렴 속도가 빨라짐.
overfitting을 막기 위해 사용함.