Spaces:
Runtime error
Runtime error
File size: 2,617 Bytes
422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d 845deaa 422fb0d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# Importing Libraries
import os
import torch
import numpy as np
import gradio as gr
from model import Model
import albumentations as A
# Creating a model instance
efficientnet_b5_model = Model()
efficientnet_b5_model = torch.nn.DataParallel(
efficientnet_b5_model) # Must wrap our model in nn.DataParallel()
# if used multi-gpu's to train the model otherwise we would get state_dict keys mismatch error.
efficientnet_b5_model.load_state_dict(
torch.load(
f='efficientnet_b5_checkpoint_fold_0.pt',
map_location=torch.device("cpu")
)
)
# Predict on a single image
def predict_on_single_image(img):
"""
Function takes an image, transforms for
model training like normalizing the statistics
of the image. Converting the numpy array into
torch tensor and passing through the model
to get the prediction probability of a patient
having melanoma.
"""
img = np.array(img)
transforms = A.Compose([A.Resize(512, 512),
A.Normalize(mean=(0.485, 0.456, 0.406),
std=(0.229, 0.224, 0.225),
max_pixel_value=255.0,
always_apply=True
)]
)
img = transforms(image=img)['image']
image = np.transpose(img, (2, 0, 1)).astype(np.float32)
image = torch.tensor(image, dtype=torch.float).unsqueeze(dim=0)
efficientnet_b5_model.eval()
with torch.inference_mode():
probs = torch.sigmoid(efficientnet_b5_model(image))
prob_of_melanoma = probs[0].item()
prob_of_not_having_melanoma = 1 - prob_of_melanoma
pred_label = {"Probability of Having Melanoma": prob_of_melanoma,
"Probability of Not having Melanoma": prob_of_not_having_melanoma}
return pred_label
# Gradio App
# Examples directory path
melanoma_app_examples_path = "examples"
# Creating the title and description strings
title = "Melanoma Cancer Detection App"
description = 'An efficientnet-b5 model that predicts the probability of a patient having melanoma skin cancer or not.'
example_list = [["examples/" + example]
for example in os.listdir(melanoma_app_examples_path)]
# Create the Gradio demo
demo = gr.Interface(fn=predict_on_single_image,
inputs=gr.Image(type='pil'),
outputs=[gr.Label(label='Probabilities')],
examples=example_list, title=title,
description=description)
# Launch the demo!
demo.launch()
|