diff --git a/Models/__pycache__/bottleneck_residual.cpython-39.pyc b/Models/__pycache__/bottleneck_residual.cpython-39.pyc deleted file mode 100644 index 507e428..0000000 Binary files a/Models/__pycache__/bottleneck_residual.cpython-39.pyc and /dev/null differ diff --git a/Models/__pycache__/resnet50.cpython-39.pyc b/Models/__pycache__/resnet50.cpython-39.pyc deleted file mode 100644 index fed982f..0000000 Binary files a/Models/__pycache__/resnet50.cpython-39.pyc and /dev/null differ diff --git a/Models/bottleneck_residual.py b/Models/bottleneck_residual.py index b0281f7..90c0835 100644 --- a/Models/bottleneck_residual.py +++ b/Models/bottleneck_residual.py @@ -2,11 +2,11 @@ from itertools import filterfalse import sys import os -from keras.layers.pooling import MaxPool2D -from numpy.lib.shape_base import expand_dims +#from keras.layers.pooling import MaxPool2D +#from numpy.lib.shape_base import expand_dims -sys.path.append('c:/git/keras') -sys.path.append('c:/git/absl') +#sys.path.append('c:/git/keras') +#sys.path.append('c:/git/absl') # installed # py -mpip install numpy @@ -17,21 +17,21 @@ sys.path.append('c:/git/absl') # c:\users\skess\appdata\local\programs\python\python39\lib\site-packages import keras -from keras.optimizers import adam_v2 -from tensorflow.keras.optimizers import Adam -from keras.datasets import cifar10 -from keras.preprocessing.image import ImageDataGenerator -from keras.models import Sequential -from keras.utils import np_utils -from keras.layers import Dense +#from keras.optimizers import adam_v2 +#from tensorflow.keras.optimizers import Adam +#from keras.datasets import cifar10 +#from keras.preprocessing.image import ImageDataGenerator +#from keras.models import Sequential +#from keras.utils import np_utils +#from keras.layers import Dense from keras.layers import Activation -from keras.layers import Flatten -from keras.layers import Dropout +#from keras.layers import Flatten +#from keras.layers import Dropout from keras.layers import BatchNormalization from keras.layers import Conv2D -from keras.layers import MaxPooling2D -from keras.callbacks import ModelCheckpoint -from tensorflow.keras.callbacks import EarlyStopping +#from keras.layers import MaxPooling2D +#from keras.callbacks import ModelCheckpoint +#from tensorflow.keras.callbacks import EarlyStopping from keras import regularizers from keras import optimizers from matplotlib import pyplot diff --git a/Models/model_host.py b/Models/model_host.py index 8f470cc..1e616d1 100644 --- a/Models/model_host.py +++ b/Models/model_host.py @@ -35,7 +35,9 @@ # c:\users\skess\appdata\local\programs\python\python39\lib\site-packages import keras -from keras.preprocessing.image import ImageDataGenerator +#from keras.preprocessing.image import ImageDataGenerator +from keras.src.legacy.preprocessing.image import ImageDataGenerator + from flask import Flask, render_template, send_file, request import numpy as np import tensorflow @@ -124,6 +126,24 @@ def predict_resnet50(): response=str(predictions)+'-->'+str(threshold_output) return response +# New model updated in October 2024 +@app.route('/predict_resnet50_20241024_270', methods=['GET','POST']) +def predict_resnet50_20241024_270(): + print('/predict_resnet50_20241024_270') + test_image=request.get_data() + test_image = PIL.Image.open(io.BytesIO(test_image)) + test_image = test_image.convert('L') + test_array=keras.preprocessing.image.img_to_array(test_image) + batch_test_array=np.array([test_array]) + predictions=resnet50_20241024_270_model.predict(batch_test_array) + if type(predictions) == list: + average_prediction = sum(predictions)/len(predictions) + threshold_output = np.where(average_prediction > 0.5, 1, 0) + else : + threshold_output = np.where(predictions > 0.5, 1, 0) + response=str(predictions)+'-->'+str(threshold_output) + return response + # This version expects the image to be of the form (x,x,3). @app.route('/predict_resnet50B', methods=['GET','POST']) def predict_resnet50B(): @@ -175,15 +195,23 @@ def process_image(): if __name__ == '__main__': resnet50_model_name='../Weights/resnet50.h5' - resnet50_model = keras.models.load_model(resnet50_model_name) + print('Loading {model_name}'.format(model_name=resnet50_model_name)) + resnet50_model = keras.models.load_model(resnet50_model_name) + + resnet50_20241024_270_model_name='../Weights/resnet50_20241024_270.h5.keras' + print('Loading {model_name}'.format(model_name=resnet50_20241024_270_model_name)) + resnet50_20241024_270_model = keras.models.load_model(resnet50_20241024_270_model_name) resnet50b_model_name='../Weights/resnet50B.h5' + print('Loading {model_name}'.format(model_name=resnet50b_model_name)) resnet50b_model = keras.models.load_model(resnet50b_model_name) vgg16_model_name='../Weights/vggnet16.h5' + print('Loading {model_name}'.format(model_name=vgg16_model_name)) vgg16_model=keras.models.load_model(vgg16_model_name) lenet_model_name='../Weights/lenet5.h5' + print('Loading {model_name}'.format(model_name=lenet_model_name)) lenet_model=keras.models.load_model(lenet_model_name) port = int(os.environ.get('PORT',5000)) diff --git a/Models/model_sk_resnet.py b/Models/model_sk_resnet.py index 6e435ae..a806988 100644 --- a/Models/model_sk_resnet.py +++ b/Models/model_sk_resnet.py @@ -1,11 +1,24 @@ import sys import os -from keras.layers.pooling import MaxPool2D -from keras.optimizer_v2 import gradient_descent +from keras.optimizers import SGD +from keras.optimizers import Adam +from tensorflow.keras.callbacks import TensorBoard +import keras +#from keras.models import Model +from keras.src.legacy.preprocessing.image import ImageDataGenerator +from keras.callbacks import ModelCheckpoint +#from tensorflow.keras.callbacks import ReduceLROnPlateau +from tensorflow.keras.callbacks import EarlyStopping +#from keras import regularizers +#from keras import optimizers +import numpy as np +import tensorflow +from resnet50 import * +import math +from time import time -sys.path.append('c:/git/keras') -sys.path.append('c:/git/absl') +# Notes: 10/23/2024 Achived 53.85% # installed # py -mpip install numpy @@ -15,39 +28,14 @@ sys.path.append('c:/git/absl') # py -mpip install matplotlib # c:\users\skess\appdata\local\programs\python\python39\lib\site-packages -import keras -from keras.models import Model -#from keras.optimizers import * -#from keras.optimizers import adam_v2 -from tensorflow.keras.optimizers import Adam -from keras.datasets import cifar10 -from keras.preprocessing.image import ImageDataGenerator -from keras.models import Sequential -from keras.utils import np_utils -from keras.layers import Dense -from keras.layers import Activation -from keras.layers import Flatten -from keras.layers import Dropout -from keras.layers import BatchNormalization -from keras.layers import Conv2D -from keras.layers import MaxPooling2D -from keras.callbacks import ModelCheckpoint -from tensorflow.keras.callbacks import ReduceLROnPlateau -from tensorflow.keras.callbacks import EarlyStopping -from keras import regularizers -from keras import optimizers -from matplotlib import pyplot -import numpy as np -import tensorflow -# from inception_module import * -from resnet50 import * -import math +# Create a TensorBoard instance with the path to the logs directory. Before training, in Terminal, run tensorboard --logdir=logs/ +tensorboard = TensorBoard(log_dir='logs/{}'.format(time())) # RESNET50 ARCHITECTURE image_size = (128, 128) #model_weights_file='model_resnet50.hdf5' -model_name='resnet50.h5' +model_name='resnet50_20241022.h5.keras' train_ds = tensorflow.keras.preprocessing.image_dataset_from_directory( 'C:\\boneyard\\DeepLearning\\data', @@ -82,7 +70,7 @@ metric='accuracy' reduce_lr=tensorflow.keras.callbacks.ReduceLROnPlateau(monitor='val_loss',factor=np.sqrt(0.1),patience=5,min_lr=0.5e-6) #Optimizer -optimizer=gradient_descent.SGD(learning_rate=initial_lrate, momentum=0.9, nesterov=False) +optimizer=SGD(learning_rate=initial_lrate, momentum=0.9, nesterov=False) # Checkpointer checkpointer=ModelCheckpoint(filepath=model_name,monitor=metric,verbose=1,save_best_only=True) @@ -90,16 +78,15 @@ checkpointer=ModelCheckpoint(filepath=model_name,monitor=metric,verbose=1,save_b #Early Stopping early_stopping=EarlyStopping(monitor='val_loss',mode='min',verbose=1,patience=patience_on_early_stop) -# def resnet50(input_shape,classes) model=resnet50(input_shape,1) model.summary() model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy']) -history = model.fit(train_ds, validation_data=val_ds, epochs=epochs, batch_size=batch_size, callbacks=[reduce_lr,early_stopping,checkpointer]) +history = model.fit(train_ds, validation_data=val_ds, epochs=epochs, batch_size=batch_size, callbacks=[tensorboard,reduce_lr,early_stopping,checkpointer]) # leave the following line commented out because the early stopping is in place #model.save(model_name) # plot the learning curves -pyplot.plot(history.history['accuracy'],label='train') -pyplot.plot(history.history['val_accuracy'],label='validation') -pyplot.legend() -pyplot.show() +# pyplot.plot(history.history['accuracy'],label='train') +# pyplot.plot(history.history['val_accuracy'],label='validation') +# pyplot.legend() +# pyplot.show() diff --git a/Models/model_sk_resnet_v2.py b/Models/model_sk_resnet_v2.py deleted file mode 100644 index 532811f..0000000 --- a/Models/model_sk_resnet_v2.py +++ /dev/null @@ -1,109 +0,0 @@ -import sys -import os - -from keras.layers.pooling import MaxPool2D -from keras.optimizer_v2 import gradient_descent - -sys.path.append('c:/git/keras') -sys.path.append('c:/git/absl') - -# installed -# py -mpip install numpy -# py -mpip show numpy -# py -mpip install tensorflow -# py -mpip show tensorflow -# py -mpip install matplotlib -# c:\users\skess\appdata\local\programs\python\python39\lib\site-packages - -import keras -from keras.models import Model -#from keras.optimizers import * -#from keras.optimizers import adam_v2 -from tensorflow.keras.optimizers import Adam -from keras.datasets import cifar10 -from keras.preprocessing.image import ImageDataGenerator -from keras.models import Sequential -from keras.utils import np_utils -from keras.layers import Dense -from keras.layers import Activation -from keras.layers import Flatten -from keras.layers import Dropout -from keras.layers import BatchNormalization -from keras.layers import Conv2D -from keras.layers import MaxPooling2D -from keras.callbacks import ModelCheckpoint -from tensorflow.keras.callbacks import ReduceLROnPlateau -from tensorflow.keras.callbacks import EarlyStopping -from keras import regularizers -from keras import optimizers -from matplotlib import pyplot -import numpy as np -import tensorflow -from resnet50 import * -import math - -# RESNET50 ARCHITECTIURE -image_size = (128, 128) - -# November 11, 2022 : This model scored 78.95 in Total Accuracy Weights=../Weights/resnet50.h5.v2 - -model_name='resnet50.h5' - -train_ds = tensorflow.keras.preprocessing.image_dataset_from_directory( - 'C:\\boneyard\\DeepLearning\\data', - - label_mode="binary", - subset="training", - validation_split=.20, - image_size=image_size, - color_mode='grayscale', - batch_size=32, - seed=50 -) -val_ds = tensorflow.keras.preprocessing.image_dataset_from_directory( - 'C:\\boneyard\\DeepLearning\\data', - label_mode="binary", - subset="validation", - validation_split=.20, - image_size=image_size, - color_mode='grayscale', - batch_size=32, - seed=50 -) - -input_shape=(128,128,1) -epochs=200 -initial_lrate=0.01 -batch_size=128 -patience_on_early_stop=10 -reduce_factor=np.sqrt(0.1) -metric='val_loss' -mode='min' - -#ReduceLROnPlateau -reduce_lr=tensorflow.keras.callbacks.ReduceLROnPlateau(monitor=metric,factor=np.sqrt(0.1),patience=5,min_lr=0.5e-6,verbose=True) - -#Optimizer -optimizer=gradient_descent.SGD(learning_rate=initial_lrate, momentum=0.9, nesterov=False) - -# Checkpointer -checkpointer=ModelCheckpoint(filepath=model_name,mode=mode,monitor=metric,verbose=1,save_best_only=True) - -#Early Stopping -early_stopping=EarlyStopping(monitor=metric,mode=mode,verbose=1,patience=patience_on_early_stop) - -# def resnet50(input_shape,classes) -model=resnet50(input_shape,1) -model.summary() -#model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy','mse']) -model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy','mse']) -history = model.fit(train_ds, validation_data=val_ds, epochs=epochs, batch_size=batch_size, callbacks=[early_stopping,checkpointer]) -#model.save(model_name) - -# plot the learning curves -pyplot.plot(history.history['accuracy'],label='train') -pyplot.plot(history.history['val_accuracy'],label='validation') -pyplot.plot(history.history['mse'],label='mse') -pyplot.plot(history.history[metric],label=metric) -pyplot.legend() -pyplot.show() diff --git a/Models/model_sk_resnet_v3.py b/Models/model_sk_resnet_v3.py deleted file mode 100644 index 48a4736..0000000 --- a/Models/model_sk_resnet_v3.py +++ /dev/null @@ -1,120 +0,0 @@ -import sys -import os - -from keras.layers.pooling import MaxPool2D -from keras.optimizer_v2 import gradient_descent - -sys.path.append('c:/git/keras') -sys.path.append('c:/git/absl') - -# installed -# py -mpip install numpy -# py -mpip show numpy -# py -mpip install tensorflow -# py -mpip show tensorflow -# py -mpip install matplotlib -# c:\users\skess\appdata\local\programs\python\python39\lib\site-packages - -import keras -from keras.models import Model -#from keras.optimizers import * -#from keras.optimizers import adam_v2 -from tensorflow.keras.optimizers import Adam -from keras.datasets import cifar10 -from keras.preprocessing.image import ImageDataGenerator -from keras.models import Sequential -from keras.utils import np_utils -from keras.layers import Dense -from keras.layers import Activation -from keras.layers import Flatten -from keras.layers import Dropout -from keras.layers import BatchNormalization -from keras.layers import Conv2D -from keras.layers import MaxPooling2D -from keras.callbacks import ModelCheckpoint -from tensorflow.keras.callbacks import ReduceLROnPlateau -from tensorflow.keras.callbacks import EarlyStopping -from keras import regularizers -from keras import optimizers -from matplotlib import pyplot -import numpy as np -import tensorflow -# from inception_module import * -from resnet50 import * -import math - -# RESNET50 ARCHITECTIURE -image_size = (128, 128) - -#model_weights_file='model_resnet50.hdf5' -model_name='resnet50.h5' - -train_ds = tensorflow.keras.preprocessing.image_dataset_from_directory( - 'C:\\boneyard\\DeepLearning\\data', - - label_mode="binary", - subset="training", - validation_split=.20, - image_size=image_size, - color_mode='grayscale', - batch_size=32, - seed=50 -) -val_ds = tensorflow.keras.preprocessing.image_dataset_from_directory( - 'C:\\boneyard\\DeepLearning\\data', - label_mode="binary", - subset="validation", - validation_split=.20, - image_size=image_size, - color_mode='grayscale', - batch_size=32, - seed=50 -) - -input_shape=(128,128,1) -epochs=200 -#initial_lrate=0.01 -initial_lrate=0.01 -batch_size=128 -#patience_on_early_stop=15 -patience_on_early_stop=epochs*.10 -#metric='val_mse' -#metric='val_loss' -#reduce_factor=.25 -#reduce_factor=np.sqrt(0.1) -reduce_factor=9.9e-4 -metric='val_loss' -mode='min' - -#ReduceLROnPlateau -#reduce_lr=tensorflow.keras.callbacks.ReduceLROnPlateau(monitor=metric,factor=np.sqrt(0.1),patience=5,min_lr=0.5e-6,verbose=True) -#reduce_lr=tensorflow.keras.callbacks.ReduceLROnPlateau(monitor='val_mse',factor=reduce_factor,min_lr=0.5e-6,patience=5,verbose=True) -reduce_lr=tensorflow.keras.callbacks.ReduceLROnPlateau(monitor=metric,factor=reduce_factor,min_lr=0.1e-3,patience=5,verbose=True) - -#Optimizer -optimizer=gradient_descent.SGD(learning_rate=initial_lrate, momentum=0.9, nesterov=False) -#optimizer=adam_v2.Adam(learning_rate=initial_lrate) - -# Checkpointer -checkpointer=ModelCheckpoint(filepath=model_name,mode=mode,monitor=metric,verbose=1,save_best_only=True) - -#Early Stopping -early_stopping=EarlyStopping(monitor=metric,mode=mode,verbose=1,patience=patience_on_early_stop) - -# def resnet50(input_shape,classes) -model=resnet50(input_shape,1) -model.summary() -#model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy','mse']) -model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy']) -#history = model.fit(train_ds, validation_data=val_ds, epochs=epochs, batch_size=batch_size, callbacks=[reduce_lr,early_stopping,checkpointer]) -history = model.fit(train_ds, validation_data=val_ds, epochs=epochs, batch_size=batch_size, callbacks=[early_stopping,checkpointer]) -#model.save(model_name) - -# plot the learning curves -pyplot.plot(history.history['accuracy'],label='train') -pyplot.plot(history.history['val_accuracy'],label='validation') -#pyplot.plot(history.history['mse'],label='mse') -#pyplot.plot(history.history['mse'],label='mse') -pyplot.plot(history.history[metric],label=metric) -pyplot.legend() -pyplot.show() diff --git a/Models/resnet50.py b/Models/resnet50.py index ac3379c..aa2e8fb 100644 --- a/Models/resnet50.py +++ b/Models/resnet50.py @@ -3,10 +3,12 @@ from itertools import filterfalse import sys import os -from keras.layers.pooling import AveragePooling2D, MaxPool2D +#from keras.layers.pooling import AveragePooling2D, MaxPool2D +from keras.layers import AveragePooling2D, MaxPooling2D -sys.path.append('c:/git/keras') -sys.path.append('c:/git/absl') + +#sys.path.append('c:/git/keras') +#sys.path.append('c:/git/absl') # installed # py -mpip install numpy @@ -17,21 +19,21 @@ sys.path.append('c:/git/absl') # c:\users\skess\appdata\local\programs\python\python39\lib\site-packages import keras -from keras.optimizers import adam_v2 -from tensorflow.keras.optimizers import Adam -from keras.datasets import cifar10 -from keras.preprocessing.image import ImageDataGenerator +#from keras.optimizers import adam_v2 +#from tensorflow.keras.optimizers import Adam +#from keras.datasets import cifar10 +#from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential -from keras.utils import np_utils +#from keras.utils import np_utils from keras.layers import Dense from keras.layers import Activation from keras.layers import Flatten -from keras.layers import Dropout +#from keras.layers import Dropout from keras.layers import BatchNormalization from keras.layers import Conv2D from keras.layers import MaxPooling2D -from keras.callbacks import ModelCheckpoint -from tensorflow.keras.callbacks import EarlyStopping +#from keras.callbacks import ModelCheckpoint +#from tensorflow.keras.callbacks import EarlyStopping from keras import regularizers from keras import optimizers from matplotlib import pyplot diff --git a/Models/run_host.bat b/Models/run_host.bat index 90e705b..20997dd 100644 --- a/Models/run_host.bat +++ b/Models/run_host.bat @@ -1 +1,3 @@ -py model_host.py \ No newline at end of file +call ..\.venv\scripts\activate +py model_host.py + diff --git a/Weights/resnet50_20241024_270.h5.keras b/Weights/resnet50_20241024_270.h5.keras new file mode 100644 index 0000000..76025d9 Binary files /dev/null and b/Weights/resnet50_20241024_270.h5.keras differ