import gradio as gr import tensorflow as tf from keras.models import load_model import os os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" os.environ["SM_FRAMEWORK"] = "tf.keras" import segmentation_models as sm from keras.metrics import MeanIoU def jaccard_coef(y_true, y_pred): """ Defines custom jaccard coefficient metric """ y_true_flatten = K.flatten(y_true) y_pred_flatten = K.flatten(y_pred) intersection = K.sum(y_true_flatten * y_pred_flatten) final_coef_value = (intersection + 1.0) / (K.sum(y_true_flatten) + K.sum(y_pred_flatten) - intersection + 1.0) return final_coef_value def real_dice_coeff(y_true, y_pred): smooth = 0.0001 y_true_flatten = K.flatten(y_true) y_pred_flatten = K.flatten(y_pred) intersection = K.sum(y_true_flatten * y_pred_flatten) dice_score = (2.0 * intersection + smooth) / (K.sum(y_true_flatten) + K.sum(y_pred_flatten) + smooth) return dice_score dice_loss = sm.losses.DiceLoss(class_weights = weights) focal_loss = sm.losses.CategoricalFocalLoss() TOTAL_LOSS_FACTOR = 5 total_loss = dice_loss + (TOTAL_LOSS_FACTOR * focal_loss) metrics = [real_dice_coeff, tf.keras.metrics.MeanIoU(num_classes=2, sparse_y_true= False, sparse_y_pred=False, name="Mean IOU"), "accuracy", jaccard_coef, sm.metrics.FScore(threshold=0.6, name="Dice Coeficient")] model = load_model('../../../fast-disk/w210-capstone/models/' + model_name, custom_objects={'dice_loss_plus_5focal_loss': total_loss, 'jaccard_coef': jaccard_coef, 'IOU score' : sm.metrics.IOUScore(threshold=0.9, name="IOU score"), 'Dice Coeficient' : sm.metrics.FScore(threshold=0.6, name="Dice Coeficient")}, compile=False) model.compile(metrics=metrics) # def greet(name): # return "Hello " + name + "!!" # iface = gr.Interface(fn=greet, inputs="text", outputs="text") # iface.launch() # first we need to load the model from somewhere - probably by using model.load on a keras file (which could be saved in our huggingface space repo) # once we have a model, we use tensorflow to run inference and create a visualization of the output mask # just like we did in our main code like such: # model_name = "something.keras" (which should be saved in our HF repo) # model = load_model(model_name) # model.compile(?) # then we save that inference + viz task in a function called "make mask" which takes an input image, processes it, runs the model on it, and returns a mask image # within this function we can use functions like display_image_and_label (and the functions that that function calls to make predictions) # instead of just printing the visualization, we have the function return the image output #description = "
Gradio demo for identifying contrails in satellite images.
" #css = "#0 {object-fit: contain;} #1 {object-fit: contain;}" #demo = gr.Interface(fn=make_mask, # title=title, # description=description, # inputs= # either the use input or one we save as a file, # outputs=gr.Image(elem_id=1, show_label=False), # css=css, # examples=examples, # cache_examples=True, # allow_flagging='never') #demo.launch()