import torch, torchvision from torchvision import transforms import numpy as np import gradio as gr from PIL import Image from pytorch_grad_cam import GradCAM from pytorch_grad_cam.utils.image import show_cam_on_image import gradio as gr import albumentations as A from albumentations.pytorch import ToTensorV2 import config import utils from model import YOLOv3 import config from torchvision import transforms import torch.optim as optim scaled_anchors = ( torch.tensor(config.ANCHORS) * torch.tensor(config.S).unsqueeze(1).unsqueeze(1).repeat(1, 3, 2) ).to('cpu') model = YOLOv3(num_classes=config.NUM_CLASSES) optimizer = optim.Adam(model.parameters(), lr=config.LEARNING_RATE, weight_decay=config.WEIGHT_DECAY) utils.load_checkpoint("checkpoint.pth[1].tar", model, optimizer, config.LEARNING_RATE) def inference(input_img,show_gradcam="yes", transparency = 0.5, target_layer_number = -1): out_fig = utils.plot_single_image(model, input_img, 0.6, 0.5,scaled_anchors) return out_fig title = "TSAI S13 Assignment: YOLO V3 trained on PASCAL VOC Dataset" description = "A simple Gradio interface for object detection using YOLO V3 algorithm. Bounding boxes should be shown around these objects - aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow, diningtable, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor " examples = [["000002.jpg","yes", 0.5, -1], ["000004.jpg","yes", 0.5, -1], ["000006.jpg","yes", 0.5, -1], ["000058.jpg","yes", 0.5, -1] ] demo = gr.Interface( inference, inputs = [gr.Image(shape=(416, 416), label="Input Image")], outputs = [gr.Plot(label="Plot")], title = title, description = description, examples = examples, ) demo.launch()