Pytorch_Study/이미지 데이터셋 준비.ipynb at master · stonegyoung/Pytorch_Study
Pytorch 공부. Contribute to stonegyoung/Pytorch_Study development by creating an account on GitHub.
github.com
파이토치를 사용해 CNN 모델 학습을 위한 이미지 데이터로 만들어보겠습니다.
1. 데이터 준비
2. 데이터셋 객체 생성
3. 전처리 (transform 사용)
4. 파이토치가 이미지를 불러올 수 있는 형태로 만들기(DataLoader 사용. 데이터 로더가 배치 단위로 쪼개고, 전처리도 적용)
5. 모델 결정 및 구현
MNIST 데이터셋으로 이미지 데이터 처리를 해보겠습니다.
필요 라이브러리 임포트
import torch
import numpy as np
import torch.nn as nn # 신경망 모델 정의
import torch.nn.functional as F # 신경망에서 사용하는 함수
from torch.optim import Adam # 최적화 함수
import torchvision.transforms as transforms # 이미지 전처리 및 변환
from torchvision.datasets import MNIST # 데이터셋
from torch.utils.data import DataLoader # 데이터로더
import matplotlib.pyplot as plt # 시각화
데이터 전처리
torchvision의 transforms를 사용하여 이미지 데이터 전처리/증강을 해줍니다.
2024.12.28 - [Pytorch] - [파이토치] 이미지 데이터 전처리/증강
[파이토치] 이미지 데이터 전처리/증강
데이터 전처리/증강torchvision의 transforms를 사용이미지 데이터 전처리데이터 다양성을 높이기 위해 증강 https://github.com/stonegyoung/Pytorch_Study/blob/master/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%A0%84%EC%B2%98%EB%A6%AC.ipy
dogfoot1.tistory.com
import torchvision.transforms as transforms
data_transform = transforms.Compose([
transforms.ToTensor(), # 텐서로 바꿔라
transforms.Resize(32), # 32x32 사이즈로 변환
transforms.Normalize((0.5), (1.0)) # 평균이 0.5고, 표준편차가 1.0인 이미지로 변환
])
데이터셋 객체 생성
torchvision.datasets의 MNIST 함수를 사용하여
데이터 다운 + 전처리 적용를 한 번에 한다
from torchvision.datasets import MNIST # 데이터셋
# train, test 이미지 데이터셋 필요
# 불러오면서 이미지 분리도 함, 적용할 전처리도 지정 가능
train_data = MNIST('./', train=True, transform=data_transform, download=True) # 불러올 경로, 사용할 transform, 다운로드 할 건지
test_data = MNIST('./', train=False, transform=data_transform, download=True) # 불러올 경로, 사용할 transform, 다운로드 할 건지
데이터 확인
train_data
test_data
안의 데이터 살펴보기
.data, .targets 사용
train_data.data
train_data.targets
shape 확인
전처리는 적용 안됨
+
이미지 데이터 shape 형식 (batch, channel, height, width)
현재 train_data의 shape (batch, height, width)
흑백이어서 채널이 추가되지 않음
채널 추가
차원 변환
.unsqueeze(dim=) 사용
x_train = train_data.data.unsqueeze(dim=1)
x_train.shape
하나의 이미지 데이터만 확인
# 60000개 중 첫 번째 것
# (channel, h, w)
x_train.data[0].shape
배열이 아닌 이미지로 확인하기
tensor 이미지 한 개 배열: (channel, height, width)
numpy 이미지 한 개 배열: (height, width, channel)
이미지 시각화 시 tensor -> numpy로 바꿔주야 한다
1. tensor -> numpy
.numpy() 사용
2. 차원 변경
.transpose() 사용
import matplotlib.pyplot as plt
def imgshow(tensor_array, cmap=None):
# tensor -> numpy
numpy_array = tensor_array.numpy()
# 차원 변환 (channel, h, w) -> (h, w, channel)
num_img = numpy_array.transpose(1,2,0) # (0, 1, 2) -> (1, 2, 0)
plt.axis('off') # 눈금 제거
plt.imshow(num_img, cmap=cmap)
정답 데이터 보기
# 답 확인
train_data.targets[0].item() # 5
파이토치가 이미지를 불러올 수 있는 형태로 만들기(DataLoader)
# 데이터 불러오기
# 한 번에 다 학습시키지 못하니까 배치 단위로 쪼개서 한다: DataLoader
from torch.utils.data import DataLoader
# 32개 이미지씩 한 번에
# 배치를 많이 넣으면 한꺼번에 학습 많이 돼서 속도는 빠르지만 메모리는 많이 먹음 -> 본인 메모리카드가 버틸 수 있을 때까지
train_loader = DataLoader(train_data, batch_size=32, shuffle=True)
test_loader = DataLoader(test_data, batch_size=32)
DataLoader 안의 데이터 살펴보기
batch size 확인
train_loader.batch_size
배치 단위로 하나씩 불러오기
next(iter()) 사용 -> [데이터, 타겟] 으로 되어 있음
# 첫 번째 32개 가져오기 : [데이터, 타겟] 이렇게 되어있음
next(iter(train_loader))
# 데이터와 타겟
data, target = next(iter(train_loader))
전처리 전(train_data)와 전처리 후(train_loader) shape 확인
# 전처리 전, 전처리 후
x_train.data[0].shape, data[0].shape
'Pytorch' 카테고리의 다른 글
[파이토치] CNN 모델 학습, 평가, 추론 (0) | 2025.01.06 |
---|---|
[파이토치] CNN Lenet5 구현 (1) | 2025.01.04 |
[파이토치] 이미지 데이터 전처리/증강 (1) | 2024.12.28 |
[파이토치] CNN (0) | 2024.12.26 |
[파이토치] iris 데이터를 위한 신경망 만들어보기 (0) | 2024.12.24 |