Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from model import Lightning_YOLO | |
| import config | |
| from utils import non_max_suppression, cells_to_bboxes, draw_bounding_boxes, get_annotations | |
| import torch | |
| scaled_anchors = config.scaled_anchors | |
| model = Lightning_YOLO() | |
| model.load_state_dict(torch.load("yolov3.pth", map_location="cpu"), strict=False) | |
| model.eval() | |
| def inference(image, threst = 0.5, iou_tresh = 0.5): | |
| image_copy = image.copy() | |
| transformed_image = config.transforms(image=image)["image"].unsqueeze(0) | |
| output = model(transformed_image) | |
| bboxes = [[] for _ in range(1)] | |
| nms_boxes_output = [] | |
| for i in range(3): | |
| batch_size, A, S, _, _ = output[i].shape | |
| anchor = scaled_anchors[i] | |
| boxes_scale_i = cells_to_bboxes( | |
| output[i], anchor, S=S, is_preds=True | |
| ) | |
| for idx, (box) in enumerate(boxes_scale_i): | |
| bboxes[idx] += box | |
| # nms_boxes = non_max_suppression( | |
| # bboxes[0], iou_threshold=iou_tresh, threshold=threst, box_format="midpoint", | |
| # ) | |
| for i in range(image.shape[0]): | |
| nms_boxes = non_max_suppression( | |
| bboxes[i], iou_threshold=iou_tresh, threshold=threst, box_format="midpoint", | |
| ) | |
| nms_boxes_output.append(nms_boxes) | |
| annotations = get_annotations(nms_boxes_output,config.IMAGE_SIZE,config.IMAGE_SIZE) | |
| # plot_img = draw_bounding_boxes(image.copy(), nms_boxes, class_labels=config.PASCAL_CLASSES) | |
| # return plot_img | |
| return [image_copy, annotations] | |
| def visualize_gradcam(image, target_layer=-5, show_cam=True, transparency=0.5): | |
| # if show_cam: | |
| # cam = YoloCAM(model=model, target_layers=[model.layers[target_layer]], use_cuda=False) | |
| # transformed_image = config.transforms(image=image)["image"].unsqueeze(0) | |
| # grayscale_cam = cam(transformed_image, scaled_anchors)[0, :, :] | |
| # img = cv2.resize(image, (416, 416)) | |
| # img = np.float32(img) / 255 | |
| # cam_image = show_cam_on_image(img, grayscale_cam, use_rgb=True, image_weight=transparency) | |
| # else: | |
| # cam_image = image | |
| # return cam_image | |
| pass | |
| window1 = gr.Interface( | |
| inference, | |
| inputs=[ | |
| gr.Image(label="Input Image"), | |
| gr.Slider(0, 1, value=0.5, step=0.1, label="Threshold", info="Set Threshold value"), | |
| gr.Slider(0, 1, value=0.5, step=0.1, label="IOU Threshold", info="Set IOU Threshold value"), | |
| ], | |
| outputs=[ | |
| gr.Image(label="YoloV3 Object Detection"), | |
| ], | |
| # examples=ex1, | |
| ) | |
| window2 = gr.Interface( | |
| visualize_gradcam, | |
| inputs=[ | |
| gr.Image(label="Input Image"), | |
| gr.Slider(-5, -2, value=-3, step=-1, label="Network Layer", info="GRAD-CAM Layer to visualize?"), | |
| gr.Checkbox(label="GradCAM", value=True, info="Visualize Class Activation Maps ??"), | |
| gr.Slider(0, 1, value=0.5, step=0.1, label="Transparency", info="Set Transparency of GRAD-CAMs"), | |
| ], | |
| outputs=[ | |
| # gr.Image(label="Grad-CAM Visualization"), | |
| gr.AnnotatedImage(label='BBox Prediction', | |
| height=config.IMAGE_SIZE, | |
| width=config.IMAGE_SIZE) | |
| ], | |
| # examples=ex2, | |
| ) | |
| app = gr.TabbedInterface([window1, window2], ["YOLO V3 Detection", "GradCAM Visualization"]) | |
| app.launch() |