CAM可视化卷积神经网络

CAM全称 Class Activation Mapping,分类热力图。目的帮助我们理解模型在预测时关注图像的哪些部分,验证模型的可解释性。

图像分类

回忆下,在CNN的最后一个卷积层之后,用全局平均池化(池化这个词不好,一看到这个我想到水池,化粪池,其实功能是粗采样,你们说对不对吧)得到每个通道的平均值,然后通过一个全连接层输出分类结果。

输入图像->卷积层->特征图->全局平均池化层->全连接层->分类得分

全连接层里是权重矩阵,对吧,就是一个分类有一个权重向量,每次反向更新。权重向量长度就是通道数。

我们算出得分是哪个分类,然后取那个分类的权重向量。那么我们将这些权重乘以原始的特征图,得到一个热力图,表示模型对图像不同区域的关注程度。

注意:这里是乘以特征图,并非原图。

【权重乘以所有通道的特征图后,怎么看】

比如通道512个,每个通道是一张28*28的图。权重向量shape是[512]。特征图本身啥看不出,

你要把特征图*权重后相加,再归一化,再叠加到原始图上,才能看出效果。我的最简单的,特征图还能看出苹果的噢。

【啥是热力图】

import cv2
import numpy as np

size=500
cam = np.zeros((size,size))

center_x,center_y=200,200
radius=100

for i in range(size):
    for j in range(size):
        distance = np.sqrt((i-center_x)**2 + (j-center_y)**2)
        if distance <= radius:
            cam[i,j] = np.exp(-distance**2/(2 * (radius/2)**2))
cam = np.uint8(255*cam)

heatmap = cv2.applyColorMap(cam,cv2.COLORMAP_TURBO)

img = cv2.imread("d:\\aaaa.jpg")


overlay= cv2.addWeighted(heatmap,0.4,img,0.6,0)
cv2.imshow("overlay image",overlay)
cv2.waitKey(0)
cv2.destoryAllWindows()

图像分类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值