이미지 전처리

xlxlshinee·2021년 10월 28일
0

AI-STUDY

목록 보기
1/2
transform = transforms.Compose([transforms.Resize((228, 228)),
                                    transforms.ToTensor(),
                                    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
  1. resize 228x228로 사이즈 조정.
  2. ToTensor()로 이미지 ndarray를 tensor 형태로 변환.
  3. normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])

이미지 전처리 1)
이미지 픽셀의 평균, 표준편차를 계산해서 정규화.

  • 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지.
  • 딥러닝에서 local minima에 빠질 위험 감소. (학습 속도 향상)

Q. normalize([],[])의 요소에 들어가는 숫자는 무엇일까?

# 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 한다.

A. transform.Normalize([R 평균, G 평균, B 평균], [R 표준편차, G 표준편차, B 표준편차])


찾다 알게 된 사실

정규화와 표준화는 다른 것!

하지만 목적은 같다.

  • 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지.
  • 딥러닝에서 local minima에 빠질 위험 감소. (학습 속도 향상)

Normalization은 데이터 범위를 사용자가 원하는 범위로 제한하는 것.

예를 들어 이미지 데이터 경우, 픽셀 정보를 0~255 값을 가지는데 이를 255로 나누면
0.0 ~ 1.0 사이의 값를 가지게 됨.
이런 행위를 fearture scale을 하는 정규화(Normalization)라고 함.

Standardization은 데이터의 평균과 표준편차를 사용하여 표준정규분포를 도출하는 것

표준화를 하면 optimal solution(최적해)로의 수렴 속도가 빨라짐.

Regulization은 weight를 조정하느데 제약을 거는 기법.

overfitting을 막기 위해 사용함.

profile
늦더라도 차근 차근 앞으로 걷기

0개의 댓글