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