Update app.py
Browse files
app.py
CHANGED
@@ -8,7 +8,7 @@ from torch.utils.data import DataLoader
|
|
8 |
import itertools
|
9 |
import matplotlib.pyplot as plt
|
10 |
import matplotlib.patches as patches
|
11 |
-
|
12 |
|
13 |
import config as config
|
14 |
from model import YOLOv3
|
@@ -17,7 +17,7 @@ from utils import get_loaders
|
|
17 |
import utils
|
18 |
|
19 |
new_state_dict = {}
|
20 |
-
state_dict = torch.load('
|
21 |
for key, value in state_dict.items():
|
22 |
new_key = key.replace('model.', '')
|
23 |
new_state_dict[new_key] = value
|
@@ -48,7 +48,12 @@ classes = ("aeroplane",
|
|
48 |
"tvmonitor")
|
49 |
|
50 |
|
51 |
-
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
if input_img is not None:
|
54 |
|
@@ -133,26 +138,39 @@ def inference(input_img=None, iou_threshold=0.6, conf_threshold=0.5):
|
|
133 |
|
134 |
### GradCAM
|
135 |
|
136 |
-
|
137 |
-
|
138 |
-
# targets = [ClassifierOutputTarget(category) for category in target_categories]
|
139 |
|
140 |
-
|
141 |
-
|
142 |
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
|
|
|
|
150 |
|
151 |
-
|
152 |
-
|
|
|
153 |
|
|
|
|
|
|
|
154 |
|
155 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
156 |
|
157 |
else:
|
158 |
outputs_inference_bb = None
|
@@ -161,14 +179,16 @@ def inference(input_img=None, iou_threshold=0.6, conf_threshold=0.5):
|
|
161 |
return outputs_inference_bb, outputs_inference_gc
|
162 |
|
163 |
|
|
|
164 |
title = "PASCAL VOC trained on Yolov3"
|
165 |
description = "A simple Gradio interface to infer on Yolov3 model, and get GradCAM results"
|
166 |
-
examples = [['examples/test_'+str(i)+'.jpg', 0.6, 0.5] for i in range(10)]
|
167 |
|
168 |
demo = gr.Interface(inference,
|
169 |
inputs = [gr.Image(label="Input image"),
|
170 |
gr.Slider(0, 1, value=0.6, label="IOU Threshold"),
|
171 |
gr.Slider(0, 1, value=0.4, label="Threshold"),
|
|
|
172 |
],
|
173 |
outputs = [
|
174 |
gr.Image(label="Yolov3 Prediction"),
|
|
|
8 |
import itertools
|
9 |
import matplotlib.pyplot as plt
|
10 |
import matplotlib.patches as patches
|
11 |
+
import cv2
|
12 |
|
13 |
import config as config
|
14 |
from model import YOLOv3
|
|
|
17 |
import utils
|
18 |
|
19 |
new_state_dict = {}
|
20 |
+
state_dict = torch.load('Yolov3_Shashank.pth', map_location=torch.device('cpu'))
|
21 |
for key, value in state_dict.items():
|
22 |
new_key = key.replace('model.', '')
|
23 |
new_state_dict[new_key] = value
|
|
|
48 |
"tvmonitor")
|
49 |
|
50 |
|
51 |
+
import grad_cam_func as gcf
|
52 |
+
from pytorch_grad_cam.utils.model_targets import ClassifierOutputTarget
|
53 |
+
from pytorch_grad_cam.activations_and_gradients import ActivationsAndGradients
|
54 |
+
from pytorch_grad_cam.utils.image import show_cam_on_image
|
55 |
+
|
56 |
+
def inference(input_img=None, iou_threshold=0.6, conf_threshold=0.5, gc_trans=0.3):
|
57 |
|
58 |
if input_img is not None:
|
59 |
|
|
|
138 |
|
139 |
### GradCAM
|
140 |
|
141 |
+
target_layer = [model.layers[-2]]
|
142 |
+
cam = gcf.BaseCAM(model, target_layer)
|
|
|
143 |
|
144 |
+
AnG = ActivationsAndGradients(model, target_layer, None)
|
145 |
+
outputs = AnG(transform_img)
|
146 |
|
147 |
+
bboxes = [[] for _ in range(1)]
|
148 |
+
for i in range(3):
|
149 |
+
batch_size, A, S, _, _ = outputs[i].shape
|
150 |
+
anchor = config.SCALED_ANCHORS[i]
|
151 |
+
boxes_scale_i = utils.cells_to_bboxes(
|
152 |
+
outputs[i], anchor, S=S, is_preds=True
|
153 |
+
)
|
154 |
+
for idx, (box) in enumerate(boxes_scale_i):
|
155 |
+
bboxes[idx] += box
|
156 |
|
157 |
+
nms_boxes = utils.non_max_suppression(
|
158 |
+
bboxes[0], iou_threshold=0.5, threshold=0.4, box_format="midpoint",
|
159 |
+
)
|
160 |
|
161 |
+
target_categories = [box[0] for box in nms_boxes]
|
162 |
+
targets = [ClassifierOutputTarget(
|
163 |
+
category) for category in target_categories]
|
164 |
|
165 |
+
help_ = cam.compute_cam_per_layer(transform_img, targets, False)
|
166 |
+
|
167 |
+
output_gc = cam.aggregate_multi_layers(help_)[0, :, :]
|
168 |
+
|
169 |
+
img = cv2.resize(input_img, (416, 416))
|
170 |
+
img = np.float32(img) / 255
|
171 |
+
cam_image = show_cam_on_image(img, output_gc, use_rgb=True, image_weight=gc_trans)
|
172 |
+
|
173 |
+
outputs_inference_gc = cam_image
|
174 |
|
175 |
else:
|
176 |
outputs_inference_bb = None
|
|
|
179 |
return outputs_inference_bb, outputs_inference_gc
|
180 |
|
181 |
|
182 |
+
|
183 |
title = "PASCAL VOC trained on Yolov3"
|
184 |
description = "A simple Gradio interface to infer on Yolov3 model, and get GradCAM results"
|
185 |
+
examples = [['examples/test_'+str(i)+'.jpg', 0.6, 0.5, 0.3] for i in range(10)]
|
186 |
|
187 |
demo = gr.Interface(inference,
|
188 |
inputs = [gr.Image(label="Input image"),
|
189 |
gr.Slider(0, 1, value=0.6, label="IOU Threshold"),
|
190 |
gr.Slider(0, 1, value=0.4, label="Threshold"),
|
191 |
+
gr.Slider(0, 1, value=0.5, label="GradCAM Transparency"),
|
192 |
],
|
193 |
outputs = [
|
194 |
gr.Image(label="Yolov3 Prediction"),
|