from pytorch_grad_cam import GradCAM, HiResCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM, FullGrad, EigenGradCAM, LayerCAM
import torchvision
import torch
import cv2
import matplotlib.pyplot as plt
from PIL import Image[CAM]Other Methods
https://pythonrepo.com/repo/jacobgil-pytorch-grad-cam
https://github.com/jacobgil/pytorch-grad-cam
| Method | What it does |
|---|---|
| GradCAM | Weight the 2D activations by the average gradient |
| GradCAM++ | Like GradCAM but uses second order gradients |
| XGradCAM | Like GradCAM but scale the gradients by the normalized activations |
| AblationCAM | Zero out activations and measure how the output drops (this repository includes a fast batched implementation) |
| ScoreCAM | Perbutate the image by the scaled activations and measure how the output drops |
| EigenCAM | Takes the first principle component of the 2D Activations (no class discrimination, but seems to give great results) |
| EigenGradCAM | Like EigenCAM but with class discrimination: First principle component of Activations*Grad. Looks like GradCAM, but cleaner |
| LayerCAM | Spatially weight the activations by positive gradients. Works better especially in lower layers |
Import
from torchvision.models import resnet50from fastai.vision.all import *
from torchvision import transformsdef label_func(f):
if f[0].isupper():
return 'cat'
else:
return 'dog' Data
path=Path('original_pet')
files=get_image_files(path)
dls=ImageDataLoaders.from_name_func(path,files,label_func,item_tfms=Resize(512)) path_r=Path('random_pet_one') #랜덤박스넣은사진
files_r=get_image_files(path_r)
dls_r=ImageDataLoaders.from_name_func(path_r,files_r,label_func,item_tfms=Resize(512)) CAM
lrnr=cnn_learner(dls,resnet34,metrics=error_rate)
lrnr.fine_tune(1)/home/csy/anaconda3/envs/temp_csy/lib/python3.8/site-packages/fastai/vision/learner.py:288: UserWarning: `cnn_learner` has been renamed to `vision_learner` -- please update your code
warn("`cnn_learner` has been renamed to `vision_learner` -- please update your code")
/home/csy/anaconda3/envs/temp_csy/lib/python3.8/site-packages/torchvision/models/_utils.py:208: UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.
warnings.warn(
/home/csy/anaconda3/envs/temp_csy/lib/python3.8/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet34_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet34_Weights.DEFAULT` to get the most up-to-date weights.
warnings.warn(msg)
| epoch | train_loss | valid_loss | error_rate | time |
|---|---|---|---|---|
| 0 | 0.175802 | 0.017629 | 0.006089 | 00:35 |
| epoch | train_loss | valid_loss | error_rate | time |
|---|---|---|---|---|
| 0 | 0.044077 | 0.004809 | 0.002030 | 00:43 |
net1=lrnr.model[0]
net2=lrnr.model[1]net2 = torch.nn.Sequential(
torch.nn.AdaptiveAvgPool2d(output_size=1),
torch.nn.Flatten(),
torch.nn.Linear(512,out_features=2,bias=False))net=torch.nn.Sequential(net1,net2)lrnr2=Learner(dls,net,metrics=accuracy) lrnr2.fine_tune(5) | epoch | train_loss | valid_loss | accuracy | time |
|---|---|---|---|---|
| 0 | 0.247475 | 0.831850 | 0.725304 | 00:43 |
| epoch | train_loss | valid_loss | accuracy | time |
|---|---|---|---|---|
| 0 | 0.122386 | 0.438715 | 0.914750 | 00:43 |
| 1 | 0.114546 | 0.220883 | 0.916779 | 00:43 |
| 2 | 0.071775 | 0.079565 | 0.963464 | 00:43 |
| 3 | 0.032215 | 0.058077 | 0.977673 | 00:43 |
| 4 | 0.011436 | 0.050615 | 0.982409 | 00:43 |
lrnr_r=cnn_learner(dls_r,resnet34,metrics=error_rate)
lrnr_r.fine_tune(1)| epoch | train_loss | valid_loss | error_rate | time |
|---|---|---|---|---|
| 0 | 0.117688 | 0.012863 | 0.005413 | 00:33 |
| epoch | train_loss | valid_loss | error_rate | time |
|---|---|---|---|---|
| 0 | 0.000532 | 0.000008 | 0.000000 | 00:43 |
net1_r=lrnr_r.model[0]
net2_r=lrnr_r.model[1]net2_r = torch.nn.Sequential(
torch.nn.AdaptiveAvgPool2d(output_size=1),
torch.nn.Flatten(),
torch.nn.Linear(512,out_features=2,bias=False))net_r=torch.nn.Sequential(net1_r,net2_r)lrnr2_r=Learner(dls_r,net_r,metrics=accuracy) lrnr2_r.fine_tune(5) | epoch | train_loss | valid_loss | accuracy | time |
|---|---|---|---|---|
| 0 | 0.008425 | 0.000942 | 1.000000 | 00:43 |
| epoch | train_loss | valid_loss | accuracy | time |
|---|---|---|---|---|
| 0 | 0.000006 | 0.000001 | 1.000000 | 00:43 |
| 1 | 0.000001 | 0.000000 | 1.000000 | 00:43 |
| 2 | 0.000001 | 0.000000 | 1.000000 | 00:43 |
| 3 | 0.000000 | 0.000000 | 1.000000 | 00:43 |
| 4 | 0.000000 | 0.000000 | 1.000000 | 00:43 |
x_cat, = first(dls.test_dl([PILImage.create(get_image_files(path)[2])]))
x_cat = x_cat.to('cpu')x_cat_r, = first(dls_r.test_dl([PILImage.create(get_image_files(path_r)[2])]))
x_cat_r = x_cat_r.to('cpu')x_dog, = first(dls.test_dl([PILImage.create(get_image_files(path)[12])]))
x_dog = x_dog.to('cpu')x_dog_r, = first(dls_r.test_dl([PILImage.create(get_image_files(path_r)[12])]))
x_dog_r = x_dog_r.to('cpu')GradCAM
Cat_GradCAM
Cat_GradCAM_Original
gradcam_original = GradCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_gradcam_original = gradcam_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_gradcam_original.squeeze(), alpha=0.7)
Cat_GradCAM_Randombox
gradcam_randombox = GradCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_gradcam_randombox = gradcam_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_gradcam_randombox.squeeze(), alpha=0.7)
Dog_GradCAM
Dog_GradCAM_Original
cam_dog_gradcam_original = gradcam_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_gradcam_original.squeeze(), alpha=0.7)
Dog_GradCAM_Randombox
cam_dog_gradcam_randombox = gradcam_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_gradcam_randombox.squeeze(), alpha=0.7)
HiResCAM
Cat_HiResCAM
Cat_HiResCAM_Original
hirescam_original = HiResCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_hirescam_original = hirescam_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_hirescam_original.squeeze(), alpha=0.7)
Cat_HiResCAM_Randombox
hirescam_randombox = HiResCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_hirescam_randombox = hirescam_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_hirescam_randombox.squeeze(), alpha=0.7)
Dog_HiResCAM
Dog_HiResCAM_Original
cam_dog_hirescam_original = hirescam_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_hirescam_original.squeeze(), alpha=0.7)
Dog_HiResCAM_Random
cam_dog_hirescam_randombox = hirescam_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_hirescam_randombox.squeeze(), alpha=0.7)
ScoreCAM
Cat_ScoreCAM
Cat_ScoreCAM_Original
scorecam_original = ScoreCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_scorecam_original = scorecam_original(input_tensor=x_cat,targets=None)100%|██████████| 32/32 [00:26<00:00, 1.23it/s]
100%|██████████| 32/32 [00:25<00:00, 1.27it/s]
100%|██████████| 32/32 [00:25<00:00, 1.26it/s]
dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_scorecam_original.squeeze(), alpha=0.7)
Cat_ScoreCAM_Randombox
scorecam_randombox = ScoreCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_scorecam_randombox = scorecam_randombox(input_tensor=x_cat_r,targets=None)100%|██████████| 32/32 [00:25<00:00, 1.25it/s]
100%|██████████| 32/32 [00:25<00:00, 1.26it/s]
100%|██████████| 32/32 [00:25<00:00, 1.26it/s]
dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_scorecam_randombox.squeeze(), alpha=0.7)
Dog_ScoreCAM
Dog_ScoreCAM_Original
cam_dog_scorecam_original = scorecam_original(input_tensor=x_dog,targets=None)100%|██████████| 32/32 [00:25<00:00, 1.25it/s]
100%|██████████| 32/32 [00:25<00:00, 1.27it/s]
100%|██████████| 32/32 [00:24<00:00, 1.30it/s]
dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_scorecam_original.squeeze(), alpha=0.7)
Dog_ScoreCAM_Randombox
cam_dog_scorecam_randombox = scorecam_randombox(input_tensor=x_dog_r,targets=None)100%|██████████| 32/32 [00:24<00:00, 1.30it/s]
100%|██████████| 32/32 [00:24<00:00, 1.30it/s]
100%|██████████| 32/32 [00:24<00:00, 1.29it/s]
dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_scorecam_randombox.squeeze(), alpha=0.7)
GradCAMPlusPlus
Cat_GradCAMPlusPlus
Cat_GradCAMPlusPlus_Original
gradcamplusplus_original = GradCAMPlusPlus(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_gradcamplusplus_original = gradcamplusplus_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_gradcamplusplus_original.squeeze(), alpha=0.7)
Cat_GradCAMPlusPlus_Randombox
gradcamplusplus_randombox = GradCAMPlusPlus(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_gradcamplusplus_randombox = gradcamplusplus_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_gradcamplusplus_randombox.squeeze(), alpha=0.7)
Dog_GradCAMPlusPlus
Dog_GradCAMPlusPlus_Original
cam_dog_gradcamplusplus_original = gradcamplusplus_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_gradcamplusplus_original.squeeze(), alpha=0.7)
Dog_GradCAMPlusPlus_Randombox
cam_dog_gradcamplusplus_randombox = gradcamplusplus_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_gradcamplusplus_randombox.squeeze(), alpha=0.7)
AblationCAM
Cat_AblationCAM
Cat_AblationCAM_Original
ablationcam_original = AblationCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_ablationcam_original = ablationcam_original(input_tensor=x_cat,targets=None)100%|██████████| 16/16 [00:28<00:00, 1.75s/it]
100%|██████████| 16/16 [00:28<00:00, 1.78s/it]
100%|██████████| 16/16 [00:27<00:00, 1.72s/it]
dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_ablationcam_original.squeeze(), alpha=0.7)
Cat_AblationCAM_Randombox
ablationcam_randombox = AblationCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_ablationcam_randombox = ablationcam_randombox(input_tensor=x_cat_r,targets=None)100%|██████████| 16/16 [00:26<00:00, 1.63s/it]
100%|██████████| 16/16 [00:25<00:00, 1.60s/it]
100%|██████████| 16/16 [00:25<00:00, 1.60s/it]
dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_ablationcam_randombox.squeeze(), alpha=0.7)
Dog_AblationCAM
Dog_AblationCAM_Original
cam_dog_ablationcam_original = ablationcam_original(input_tensor=x_dog,targets=None)100%|██████████| 16/16 [00:25<00:00, 1.61s/it]
100%|██████████| 16/16 [00:25<00:00, 1.58s/it]
100%|██████████| 16/16 [00:25<00:00, 1.58s/it]
dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_ablationcam_original.squeeze(), alpha=0.7)
Dog_AblationCAM_Randombox
cam_dog_ablationcam_randombox = ablationcam_randombox(input_tensor=x_dog_r,targets=None)100%|██████████| 16/16 [00:25<00:00, 1.60s/it]
100%|██████████| 16/16 [00:25<00:00, 1.60s/it]
100%|██████████| 16/16 [00:25<00:00, 1.59s/it]
dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_ablationcam_randombox.squeeze(), alpha=0.7)
XGradCAM
Cat_XGradCAM
Cat_XGradCAM_Original
xgradcam_original = XGradCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_xgradcam_original = xgradcam_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_xgradcam_original.squeeze(), alpha=0.7)
Cat_XGradCAM_Randombox
xgradcam_randombox = XGradCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_xgradcam_randombox = xgradcam_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_xgradcam_randombox.squeeze(), alpha=0.7)
Dog_XGradCAM
Dog_XGradCAM_Original
cam_dog_xgradcam_original = xgradcam_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_xgradcam_original.squeeze(), alpha=0.7)
Dog_XGradCAM_Randombox
cam_dog_xgradcam_randombox = xgradcam_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_xgradcam_randombox.squeeze(), alpha=0.7)
EigenCAM
Cat_EigenCAM
Cat_EigenCAM_Original
eigencam_original = EigenCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_eigencam_original = eigencam_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_eigencam_original.squeeze(), alpha=0.7)
Cat_EigenCAM_Randombox
eigencam_randombox = EigenCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_eigencam_randombox = eigencam_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_eigencam_randombox.squeeze(), alpha=0.7)
Dog_EigenCAM
Dog_EigenCAM_Original
cam_dog_eigencam_original = eigencam_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_eigencam_original.squeeze(), alpha=0.7)
Dog_EigenCAM_Randombox
cam_dog_eigencam_randombox = eigencam_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_eigencam_randombox.squeeze(), alpha=0.7)
FullGrad
Cat_FullGrad
Cat_FullGrad_Original
fullgrad_original = FullGrad(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])Warning: target_layers is ignored in FullGrad. All bias layers will be used instead
cam_cat_fullgrad_original = fullgrad_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_fullgrad_original.squeeze(), alpha=0.7)
Cat_FullGrad_Randombox
fullgrad_randombox = FullGrad(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])Warning: target_layers is ignored in FullGrad. All bias layers will be used instead
cam_cat_fullgrad_randombox = fullgrad_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_fullgrad_randombox.squeeze(), alpha=0.7)
Dog_FullGrad
Dog_FullGrad_Original
cam_dog_fullgrad_original = fullgrad_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_fullgrad_original.squeeze(), alpha=0.7)
Dog_FullGrad_Randombox
cam_dog_fullgrad_randombox = fullgrad_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_fullgrad_randombox.squeeze(), alpha=0.7)
EigenGradCAM
Cat_EigenGradCAM
Cat_EigenGradCAM_Original
eigengradcam_original = EigenGradCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_eigengradcam_original = eigengradcam_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_eigengradcam_original.squeeze(), alpha=0.7)
Cat_EigenGradCAM_Randombox
eigengradcam_randombox = EigenGradCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_eigengradcam_randombox = eigengradcam_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_eigengradcam_randombox.squeeze(), alpha=0.7)
Dog_EigenGradCAM
Dog_EigenGradCAM_Original
cam_dog_eigengradcam_original = eigengradcam_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_eigengradcam_original.squeeze(), alpha=0.7)
Dog_EigenGradCAM_Randombox
cam_dog_eigengradcam_randombox = eigengradcam_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_eigengradcam_randombox.squeeze(), alpha=0.7)
LayerCAM
Cat_LayerCAM
Cat_LayerCAM_Original
layercam_original = LayerCAM(model=lrnr2.model.to('cpu'), target_layers=lrnr2.model[0][-1])cam_cat_layercam_original = layercam_original(input_tensor=x_cat,targets=None)dls.train.decode((x_cat,))[0].squeeze().show()
plt.imshow(cam_cat_layercam_original.squeeze(), alpha=0.7)
Cat_LayerCAM_Randombox
layercam_randombox = LayerCAM(model=lrnr2_r.model.to('cpu'), target_layers=lrnr2_r.model[0][-1])cam_cat_layercam_randombox = layercam_randombox(input_tensor=x_cat_r,targets=None)dls.train.decode((x_cat_r,))[0].squeeze().show()
plt.imshow(cam_cat_layercam_randombox.squeeze(), alpha=0.7)Dog_LayerCAM
Dog_LayerCAM_Original
cam_dog_layercam_original = layercam_original(input_tensor=x_dog,targets=None)dls.train.decode((x_dog,))[0].squeeze().show()
plt.imshow(cam_dog_layercam_original.squeeze(), alpha=0.7)
Dog_LayerCAM_Randombox
cam_dog_layercam_randombox = layercam_randombox(input_tensor=x_dog_r,targets=None)dls.train.decode((x_dog_r,))[0].squeeze().show()
plt.imshow(cam_dog_layercam_randombox.squeeze(), alpha=0.7)
Figure
Figure_Original
fig, ((ax1,ax2,ax3,ax4),
(ax5,ax6,ax7,ax8),
(ax9,ax10,ax11,ax12),
(ax13,ax14,ax15,ax16),
(ax17,ax18,ax19,ax20)) = plt.subplots(5,4)
plt.title('Original')
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax1)
ax1.imshow(cam_cat_gradcam_original.squeeze(), alpha=0.7)
ax1.set_title("GradCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax2)
ax2.imshow(cam_dog_gradcam_original.squeeze(), alpha=0.7)
ax2.set_title("GradCAM DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax3)
ax3.imshow(cam_cat_hirescam_original.squeeze(), alpha=0.7)
ax3.set_title("HiResCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax4)
ax4.imshow(cam_dog_hirescam_original.squeeze(), alpha=0.7)
ax4.set_title("HiResCAM DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax5)
ax5.imshow(cam_cat_scorecam_original.squeeze(), alpha=0.7)
ax5.set_title("ScoreCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax6)
ax6.imshow(cam_dog_scorecam_original.squeeze(), alpha=0.7)
ax6.set_title("ScoreCAM DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax7)
ax7.imshow(cam_cat_gradcamplusplus_original.squeeze(), alpha=0.7)
ax7.set_title("GradCAMPlusPlus CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax8)
ax8.imshow(cam_dog_gradcamplusplus_original.squeeze(), alpha=0.7)
ax8.set_title("GradCAMPlusPlus DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax9)
ax9.imshow(cam_cat_ablationcam_original.squeeze(), alpha=0.7)
ax9.set_title("AblationCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax10)
ax10.imshow(cam_dog_ablationcam_original.squeeze(), alpha=0.7)
ax10.set_title("AblationCAM DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax11)
ax11.imshow(cam_cat_xgradcam_original.squeeze(), alpha=0.7)
ax11.set_title("XGradCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax12)
ax12.imshow(cam_dog_xgradcam_original.squeeze(), alpha=0.7)
ax12.set_title("XGradCAM DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax13)
ax13.imshow(cam_cat_eigencam_original.squeeze(), alpha=0.7)
ax13.set_title("EigenCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax14)
ax14.imshow(cam_dog_eigencam_original.squeeze(), alpha=0.7)
ax14.set_title("EigenCAM DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax15)
ax15.imshow(cam_cat_fullgrad_original.squeeze(), alpha=0.7)
ax15.set_title("FullGrad CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax16)
ax16.imshow(cam_dog_fullgrad_original.squeeze(), alpha=0.7)
ax16.set_title("FullGrad DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax17)
ax17.imshow(cam_cat_eigengradcam_original.squeeze(), alpha=0.7)
ax17.set_title("EigenGradCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax18)
ax18.imshow(cam_dog_eigengradcam_original.squeeze(), alpha=0.7)
ax18.set_title("EigenGradCAM DOG PART")
#
dls.train.decode((x_cat,))[0].squeeze().show(ax=ax19)
ax19.imshow(cam_cat_layercam_original.squeeze(), alpha=0.7)
ax19.set_title("LayerCAM CAT PART")
#
dls.train.decode((x_dog,))[0].squeeze().show(ax=ax20)
ax20.imshow(cam_dog_layercam_original.squeeze(), alpha=0.7)
ax20.set_title("LayerCAM DOG PART")
#
fig.set_figwidth(20)
fig.set_figheight(20)
fig.tight_layout()
Figure_Randombox
fig, ((ax1,ax2,ax3,ax4),
(ax5,ax6,ax7,ax8),
(ax9,ax10,ax11,ax12),
(ax13,ax14,ax15,ax16),
(ax17,ax18,ax19,ax20)) = plt.subplots(5,4)
plt.title('Randombox')
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax1)
ax1.imshow(cam_cat_gradcam_randombox.squeeze(), alpha=0.7)
ax1.set_title("GradCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax2)
ax2.imshow(cam_dog_gradcam_randombox.squeeze(), alpha=0.7)
ax2.set_title("GradCAM DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax3)
ax3.imshow(cam_cat_hirescam_randombox.squeeze(), alpha=0.7)
ax3.set_title("HiResCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax4)
ax4.imshow(cam_dog_hirescam_randombox.squeeze(), alpha=0.7)
ax4.set_title("HiResCAM DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax5)
ax5.imshow(cam_cat_scorecam_randombox.squeeze(), alpha=0.7)
ax5.set_title("ScoreCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax6)
ax6.imshow(cam_dog_scorecam_randombox.squeeze(), alpha=0.7)
ax6.set_title("ScoreCAM DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax7)
ax7.imshow(cam_cat_gradcamplusplus_randombox.squeeze(), alpha=0.7)
ax7.set_title("GradCAMPlusPlus CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax8)
ax8.imshow(cam_dog_gradcamplusplus_randombox.squeeze(), alpha=0.7)
ax8.set_title("GradCAMPlusPlus DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax9)
ax9.imshow(cam_cat_ablationcam_randombox.squeeze(), alpha=0.7)
ax9.set_title("AblationCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax10)
ax10.imshow(cam_dog_ablationcam_randombox.squeeze(), alpha=0.7)
ax10.set_title("AblationCAM DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax11)
ax11.imshow(cam_cat_xgradcam_randombox.squeeze(), alpha=0.7)
ax11.set_title("XGradCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax12)
ax12.imshow(cam_dog_xgradcam_randombox.squeeze(), alpha=0.7)
ax12.set_title("XGradCAM DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax13)
ax13.imshow(cam_cat_eigencam_randombox.squeeze(), alpha=0.7)
ax13.set_title("EigenCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax14)
ax14.imshow(cam_dog_eigencam_randombox.squeeze(), alpha=0.7)
ax14.set_title("EigenCAM DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax15)
ax15.imshow(cam_cat_fullgrad_randombox.squeeze(), alpha=0.7)
ax15.set_title("FullGrad CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax16)
ax16.imshow(cam_dog_fullgrad_randombox.squeeze(), alpha=0.7)
ax16.set_title("FullGrad DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax17)
ax17.imshow(cam_cat_eigengradcam_randombox.squeeze(), alpha=0.7)
ax17.set_title("EigenGradCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax18)
ax18.imshow(cam_dog_eigengradcam_randombox.squeeze(), alpha=0.7)
ax18.set_title("EigenGradCAM DOG PART")
#
dls.train.decode((x_cat_r,))[0].squeeze().show(ax=ax19)
ax19.imshow(cam_cat_layercam_randombox.squeeze(), alpha=0.7)
ax19.set_title("LayerCAM CAT PART")
#
dls.train.decode((x_dog_r,))[0].squeeze().show(ax=ax20)
ax20.imshow(cam_dog_layercam_randombox.squeeze(), alpha=0.7)
ax20.set_title("LayerCAM DOG PART")
#
fig.set_figwidth(20)
fig.set_figheight(20)
fig.tight_layout()