본문 바로가기

Deep Learning & Machine Learning/Computer Vision

[코드없는 프로그래밍] 딥러닝 이미지 전처리

CIFAR 데이터셋 x Pytorch 

  • ToTensor()
PIL 이미지 또는 ndarray를 텐서로 변환하고 그에 따라 값의 크기를 조정합니다.
이 변환은 torchscript를 지원하지 않습니다.
PIL 이미지가 속하는 경우 [0, 255] 범위의 PIL 이미지 또는 numpy.ndarray(H x W x C)를 [0.0, 1.0] 범위의 모양(C x H x W)의 torch.FloatTensor로 변환합니다. 모드(L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1) 중 하나 또는 numpy.ndarray에 dtype = np.uint8이 있는 경우
다른 경우에는 텐서가 크기 조정 없이 반환됩니다.

출처: https://pytorch.org/vision/main/generated/torchvision.transforms.ToTensor.html
  • Normalize()
  • Neural Network 모델 정의 
    • RGB 채널을 갖는 이미지에 Linear layer를 적용할 때 주의할 사항
      • 3 x 32 x 32의 디멘션을 갖는 이미지가 1차원으로 변환되어야 한다.
      • 즉, 1 x (3 x 32 x 32) = 3,072로 이미지의 전체 픽셀의 개수가 되어야 한다. 
      • x  = x.view(x.size(0)) 
        • x.size의 0은 들어오는 input 데이터의 배치 사이즈에 해당한다.
      • input_size = 32*32*3, hidden_size=128, output_size=10
        • input_size: H x W x channel(RGB)
        • output_size: 데이터셋의 클래스 개수 
  • NN을 training하지 않고 .eval()을 진행한 상태에서는 찍어서 맞출 확률은 약 10%의 정확도가 된다
  • torch.no_grad():
    • 해당 블록 안의 코드를 실행시킬 때는 gradient를 추적할 필요가 없다는 뜻
    • NN을 validation 모드에서 실행시킬 때는 back propagation을 통한 학습이 필요 없기 때문 
  • GPU (mpu, cuda, cpu) 조건문 처리 
  • loss function과 optimizer 초기화
    • loss function은 CrossEntropuLoss()
    • optimizer는 Adam 
  • NN을 훈련시키는 코드를 돌린다. 

 

유튜브 강의 및 코드

https://www.youtube.com/watch?v=uEPive4qHsY&list=PLDV-cCQnUlIaIFHQwuXRRSL833cRAS76M&index=2