[keras] 색상있는 이미지 분류하기1

2018. 6. 3. 22:13Python-이론/python-인공지능2

[keras] 색상있는 이미지 분류하기



앞선 시간에서 다운 받은 categories101 이미지를 이용하여 사진의 카테고리를 분류 시켜보겠다. 데이터의 카테고리가 101개 카테고리 속에 60개가 넘는 데이터가 있다, 많은 양의 데이터를 사용하기는 부담스러우니깐 몇개의 카테고리 만으로 테스트를 해보겠다. 우선은 이 카테고리의 데이터를 바로 머신러닝에 사용할 수 있는 데이터 형태로 바꾸어 보면서 keras에 쓰인 함수가 무슨의미가 있는지 알아보겠다.


머신러닝용 데이터 만들기



import os, re, glob
import cv2
import numpy as np
from sklearn.model_selection import train_test_split

imagePath = '../images/101'
categories = ["chair", "ant", "airplanes", "barrel", "bass", "crab", "camera", "butterfly", "elephant", "flamingo"] 
nb_classes = len(categories)

image_w = 64
image_h = 64

X = []
Y = []

for idx, cat in enumerate(categories):
    label = [0 for i in range(nb_classes)]
    label[idx] = 1
    image_dir = imagePath+'/'+cat+'/'

    for top, dir, f in os.walk(image_dir):
        for filename in f:
            print(image_dir+filename)
            img = cv2.imread(image_dir+filename)
            img = cv2.resize(img, None, fx=64/img.shape[1], fy=64/img.shape[0])
            X.append(img/256)
            Y.append(label)

X = np.array(X)
Y = np.array(Y)
X_train, X_test, Y_train, Y_test = train_test_split(X,Y)
xy = (X_train, X_test, Y_train, Y_test)

np.save("./obj.npy", xy)

3: categories = ["chair", "ant", "airplanes", "barrel", "bass", "crab", "camera", "butterfly", "elephant", "flamingo"]  사용할 카테고리 설정

25: img = cv2.resize(img, None, fx=64/img.shape[1], fy=64/img.shape[0]) 원본이미지는 그대로 사용하면 메모리적으로 손해니 64*64사이즈로 줄인다.


26: X.append(img/256) 각 픽셀은 0에서 255까지 표현할 수 있으므로 256으로 나누어 준다.


31: X_train, X_test, Y_train, Y_test = train_test_split(X,Y) X,Y데이터를 자동으로 머신러닝에서 사용할 수 있도록 자동으로 훈련데이터와 테스트 데이터를 구분시켜준다. 


path는 각자의 환경에 맞게 바꾸어 주시면 됩니다.