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() |