CAM(class attention map)

1 主要思想

在这里插入图片描述
上图中,网络的最后一个卷积层,经过全局平均池化后,后跟上全连接,经过softmax输出类别。其公式描述为:
在这里插入图片描述
Sc是c类对应的全连接的输入,也就是加权求和,k代表第k层,c代表第c类。f为第k层(x,y)处的激活值,求和符号是GAP,其前面经过w加权求和,输出为Sc。其等价于:
在这里插入图片描述
在(1)中第二行是先利用第c类对应的权重值w1~wk与特征图的每一层对应相乘,也就是给每层都分配一个权重,之后所有特征图沿通道合并,也就是将k通道变为1通道,最后再全局平均池化。

也就是说,先GAP后加权求和,等价于,先加权求和后GAP。

此处的对于类c,先对特征图进行加权求和,得到的就是所说的cam图。图上的每一点反映了其对分类为类c的贡献程度,其经过GAP就是全连接的输入了。

2 适用场景

只适用网络中全连接前是GAP的网络。至于其他的场景,也有使用梯度,或者非梯度作为特征图层的权重的方法。

3 代码

思路:
获取图片以及类别,对图片进行预处理;
创建网络,获取网络特征图以及权重参数;
生成CAM;
展示。

1 )导入包

from torchvision import models, transforms
import torchsnooper
import numpy as np
import cv2
import requests
from PIL import Image
import io
from torch.autograd import Variable
import torch
import torch.nn.functional as F

2)获取图片以及对应的类别,并进行预处理

LABELS_URL = 'https://s3.amazonaws.com/outcome-blog/imagenet/labels.json'
classes = {
   int(key):value for (key, value) in requests.get(LABELS_URL).json().items()} #获取类别信息,键值对

IMG_URL = 'http://media.mlive.com/news_impact/photo/9933031-large.jpg'
reponse = requests.get(IMG_URL) 
img_pil = Image.open(io
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值