본문 바로가기

딥러닝/개인구현 정리

[DeepLearning] 이미지 구분 모델_Pokemon 809 세트_ep.1

320x100

이번시간에는 Kaggle의 데이터셋 중 pokemon image dataset을 활용하여, 이미지를 구분하는 

모델을 생성하도록 하겠습니다.

 

Pokemon Image Dataset | Kaggle

 

Pokemon Image Dataset

Pokemon image dataset

www.kaggle.com

 

데이터는 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 신경망을 활용해서 이미지와 이름을 맞춰보거나

변형시키는 작업을 해보겠습니다.

 

 

728x90