Comments (4)
It probably does not register hooks in the first place. Check the next two lines where it registers the hooks on the layers.
first_layer = list(self.model.features._modules.items())[0][1]
first_layer.register_backward_hook(hook_function)
from pytorch-cnn-visualizations.
I think they should be registered:
class GuidedBackprop():
def __init__(self, model):
self.model = model
self.gradients = None
self.forward_relu_outputs = []
# Put model in evaluation mode
self.model.eval()
self.update_relus()
self.hook_layers()
def hook_layers(self):
def hook_function(module, grad_in, grad_out):
print("Vaxx")
self.gradients = grad_in[0]
# Register hook to the first layer
first_layer = list(self.model.features._modules.items())[0][1]
first_layer.register_backward_hook(hook_function)
def generate_gradients(self, input_image, target_class):
# Forward pass
model_output = self.model(input_image)
# Zero gradients
self.model.zero_grad()
# Target for backprop
one_hot_output = torch.FloatTensor(1, model_output.size()[-1]).zero_()
one_hot_output[0][target_class] = 1
# Backward pass
print(one_hot_output)
model_output.backward(gradient=one_hot_output)
# Convert Pytorch variable to numpy array
# [0] to get rid of the first channel (1,3,224,224)
gradients_as_arr = self.gradients.data.numpy()[0]
return gradients_as_arr
There is my function where I use GuidedBackprop.
def guided_grad_cam(self):
batch = next(iter(self.test_loader))
img_paths, img_tensors, labels = batch
img_path = img_paths[0]
print(img_tensors.shape)
prep_img = img_tensors[0].unsqueeze(0)
# Grad cam
gcv2 = GradCam(self.model, target_layer=7)
# Generate cam mask
cam = gcv2.generate_cam(prep_img,labels[0].data.numpy())
print('Grad cam completed')
# Guided backprop
GBP = GuidedBackprop(self.model)
# Get gradients
print(labels[0].data.numpy())
guided_grads = GBP.generate_gradients(prep_img,labels[0].data.numpy())
print('Guided backpropagation completed')
# Guided Grad cam
cam_gb = guided_grad_cam(cam, guided_grads)
file_name_to_export = os.path.join("cnn_visual", self.name)
save_gradient_images(cam_gb, file_name_to_export + '_GGrad_Cam')
grayscale_cam_gb = convert_to_grayscale(cam_gb)
save_gradient_images(grayscale_cam_gb, file_name_to_export + '_GGrad_Cam_gray')
from pytorch-cnn-visualizations.
I have decided this problem by unfreezing all layers in model.
for ind, param in enumerate(self.resnet.named_parameters()):
param[1].requires_grad = True
from pytorch-cnn-visualizations.
If requires_grad is False then you can't register a backward hook (because there is no gradient). Glad you were able to solve it.
from pytorch-cnn-visualizations.
Related Issues (20)
- Why this cam-zoo don't have grad-cam++?May you add grad-cam++ in this project? HOT 1
- Support for LayerCAM HOT 4
- a question on "cam = np.ones(target.shape[1:], dtype=np.float32)" in gradcam.py HOT 2
- How to get the sampling points with deformable conv? HOT 1
- A question about the method to get output from specific layer HOT 4
- Support for non-VGG models. HOT 1
- question on image generation
- Image Reconstruction size is same as conv1 layer HOT 1
- Visualizations for CNN trained on timeseries classification HOT 1
- Could you please provide the feature importance included dataset that has been generated? HOT 1
- AttributeError: 'MyCNN' object has no attribute 'features' HOT 1
- Extract gradient without model_output HOT 3
- GradCAM
- GradCAM HOT 1
- Why take np.maximum(cam, 0) in GradCam? HOT 1
- attention HOT 1
- Help with understanding layer backpropagation. HOT 1
- Can this tool be used on non-classification tasks HOT 1
- Code application related issues HOT 1
- RUN
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pytorch-cnn-visualizations.