이번시간에는 Kaggle의 데이터셋 중 pokemon image dataset을 활용하여, 이미지를 구분하는
모델을 생성하도록 하겠습니다.
Pokemon Image Dataset | Kaggle
데이터는 809종의 포켓몬 이름과 그에 따른 속성이 있는 csv파일과
포켓몬 이미지 폴더로 나누어져 있습니다.
이번 알고리즘의 경우, 속성이나 범주형 데이터는 제외하려 했기 때문에,
csv파일은 없이, 이미지 만으로 진행하고자 합니다.
물론 딥러닝 모델은 지난번과 같이, 파이토치를 사용합니다.
필요한 패키지를 가져오는 것부터 시작합니다.
# pytorch 라이브러리
import torch
import torchvision
import torch.nn.functional as F
from torch.utils import data
from torch import nn, optim
from torchvision import transforms, datasets
from torch.utils.data import Dataset, DataLoader
from torchvision import models
from torchvision import utils
from torchvision.utils import save_image
from torchvision.datasets import ImageFolder
from transformers import PreTrainedTokenizerFast
# 시각화 관련
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
from matplotlib import cm
from tqdm.notebook import tqdm
# arange 기본
import numpy as np
import pandas as pd
# 그외
import os
import random
import tqdm
거의 통상적으로 gpu로 사용합니다.
USE_CUDA = torch.cuda.is_available()
device= torch.device("cuda" if USE_CUDA else "cpu")
print(f"Using Device : {device}")
필자는 캐글의 개인 계정에서 json 파일을 다운로드 받은 후 직접 colab내부 폴더로
다운로드 받아서 데이터를 설치하는 방법을 사용했습니다.
from google.colab import files
!pip install -q kaggle #kaggle 설치
files.upload() #kaggle API file upload
!mkdir ~/.kaggle # kaggle 디렉토리 생성 / mkdir : make directory - 폴더 생성 (~)
!cp kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
# ---------
# https://www.kaggle.com/datasets/vishalsubbiah/pokemon-images-and-types
!kaggle datasets download -d vishalsubbiah/pokemon-images-and-types
실행시키면 코랩상에서 파일을 업로드 할 수 있는 창이 뜨는 것을 볼 수 있습니다.
캐글에서 경로는 로그인 후 → your profile → Account → 하단으로 내리다보면
API에서 Create New API Token을 발급받으면 자신만의 json 파일을 받을 수 있습니다.
이 kaggle.json 파일을 입력, dataset 경로에 필요한 링크를 넣으면 데이터를
자동으로 다운로드합니다.
'/content/pokemon-images-and-types.zip' 파일이 압축파일 형식으로
다운로드 되는 것을 볼 수 있습니다.
!unzip /content/pokemon-images-and-types.zip
압축된 파일은 !unzip을 통해 풀어주겠습니다.
그렇다면 이제 images 폴더에 이미지들이 쌓이게 됩니다.
이미지는 torchvision의 ImageFolder를 통해 불러와줍니다.
pokemon_imgs = ImageFolder('/content/images/',
transform = transforms.Compose([
transforms.RandomCrop(50),
transforms.ToTensor()]))
train_loader = DataLoader(pokemon_imgs, batch_size = 1, shuffle = True)
아래 코드는 이미지를 cut하면서 랜덤하게 바꿔주는 코드입니다.
배치 사이즈를 바꾸면 1개~그림 전체까지 표시가 가능합니다.
dataiter = iter(train_loader)
images, labels = next(dataiter)
img = utils.make_grid(images, padding=0)
npimg = img.numpy()
print(npimg.shape)
plt.figure(figsize=(14, 10))
plt.imshow(np.transpose(npimg,(1,2,0)))
plt.show()
(3, 50, 50)
이렇게 이미지를 뽑는 것까지 진행해보고,
다음 시간에는 autoencoder나 CNN 신경망을 활용해서 이미지와 이름을 맞춰보거나
변형시키는 작업을 해보겠습니다.
'딥러닝 > 개인구현 정리' 카테고리의 다른 글
[DeepLearning] GAN 모델 활용_CelebA얼굴 이미지 구분_1 (0) | 2023.02.01 |
---|---|
[DeepLearning] 이미지 구분 모델_Pokemon 809 세트_ep.2 (0) | 2023.01.31 |
[이미지 처리] 타코와 브리또의 이미지 구분 모델 (0) | 2023.01.24 |
[자연어 처리 학습] 셰익스피어 비극 대본집_중세말투 학습_2 (0) | 2023.01.23 |
[자연어 처리 학습] 셰익스피어 비극 대본집_중세말투 학습_1 (0) | 2023.01.21 |