Grad-CAM

使用方法

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
32
33
34
35
36
37
38
39
from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM
from pytorch_grad_cam.utils.image import show_cam_on_image
from torchvision.models import resnet50
import torchvision.transforms as transforms
import cv2 as cv
import numpy as np


#加载函数模型
model = resnet50(pretrained=True)
#设置要测量那个网络层的效果
target_layer = model.layer4[-1]

#网络输入,转换成 Tensor格式,要符合网络的输入 (batch_size,c,w,h)
image = cv.imread("C:/Users/doris/Desktop/image.jpg").astype(np.float32)/255
transf= transforms.ToTensor()
input_tensor = transf(image).unsqueeze(0)

#加载GradCAM
cam = GradCAM(model=model, target_layer=target_layer, use_cuda=False)

#设置要关注的类别,如果不设置,默认返回得分最高的类别
# will be used for every image in the batch.
# target_category can also be an integer, or a list of different integers
# for every image in the batch.
target_category = 1

#计算网络可视化结果
# You can also pass aug_smooth=True and eigen_smooth=True, to apply smoothing.
grayscale_cam = cam(input_tensor=input_tensor, target_category=target_category)

# In this example grayscale_cam has only one image in the batch:
grayscale_cam = grayscale_cam[0, :]

#注意这里image 和 grayscale_cam都是narray.float32格式
visualization = show_cam_on_image(image, grayscale_cam)

#将结果写入到本土图片中
cv.imwrite("C:/Users/doris/Desktop/result.jpg",visualization)