import numpy as np
import tensorflow as tf
from keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
import datetime
from keras.models import Model,load_model
import os
import cv2
from keras.applications.efficientnet import EfficientNetB3
import shutil

def createFolder(directory):
    try:
        if not os.path.exists(directory):
            os.makedirs(directory)
    except OSError:
        print ('Error: Creating directory. ' +  directory)

########################################## 경로 지정 & Parameter 설정 ##########################################
test_path = r'D:\ADC_POC\Training_Dataset_ADC_TEST'
SAVEPATH = r"D:\ADC_POC\Training_Dataset_ADC_RESULT"
clist = os.listdir(test_path)      ## class list
weight_save_path = r'D:\ADC_POC\Training_Dataset_ADC_RESULT'
weight_name = 'weight'
weight_monitor = 'val_acc'    ## 'val_loss' or 'val_acc' or 'acc' or 'loss' 중 선택
img_size = (100,100)
batch_size = 32
################################################################################################################

Data Load ### -> Train 폴더와 Test 폴더가 같은 Class 구조를 가지고 있어야 합니다. 아닐 경우 직접 PIL나 CV모듈(CV의 경우 rgb->bgr로 변형 꼭!)로 불러 와줍니다.

from keras.preprocessing.image import ImageDataGenerator
from keras.applications.efficientnet import preprocess_input
idg = ImageDataGenerator(preprocessing_function=preprocess_input)
test_generator = idg.flow_from_directory(directory=test_path, target_size=img_size, batch_size=batch_size, shuffle=False)

print(test_generator.class_indices)

Load Model

test_generator.reset()
model = load_model(weight_save_path+"\\"+weight_name+'.h5')
predict = model.predict(test_generator)
predict = np.argmax(predict, axis=1)

score = 0
reverse_classindices = dict(map(reversed,test_generator.class_indices.items()))



for i in range(len(test_generator.classes)) :   
    target_filePath = test_generator.filenames[i].split("\\")
    target_className = target_filePath[0]
    target_filename = target_filePath[1]  
    predict_className = reverse_classindices[predict[i]]
    createFolder(SAVEPATH + "\\" + target_className + "\\" + predict_className)
    shutil.copy(test_path+"\\"+test_generator.filenames[i], SAVEPATH + "\\" + target_className + "\\" + predict_className + "\\" + target_filename)
    if predict[i] == test_generator.classes[i] :
        score += 1/len(test_generator.classes)

print(f'Accuracy : {score*100}%')

CSV 파일 쓰기

import pandas as pd
num_class = len(test_generator.class_indices)
confusion_Matrix = np.zeros((num_class,num_class), dtype='uint8')
for i in range(test_generator.n) : 
    oper_code = test_generator.classes[i]
    pred_code = predict[i]
    confusion_Matrix[oper_code, pred_code] += 1

class_indices = test_generator.class_indices.keys()

result_df = pd.DataFrame(confusion_Matrix, index=class_indices, columns=class_indices)
print(result_df)

result_df.to_csv(SAVEPATH + "\\ConfustionMatrix.csv")

+ Recent posts