微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行Grad-CAM可视化时出错

如何解决运行Grad-CAM可视化时出错

我正在使用开源Pytorch Grad-CAM代码来可视化我的模型,如下所示:

classifier = cnn.CNN(in_shape=(1,28,28),n_classes=10).cuda()

Grad-CAM实现来自此处:https://github.com/jacobgil/pytorch-grad-cam/

但是,当我跑步时

def preprocess_image(img):
    means = [0.485,0.456,0.406]
    stds = [0.229,0.224,0.225]

    preprocessed_img = img.copy()[:,:,::-1]
    for i in range(3):
        preprocessed_img[:,i] = preprocessed_img[:,i] - means[i]
        preprocessed_img[:,i] / stds[i]
    preprocessed_img = \
        np.ascontiguousarray(np.transpose(preprocessed_img,(2,1)))
    preprocessed_img = torch.from_numpy(preprocessed_img)
    preprocessed_img.unsqueeze_(0)
    input = preprocessed_img.requires_grad_(True)
    return input

model = classifier
grad_cam = GradCam(model=model,feature_module=model.features,target_layer_names=["2"],use_cuda=True)

img = cv2.imread('/content/drive/My Drive/pic.png',1)
img = np.float32(cv2.resize(img,(224,224))) / 255
input = preprocess_image(img)
input = input[:,0:1,:]

target_index = None
mask = grad_cam(input,target_index)
show_cam_on_image(img,mask)

我收到此错误

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-30-fe930a4e6b09> in <module>()
    155 # Otherwise,targets the requested index.
    156 target_index = None
--> 157 mask = grad_cam(input,target_index)
    158 show_cam_on_image(img,mask)

6 frames
/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in linear(input,weight,bias)
   1674         ret = torch.addmm(bias,input,weight.t())
   1675     else:
-> 1676         output = input.matmul(weight.t())
   1677         if bias is not None:
   1678             output += bias

RuntimeError: mat1 dim 1 must match mat2 dim 0

如果有帮助,请参见print(model.features)输出

Sequential(
  (0): Conv2d(1,16,kernel_size=(1,1),stride=(1,bias=False)
  (1): Batchnorm2d(16,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)
  (2): ReLU(inplace=True)
  (3): Conv2d(16,32,kernel_size=(3,3),padding=(1,bias=False)
  (4): Batchnorm2d(32,track_running_stats=True)
  (5): ReLU(inplace=True)
  (6): MaxPool2d(kernel_size=2,stride=2,padding=0,dilation=1,ceil_mode=False)
  (7): Conv2d(32,64,bias=False)
  (8): Batchnorm2d(64,track_running_stats=True)
  (9): ReLU(inplace=True)
  (10): MaxPool2d(kernel_size=2,ceil_mode=False)
  (11): Conv2d(64,128,bias=False)
  (12): Batchnorm2d(128,track_running_stats=True)
  (13): ReLU(inplace=True)
  (14): MaxPool2d(kernel_size=2,ceil_mode=False)
)

如何解决错误并使grad-CAM按预期运行?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。