forked from jacobgil/pytorch-grad-cam
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxgrad_cam.py
31 lines (28 loc) · 860 Bytes
/
xgrad_cam.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
from pytorch_grad_cam.base_cam import BaseCAM
class XGradCAM(BaseCAM):
def __init__(
self,
model,
target_layers,
use_cuda=False,
reshape_transform=None):
super(
XGradCAM,
self).__init__(
model,
target_layers,
use_cuda,
reshape_transform)
def get_cam_weights(self,
input_tensor,
target_layer,
target_category,
activations,
grads):
sum_activations = np.sum(activations, axis=(2, 3))
eps = 1e-7
weights = grads * activations / \
(sum_activations[:, :, None, None] + eps)
weights = weights.sum(axis=(2, 3))
return weights