Many Class Activation Map methods implemented in Pytorch. Including Grad-CAM, Grad-CAM++, Score-CAM, Ablation-CAM and XGrad-CAM
Project description
Many Class Activation Map methods implemented in Pytorch!
- GradCAM
- GradCAM++
- ScoreCAM
- XGradCAM
- AblationCAM (with a fast batched implementation)
What makes the network think the image label is 'pug, pug-dog' and 'tabby, tabby cat':
Combining Grad-CAM with Guided Backpropagation for the 'pug, pug-dog' class:
Tested with most of the torchvision models. You need to choose the target layer to compute CAM for. Some common choices can be:
- Resnet18 and 50: model.layer4[-1]
- VGG and densenet161: model.features[-1]
- mnasnet1_0: model.layers[-1]
Using from code as a library
pip install grad-cam
from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM
from pytorch_grad_cam.utils.image import show_cam_on_image
from torchvision.models import resnet50
model = resnet50(pretrained=True)
target_layer = model.layer4[-1]
input_tensor = # Create an input tensor image for your model..
#Can be GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM
cam = GradCAM(model=model, target_layer=target_layer, use_cuda=args.use_cuda)
grayscale_cam = cam(input_tensor=input_tensor, target_category=1)
visualization = show_cam_on_image(rgb_img, grayscale_cam)
Running the example script:
Usage: python cam.py --image-path <path_to_image> --method <method>
To use with CUDA:
python cam.py --image-path <path_to_image> --use-cuda
You can choose between:
GradCAMScoreCAMGradCAMPlusPlusAblationCAMXGradCAM
Some methods like ScoreCAM and AblationCAM require a large number of forward passes, and have a batched implementation.
You can control the batch size with
cam.batch_size =
It seems that GradCAM++ is almost the same as GradCAM, in most networks except VGG where the advantage is larger.
| Network | Image | GradCAM | GradCAM++ | Score-CAM |
|---|---|---|---|---|
| VGG16 | ||||
| Resnet50 |
References
https://arxiv.org/abs/1610.02391
Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, Dhruv Batra
https://arxiv.org/abs/1710.11063
Grad-CAM++: Improved Visual Explanations for Deep Convolutional Networks Aditya Chattopadhyay, Anirban Sarkar, Prantik Howlader, Vineeth N Balasubramanian
https://arxiv.org/abs/1910.01279
Score-CAM: Score-Weighted Visual Explanations for Convolutional Neural Networks Haofan Wang, Zifan Wang, Mengnan Du, Fan Yang, Zijian Zhang, Sirui Ding, Piotr Mardziel, Xia Hu
https://ieeexplore.ieee.org/abstract/document/9093360/
Saurabh Desai and Harish G Ramaswamy. Ablation-cam: Visual explanations for deep convolutional network via gradient-free localization. In WACV, pages 972–980, 2020
https://arxiv.org/abs/2008.02312
Axiom-based Grad-CAM: Towards Accurate Visualization and Explanation of CNNs Ruigang Fu, Qingyong Hu, Xiaohu Dong, Yulan Guo, Yinghui Gao, Biao Li
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file grad-cam-1.1.0.tar.gz.
File metadata
- Download URL: grad-cam-1.1.0.tar.gz
- Upload date:
- Size: 592.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.21.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a7ce57940281c6b335a10f45aac27e7cdfeac27be255f480a9c8d9e839d8f15
|
|
| MD5 |
b3cea0befde43ff863b9dc1457a4a795
|
|
| BLAKE2b-256 |
16d5fdb8bed1716a13217f22eaac5227698d258695dabdb161b83976bf167f2d
|