Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import gradio as gr | |
| import tensorflow as tf | |
| from tensorflow.keras import applications | |
| import pandas as pd | |
| BATCH_SIZE = 8 | |
| EPOCHS = 50 | |
| IM_SIZE = (256, 256) | |
| dataframe = pd.DataFrame(columns=["Method", "Loss", "Accuracy", "ROC AUC"]) | |
| def gradio_predictor(flag, image, modelname): | |
| image = np.expand_dims(image, axis=0) | |
| if not flag: | |
| if modelname == 'InceptionV3': | |
| model = applications.InceptionV3(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('InceptionV3.hdf5') | |
| result_a = model.predict(image) | |
| result = np.argmax(result_a) | |
| if result == 0: | |
| return 'Day (' + str(result_a) + ')' | |
| else: | |
| return 'Night (' + str(result_a) + ')' | |
| elif modelname == 'MobileNetV2': | |
| model = applications.MobileNetV2(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('MobileNetV2.hdf5') | |
| result_a = model.predict(image) | |
| result = np.argmax(result_a) | |
| if result == 0: | |
| return 'Day (' + str(result_a) + ')' | |
| else: | |
| return 'Night (' + str(result_a) + ')' | |
| else: | |
| model = applications.EfficientNetV2B0(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('EfficientNetV2.hdf5') | |
| result_a = model.predict(image) | |
| result = np.argmax(result_a) | |
| if result == 0: | |
| return 'Day (' + str(result_a) + ')' | |
| else: | |
| return 'Night (' + str(result_a) + ')' | |
| else: | |
| if modelname == 'InceptionV3': | |
| model = applications.InceptionV3(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('InceptionV3_Aug.hdf5') | |
| result_a = model.predict(image) | |
| result = np.argmax(result_a) | |
| if result == 0: | |
| return 'Day (' + str(result_a) + ')' | |
| else: | |
| return 'Night (' + str(result_a) + ')' | |
| elif modelname == 'MobileNetV2': | |
| model = applications.MobileNetV2(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('MobileNetV2_Aug.hdf5') | |
| result_a = model.predict(image) | |
| result = np.argmax(result_a) | |
| if result == 0: | |
| return 'Day (' + str(result_a) + ')' | |
| else: | |
| return 'Night (' + str(result_a) + ')' | |
| else: | |
| model = applications.EfficientNetV2B0(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('EfficientNetV2_Aug.hdf5') | |
| result_a = model.predict(image) | |
| result = np.argmax(result_a) | |
| if result == 0: | |
| return 'Day (' + str(result_a) + ')' | |
| else: | |
| return 'Night (' + str(result_a) + ')' | |
| data = tf.keras.utils.image_dataset_from_directory( | |
| 'data_orig/test', | |
| label_mode='int', | |
| image_size=IM_SIZE, | |
| seed=42, | |
| batch_size=BATCH_SIZE, | |
| ) | |
| def gradio_tester(flag, modelname): | |
| global dataframe | |
| if not flag: | |
| if modelname == 'InceptionV3': | |
| model = applications.InceptionV3(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('InceptionV3.hdf5') | |
| model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0025), | |
| loss=tf.keras.losses.SparseCategoricalCrossentropy(), | |
| metrics=['accuracy'], | |
| ) | |
| [loss, accuracy] = model.evaluate(data) | |
| auc = model.predict(data) | |
| a = tf.keras.metrics.AUC(num_thresholds=3) | |
| heu = np.concatenate([y for x, y in data], axis=0) | |
| a.update_state(heu,tf.math.argmax(auc,-1)) | |
| middat = pd.Series({'Method': modelname, 'Loss': loss, 'Accuracy': accuracy, 'ROC AUC': a.result().numpy()}) | |
| dataframe = pd.concat([dataframe, middat.to_frame().T], ignore_index=True) | |
| return dataframe | |
| elif modelname == 'MobileNetV2': | |
| model = applications.MobileNetV2(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('MobileNetV2.hdf5') | |
| model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0025), | |
| loss=tf.keras.losses.SparseCategoricalCrossentropy(), | |
| metrics=['accuracy'], | |
| ) | |
| [loss, accuracy] = model.evaluate(data) | |
| auc = model.predict(data) | |
| a = tf.keras.metrics.AUC(num_thresholds=3) | |
| heu = np.concatenate([y for x, y in data], axis=0) | |
| a.update_state(heu, tf.math.argmax(auc, -1)) | |
| middat = pd.Series({'Method': modelname, 'Loss': loss, 'Accuracy': accuracy, 'ROC AUC': a.result().numpy()}) | |
| dataframe = pd.concat([dataframe, middat.to_frame().T], ignore_index=True) | |
| return dataframe | |
| else: | |
| model = applications.EfficientNetV2B0(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('EfficientNetV2.hdf5') | |
| model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0025), | |
| loss=tf.keras.losses.SparseCategoricalCrossentropy(), | |
| metrics=['accuracy'], | |
| ) | |
| [loss, accuracy] = model.evaluate(data) | |
| auc = model.predict(data) | |
| a = tf.keras.metrics.AUC(num_thresholds=3) | |
| heu = np.concatenate([y for x, y in data], axis=0) | |
| a.update_state(heu, tf.math.argmax(auc, -1)) | |
| middat = pd.Series({'Method': modelname, 'Loss': loss, 'Accuracy': accuracy, 'ROC AUC': a.result().numpy()}) | |
| dataframe = pd.concat([dataframe, middat.to_frame().T], ignore_index=True) | |
| return dataframe | |
| else: | |
| if modelname == 'InceptionV3': | |
| model = applications.InceptionV3(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('InceptionV3_Aug.hdf5') | |
| model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0025), | |
| loss=tf.keras.losses.SparseCategoricalCrossentropy(), | |
| metrics=['accuracy'], | |
| ) | |
| [loss, accuracy] = model.evaluate(data) | |
| auc = model.predict(data) | |
| a = tf.keras.metrics.AUC(num_thresholds=3) | |
| heu = np.concatenate([y for x, y in data], axis=0) | |
| a.update_state(heu, tf.math.argmax(auc, -1)) | |
| middat = pd.Series({'Method': modelname, 'Loss': loss, 'Accuracy': accuracy, 'ROC AUC': a.result().numpy()}) | |
| dataframe = pd.concat([dataframe, middat.to_frame().T], ignore_index=True) | |
| return dataframe | |
| elif modelname == 'MobileNetV2': | |
| model = applications.MobileNetV2(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('MobileNetV2_Aug.hdf5') | |
| model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0025), | |
| loss=tf.keras.losses.SparseCategoricalCrossentropy(), | |
| metrics=['accuracy'], | |
| ) | |
| [loss, accuracy] = model.evaluate(data) | |
| auc = model.predict(data) | |
| a = tf.keras.metrics.AUC(num_thresholds=3) | |
| heu = np.concatenate([y for x, y in data], axis=0) | |
| a.update_state(heu, tf.math.argmax(auc, -1)) | |
| middat = pd.Series({'Method': modelname, 'Loss': loss, 'Accuracy': accuracy, 'ROC AUC': a.result().numpy()}) | |
| dataframe = pd.concat([dataframe, middat.to_frame().T], ignore_index=True) | |
| return dataframe | |
| else: | |
| model = applications.EfficientNetV2B0(input_shape=(IM_SIZE[0], IM_SIZE[1], 3), | |
| weights=None, | |
| classes=2, | |
| classifier_activation="softmax", | |
| ) | |
| model.load_weights('EfficientNetV2_Aug.hdf5') | |
| model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.0025), | |
| loss=tf.keras.losses.SparseCategoricalCrossentropy(), | |
| metrics=['accuracy'], | |
| ) | |
| [loss, accuracy] = model.evaluate(data) | |
| auc = model.predict(data) | |
| a = tf.keras.metrics.AUC(num_thresholds=3) | |
| heu = np.concatenate([y for x, y in data], axis=0) | |
| a.update_state(heu, tf.math.argmax(auc, -1)) | |
| middat = pd.Series({'Method': modelname, 'Loss': loss, 'Accuracy': accuracy, 'ROC AUC': a.result().numpy()}) | |
| dataframe = pd.concat([dataframe, middat.to_frame().T], ignore_index=True) | |
| return dataframe | |
| with gr.Blocks() as interface: | |
| header = gr.Markdown('# Data Augmentation with CycleGAN Images') | |
| image_input = gr.Image(shape=(256, 256), label="Cityscape Image") | |
| model_chooser = gr.Dropdown(choices=['InceptionV3', 'MobileNetV2', 'EfficientNetV2'], value='InceptionV3', | |
| label='Model Chooser') | |
| text_output = gr.Textbox(label='Predicted day/night') | |
| augmenter_btn = gr.Checkbox(label="Use augmented models?") | |
| submit_btn = gr.Button("Predict") | |
| submit_btn.click(fn=gradio_predictor, inputs=[augmenter_btn, image_input, model_chooser], outputs=text_output) | |
| test_btn = gr.Button("Run test on dataset") | |
| text_test = gr.Dataframe(label="Test results") | |
| test_btn.click(fn=gradio_tester, inputs=[augmenter_btn, model_chooser], outputs=text_test) | |
| credits = gr.Markdown('Find the dataset used in kaggle here: https://www.kaggle.com/datasets/heonh0/daynight-cityview . Augmented models (tick the box) have been trained with an additional 750 CycleGAN-generated images. ') | |
| interface.launch() | |