Amit Kumar
Update model trained on the whole Food101 dataset
d24f85a
Raw History Blame Contribute Delete
2.19 kB
import os
import gradio as gr
import torch
import torchvision
from typing import Tuple, Dict
from timeit import default_timer as timer
from model import create_effnetb2_model
with open("class_names.txt", "r") as f:
class_names = [food_name.strip() for food_name in f.readlines()]
effnetb2, effnetb2_transforms = create_effnetb2_model(
num_classes=101
)
effnetb2.load_state_dict(
torch.load(f="pretrained_effnetb2_feature_extractor_food101.pth",
map_location=torch.device("cpu")) # Load the model to the CPU
)
def predict(img) -> Tuple[Dict, float]:
start_time = timer()
transformed_image = effnetb2_transforms(img).unsqueeze(dim=0)
effnetb2.eval()
with torch.inference_mode():
pred_probs = torch.softmax(effnetb2(transformed_image), dim=1)
pred_labels_and_probs = {class_names[i]: float(pred_probs[0][i]) for i in range(len(class_names))}
end_time = timer()
pred_time = round(end_time-start_time, 4)
return pred_labels_and_probs, pred_time
title = "Food101 Classification App 🍔"
description = "An [EfficientNetB2 feature extractor](https://pytorch.org/vision/main/models/generated/torchvision.models.efficientnet_b2.html#torchvision.models.efficientnet_b2) computer vision model trained on [Food101 dataset](https://pytorch.org/vision/main/generated/torchvision.datasets.Food101.html) which classifies 101 different food categories."
article = "How to Use: Upload a food image in the upload section above or select an images from the 'Examples' section. " \
"Click on the 'Submit' button and the model will detect which" \
"food catagory the image belongs to."
example_list = [["examples/" + example] for example in os.listdir("examples")]
food101_app = gr.Interface(fn=predict,
inputs=gr.Image(type="pil"),
outputs=[gr.Label(num_top_classes=5, label="Predictions"),
gr.Number(label="Prediction Time (s)")],
examples=example_list,
title=title,
description=description,
article=article)
food101_app.launch()