Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Deep Learning/[Books] 머신러닝, 딥러닝 실전 앱 개발

학습 데이터 확보하기

Kellyyyy 2020. 4. 30. 08:00

나는 사진의 카테고리를 판정하는

머신러닝 프로그램을 만들 것이다.

 

그러기 위해서는,

학습용 데이터로 사진데이터와 그 사진의 카테고리 데이터를 이용해서 

학습을 시켜야 한다.

 

80 Million Tiny Images라는 웹사이트에서 6만장의 이미지를 추출해 레이블을 붙인 데이터셋을 제공한다.

CIFAR-10이라는 데이터 셋이다.

아래 URL에서 CIFAR-10 데이터를 살펴볼 수 있다.

 

//CIFAR-10 dataset
//[URL] https://www.cs.toronto.edu/~kriz/cifar.html

 

 

이미지 크기는 32 * 32 픽셀이며, RGB 형식의 컬러이미지이다.

 

 

 

 

이 데이터셋을 다운받는 방법은 몇 가지가 있는데,

나는 Tensorflow에서 제공하는 keras 모듈을 통해 다운로드 받을 것이다.

keras 자체에 CIFAR-10 데이터를 내려받는 기능이 있다.

 

 

Step1. Anaconda Prompt에서 tensorflow 패키지가 설치된

가상환경 tensorflowproject를 activate한다. (이전 포스트 참고)

 

conda activate tensorflowproject

 

 

 

 

Step2. python 에디터인 jupyter notebook을 실행한다.

 

jupyter notebook

 

jupyter notebook을 실행하면 웹 브라우저가 열리면서 내 컴퓨터에 있는 여러개의 폴더들이 나온다.

여기서 내가 프로젝트를 진행할 폴더를 만든 후 (new > Folder) 새로운 파일을 하나 만든다(new > python3).

 

 

 

Step3. 데이터 다운로드 받는 코드를 작성해보자.

 

from keras.datasets import cifar10
(X_train, y_train), (X_test, y_test) = cifar10.load_data()

 

위와 같이 학습용 데이터와 테스트용 데이터로 나눠서 받을 수 있다.

50000개는 학습용 데이터, 10000개는 테스트용 데이터로 분리되어 다운로드 된다.

 

 

+ 디버깅 포스팅 추가

 

 

Step4. 다운로드 된 데이터를 확인해보기 위해 40개의 이미지를 샘플로 출력해보겠다.

 

import matplotlib.pyplot as plt
from PIL import Image
plt.figure(figsize=(10,10))

labels = ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
for i in range(0,40) :
	im = Image.fromarray(X_train[i])
    plt.subplot(5,8,i+1)
    plt.title(labels[y_train[i][0]])
    plt.tick_params(labelbottom="off", bottom="off")
    plt.tick_params(labelleft="off", left="off")
    plt.imshow(im)

plt.show()

 

 

 

 

이미지 데이터를 바로 출력해보면 다음과 같이 나온다.

한 장이 3차원의 배열로 구성된다는 것을 알 수 있다. (RGB 컬러 이미지 데이터의 특징)

 

 

 

다음은 y_train 데이터이다.

레이블 데이터

y 데이터는 X 데이터의 카테고리 데이터이다.

 

예를 들면 1번 사진은 6번 카테고리 사진이고,

50000번째 사진은 1번 카테고리 사진이다.

 

CIFAR-10 사이트에서 각 숫자가 어떤 카테고리를 의미하는지 찾을 수 있다.

 

CIFAR-10
CIFAR-10 Lable_names

 

사실 정확한 값이 무엇인지 알기 위해서는 batches.meta라는 파일을 열어서 확인해봐야겠지만,

예시를 살펴봤을 때 위의 그림에서 보이는 순서임을 알 수 있었다.

 

lables를 배열형식으로 나타냈다.

labels = ["airplane","automobile","bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]

 

1번 사진은 6번 카테고리이므로 frog이고,

50000번째 사진은 1번 카테고리이므로 automobile 사진임을 알 수 있다.

 

자! 그럼, 성공적으로 데이터를 확보했다.

 

다음 포스팅에서 이 데이터를 Tensorflow에게 학습시키기 위한 적절한 형태로 가공하는 단계인

데이터 전처리를 진행할 것이다.