데이터 확인하기
from PIL import Image
import matplotlib.pyplot as plt
img = Image.open(이미지경로)
plt.imshow(img)

데이터 분류하기

- 데이터를 수작업으로 직접 Front와 Side폴더로 약 100장씩 나누었다.
반복문을 사용해 이미지 전처리 및 라벨링하기
import numpy as np
import os
PATH = 'Front, Side폴더가 있는 경로'
def resizin_image(file_path):
img = Image.opne(file_path).convert("L")
imgarr = np.array(img, dtype=np.float32)
imgarr = imgarr/255.0
return imgarr
data = []
for label, folder in enumerate(['Front', 'Side']):
image_path = PATH + '/' + folder
image_list = os.listdir(image_path)
for image in image_list:
data.append([resizeing_image(image_path+'/'+image), label])
DataFrame으로 만들기
import pandas as pd
df = pd.DataFrame(data, columns=['data', 'label']
Train, Test 분리
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(np.array(df.data.tolist()).astype(np.float32), np.array(df.label.tolist()).astype(np.int32), test_size=0.2, shuffle=True)
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
with tf.device('/gpu:0'):
''' # ResNet50 모델을 사용해봤지만, 정확도가 좋지 않았다.
model = ResNet50(
include_top=True,
weights=None,
input_shape=(360,480,1),
pooling=max,
classes=1
)
'''
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(입력할 이미지의 해상도(x, y))),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(16, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(2)
])
model.summary()
모델 컴파일
from tensorflow.keras import optimizers, losses, metrics
model.compile(optimizer=optimizers.Adam(learning_rate=1e-3),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
- 옵티마이저는 Adam을 사용한다. (평균적으로 좋다고 한다.)
- loss는 SparseCategoricalCrossentropy를 사용한다.
- metrics는 accuracy, 정확도로 측정할 것이다.
모델 학습
history = model.fit(
x_train, y_train,
batch_size=10,
epochs=10
학습한 모델 저장
import tensorflow as tf
model.save('저장할 경로')