728x90
The Vehicle Type Classification Project
Vehicle Type을 분류하는 실습을 진행해보겠습니다.
# import the necessary packages
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import AveragePooling2D, GlobalAveragePooling2D, BatchNormalization
#from tensorflow.keras.applications import ResNet50
#from tensorflow.keras.applications import Xception
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import AveragePooling2D
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import cv2
import os
import sys
import tensorflow as tf
import h5py
import numpy as np
import sys
필요 라이브러리 임포트,
구글드라이브 마운트 하기
from google.colab import drive
drive.mount('/content/drive')
경로 셋팅
TYPE='type'
model_type='mobilenetv2'
user='block'
iteration='1-2'
first_time_training=True
PROJECT_PATH= '/content/drive/MyDrive/Colab Notebooks/ml_plus'
HDF5_DATASET_PATH=PROJECT_PATH+'/vehicle_datasets/vehicle-type-dataset-SIZE224-train-dev-test-v2.hdf5'
TARGET_CLASSIFICATION_MODEL=PROJECT_PATH+'/trained-models/'+model_type+'/'+'vehicle-classification-by-'+TYPE+'-'+model_type+'-'+user+'-'+iteration+'.h5'
CHECKPOINT_PATH = PROJECT_PATH+'/checkpoints/'+model_type+'/'+'by-'+TYPE+'-'+model_type+'-'+user+'-'+iteration+'.h5'
LOGFILE_PATH=PROJECT_PATH+'/log/'+model_type+'/'+model_type+'-by-'+TYPE+'-training-log'+user+'-'+iteration+'.csv'
함수 만들기
def load_dataset_from_hdf5_file(hdf_file_path):
hf = h5py.File(hdf_file_path, 'r')
X_train = np.array(hf['trainX'])
y_train = np.array(hf['trainY'])
train_label = np.array(hf['trainLabels'])
X_test = np.array(hf['testX'])
y_test = np.array(hf['testY'])
test_label = np.array(hf['testLabels'])
X_val = np.array(hf['devX'])
y_val = np.array(hf['devY'])
val_label = np.array(hf['devLabels'])
return X_train, y_train, train_label, X_test, y_test, test_label, X_val, y_val, val_label
모델링하기 : 트랜스퍼 러닝 적용
base_model = MobileNetV2(input_shape=(224,224,3),include_top=False)
base_model.trainable = False
head_model = base_model.output
head_model = Flatten()(head_model)
head_model=Dense(128,'relu')(head_model)
head_model=Dropout(0.4)(head_model)
head_model=Dense(64,'relu')(head_model)
head_model=Dense(7,'softmax')(head_model)
model = Model(inputs=base_model.input,outputs = head_model)
# 파이썬 코드로, 디렉토리 만드는 방법
if not os.path.exists(PROJECT_PATH + '/checkpoints/' + model_type + '/') :
os.makedirs(PROJECT_PATH + '/checkpoints/' + model_type + '/')
# checkpoints 디렉토리 만들기
if not os.path.exists(PROJECT_PATH + '/log/' + model_type + '/') :
os.makedirs(PROJECT_PATH + '/log/' + model_type + '/')
# 로그 디렉토리 만들기
from keras.callbacks import ModelCheckpoint
Modelcheckpoint 라이브러리 import
# 1. 가장 좋았을 때의 모델을 저장하라
mcp = ModelCheckpoint(CHECKPOINT_PATH,monitor='val_accuracy',
save_best_only=True,
verbose=1)
# 2. 에포크가 끝날 때마다, 현재는 화면에 표시하는데
# 이 정보를 파일로 저장해서 화면을 안 보더라도 나중에
# 파일을 열어서 확인이 가능하도록 Log를 남기는 방법
from keras.callbacks import CSVLogger
CSVLogger 라이브러리 import
csv_logger=CSVLogger(LOGFILE_PATH,append=True)
컴파일과 학습
model.compile(optimizer=Adam(0.0001),loss='categorical_crossentropy',metrics=['accuracy'])
# 바로 학습하기 전에 이미지 데이터를 증강하고 학습한다
# X_train을 확인해보니 이미0~1사이의 값으로 피처스케일링 되어있으므로
# 데이터증강만 한다.
train_datagen = ImageDataGenerator(rotation_range=10,horizontal_flip=True)
train_generator=train_datagen.flow(X_train,y_train,batch_size=64)
epoch_history = model.fit(train_generator,epochs=40,validation_data=(X_val,y_val),
batch_size=64,
callbacks=[mcp,csv_logger])
val_accuracy가 98퍼센트일 때 저장 그 아래는 더이상 좋아지지 않으니 저장하지 않는다라고 알려주는 것!
구글 드라이브에 저장되어있는 것을 확인할 수 있다.
이 가장 좋은 모델을 불러와서 테스트하는 과정
best_model = tf.keras.models.load_model(CHECKPOINT_PATH) # load_model()를 이용해서 불러온 후 변수로 저장
best_model.evaluate(X_test,y_test)
'인공지능 > 딥러닝' 카테고리의 다른 글
딥러닝 : Time Series 데이터를 처리할 때 사용하는 resample() (0) | 2023.01.03 |
---|---|
딥러닝 : Prophet 라이브러리를 이용한 Time Series 데이터 예측 (0) | 2023.01.02 |
딥러닝 : Fine tuning 파인튜닝 (0) | 2023.01.02 |
딥 러닝 : Transfer Learning ( MobileNetV2 ) (0) | 2023.01.02 |
딥러닝 : 원본 파일을 Train / Test 파일로 분리하여 사용하는 방법과 디렉토리를 만드는 방법 (0) | 2022.12.30 |