본문 바로가기
DNN with Keras/TensorFlow

[TensorFlow] 기본 분류 (이미지 분류) (1)

by goatlab 2022. 6. 15.
728x90
반응형
SMALL

의류 이미지 분류

 

텐서플로 모델을 만들고 훈련할 수 있는 고수준 API인 tf.keras를 사용한다.

 

# TensorFlow and tf.keras
import tensorflow as tf

# Helper libraries
import numpy as np
import matplotlib.pyplot as plt

print(tf.__version__)

 

패션 MNIST 데이터셋 임포트하기

 

10개의 범주 (category)와 70,000개의 흑백 이미지로 구성된 패션 MNIST 데이터셋을 사용한다. 이미지는 해상도 (28x28 픽셀)가 낮고 다음처럼 개별 옷 품목을 나타낸다.

 

패션-MNIST 샘플 (Zalando, MIT License)

 

패션 MNIST는 컴퓨터 비전 분야의 "Hello, World" 프로그램격인 고전 MNIST 데이터셋을 대신해서 자주 사용된다. MNIST 데이터셋은 손글씨 숫자 (0, 1, 2 등)의 이미지로 이루어져 있다. 여기서 사용하려는 옷 이미지와 동일한 포맷이다.

 

패션 MNIST는 일반적인 MNIST보다 조금 더 어려운 문제이고 다양한 예제를 만들기 위해 선택했다. 두 데이터셋은 비교적 작기 때문에 알고리즘의 작동 여부를 확인하기 위해 사용되곤 한다. 코드를 테스트하고 디버깅하는 용도로 좋다.

 

여기에서 60,000개의 이미지를 사용하여 네트워크를 훈련하고 10,000개의 이미지를 사용하여 네트워크에서 이미지 분류를 학습한 정도를 평가한다. TensorFlow에서 직접 Fashion MNIST에 액세스할 수 있다. TensorFlow에서 직접 Fashion MNIST 데이터를 가져오고 로드한다.

 

fashion_mnist = tf.keras.datasets.fashion_mnist

(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

 

load_data() 함수를 호출하면 네 개의 넘파이 (NumPy) 배열이 반환된다.

 

  • train_images와 train_labels 배열은 모델 학습에 사용되는 훈련 세트
  • test_images와 test_labels 배열은 모델 테스트에 사용되는 테스트 세트

 

이미지는 28x28 크기의 Numpy 배열이고 픽셀 값은 0과 255 사이이다. 레이블 (label)은 0에서 9까지의 정수 배열이다. 이 값은 이미지에 있는 옷의 클래스 (class)를 나타낸다.

 

 

각 이미지는 하나의 레이블에 매핑되어 있다. 데이터셋에 클래스 이름이 들어있지 않기 때문에 나중에 이미지를 출력할 때 사용하기 위해 별도의 변수를 만들어 저장한다.

 

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

 

데이터 탐색

 

모델을 훈련하기 전에 데이터셋 구조를 살펴 본다. 다음 코드는 훈련 세트에 60,000개의 이미지가 있다는 것을 보여준다. 각 이미지는 28x28 픽셀로 표현된다.

 

train_images.shape
(60000, 28, 28)

 

비슷하게 훈련 세트에는 60,000개의 레이블이 있다.

 
len(train_labels)
60000

 

각 레이블은 0과 9사이의 정수이다.

 
train_labels
array([9, 0, 0, ..., 3, 0, 5], dtype=uint8)

 

테스트 세트에는 10,000개의 이미지가 있다. 이 이미지도 28x28 픽셀로 표현된다.

 
test_images.shape
(10000, 28, 28)

 

테스트 세트는 10,000개의 이미지에 대한 레이블을 가지고 있다.

 
len(test_labels)
10000

 

데이터 전처리

 

네트워크를 훈련하기 전에 데이터를 전처리해야 한다. 훈련 세트에 있는 첫 번째 이미지를 보면 픽셀 값의 범위가 0~255 사이라는 것을 알 수 있다.

 
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()

 

신경망 모델에 주입하기 전에 이 값의 범위를 0~1 사이로 조정하겠다. 이렇게 하려면 255로 나누어야 합니다. 훈련 세트와 테스트 세트를 동일한 방식으로 전처리하는 것이 중요하다.

 
train_images = train_images / 255.0

test_images = test_images / 255.0

 

훈련 세트에서 처음 25개 이미지와 그 아래 클래스 이름을 출력한다. 데이터 포맷이 올바른지 확인하고 네트워크 구성과 훈련할 준비를 마친다.

 
plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(class_names[train_labels[i]])
plt.show()

 

https://www.tensorflow.org/tutorials/keras/classification?hl=ko#%ED%8C%A8%EC%85%98_mnist_%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B_%EC%9E%84%ED%8F%AC%ED%8A%B8%ED%95%98%EA%B8%B0 

 

기본 분류: 의류 이미지 분류  |  TensorFlow Core

Google I/O는 끝입니다! TensorFlow 세션 확인하기 세션 보기 기본 분류: 의류 이미지 분류 이 튜토리얼에서는 운동화나 셔츠 같은 옷 이미지를 분류하는 신경망 모델을 훈련합니다. 상세 내용을 모두

www.tensorflow.org

 

728x90
반응형
LIST