首页 游戏 软件 资讯 排行榜 专题
首页
AI
Paddle可视化神经网络热力图(CAM)

Paddle可视化神经网络热力图(CAM)

热心网友
16
转载
2025-07-18
本文介绍了使用Paddle实现神经网络热力图(CAM)可视化的方法。CAM可展示CNN分类时关注的区域,文中详细阐述其原理,提供了完整代码,包括图像预处理、模型输出提取、梯度计算等步骤,还说明如何通过热力图指导数据集扩充和数据增强,帮助优化模型性能。

paddle可视化神经网络热力图(cam) - 游乐网

Paddle可视化神经网络热力图(CAM)

Class Activation Mapping(CAM)是一个帮助可视化CNN的工具,通过它我们可以观察为了达到正确分类的目的,网络更侧重于哪块区域。比如,下面两幅图,一个是刷牙,一个是砍树,我们根据热力图可以看到高响应区域的确集中在我们认为最有助于作出判断的部位。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

Paddle可视化神经网络热力图(CAM) - 游乐网

本项目最初还是来自于项目:讯飞农作物生长情况识别挑战赛baseline(非最新),因为数据集不大,尽管模型收敛很好,但线上的分数确始终不能更进一步。于是想到可以可视化一下网络的CAM,观察一下指导分类的高响应区域是否落在目标核心部位上。

CAM论文链接地址

CAM原理

其计算方法如下图所示。对于一个CNN模型,对其最后一个featuremap做全局平均池化(GAP)计算各通道均值,然后通过FC层等映射到class score,找出argmax,计算最大的那一类的输出相对于最后一个featuremap的梯度,再把这个梯度可视化到原图上即可。直观来说,就是看一下网络抽取到的高层特征的哪部分对最终的classifier影响更大。

Paddle可视化神经网络热力图(CAM) - 游乐网

In [ ]
!cd 'data/data106772' && unzip -q img.zip
登录后复制In [1]
%matplotlib inlineimport osfrom PIL import Imageimport paddleimport numpy as npimport cv2import matplotlib.pyplot as pltfrom draw_features import Res2Net_vdimport paddle.nn.functional as Fimport paddleimport warningswarnings.filterwarnings('ignore')def draw_CAM(model, img_path, save_path, transform=None, visual_heatmap=False):    '''    绘制 Class Activation Map    :param model: 加载好权重的Pytorch model    :param img_path: 测试图片路径    :param save_path: CAM结果保存路径    :param transform: 输入图像预处理方法    :param visual_heatmap: 是否可视化原始heatmap(调用matplotlib)    :return:    '''    # 图像加载&预处理    img = Image.open(img_path).convert('RGB')    img = img.resize((224, 224), Image.BILINEAR) #Image.BILINEAR双线性插值    if transform:        img = transform(img)    # img = img.unsqueeze(0)    img = np.array(img).astype('float32')    img = img.transpose((2, 0, 1))    img = paddle.to_tensor(img)    img = paddle.unsqueeze(img, axis=0)    # print(img.shape)    # 获取模型输出的feature/score    output,features = model(img)    print('outputshape:',output.shape)    print('featureshape:',features.shape)    # lab = np.argmax(out.numpy())    # 为了能读取到中间梯度定义的辅助函数    def extract(g):        global features_grad        features_grad = g     # 预测得分最高的那一类对应的输出score    pred = np.argmax(output.numpy())    # print('***********pred:',pred)    pred_class = output[:, pred]    # print(pred_class)    features.register_hook(extract)    pred_class.backward() # 计算梯度     grads = features_grad   # 获取梯度    # print(grads.shape)    # pooled_grads = paddle.nn.functional.adaptive_avg_pool2d( x = grads, output_size=[1, 1])    pooled_grads = grads        # 此处batch size默认为1,所以去掉了第0维(batch size维)    pooled_grads = pooled_grads[0]    # print('pooled_grads:', pooled_grads.shape)    # print(pooled_grads.shape)    features = features[0]    # print(features.shape)    # 最后一层feature的通道数    for i in range(2048):        features[i, ...] *= pooled_grads[i, ...]     heatmap = features.detach().numpy()        heatmap = np.mean(heatmap, axis=0)    # print(heatmap)    heatmap = np.maximum(heatmap, 0)    # print('+++++++++',heatmap)    heatmap /= np.max(heatmap)    # print('+++++++++',heatmap)    # 可视化原始热力图    if visual_heatmap:        plt.matshow(heatmap)        plt.show()     img = cv2.imread(img_path)  # 用cv2加载原始图像    heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0]))  # 将热力图的大小调整为与原始图像相同    heatmap = np.uint8(255 * heatmap)  # 将热力图转换为RGB格式    # print(heatmap.shape)    heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)  # 将热力图应用于原始图像    superimposed_img = heatmap * 0.4 + img  # 这里的0.4是热力图强度因子    cv2.imwrite(save_path, superimposed_img)  # 将图像保存到硬盘model_re2 = Res2Net_vd(layers=50, scales=4, width=26, class_dim=4)# model_re2 = Res2Net50_vd_26w_4s(class_dim=4)modelre2_state_dict = paddle.load("Hapi_MyCNN.pdparams")model_re2.set_state_dict(modelre2_state_dict, use_structured_name=True)use_gpu = Truepaddle.set_device('gpu:0') if use_gpu else paddle.set_device('cpu')model_re2.eval()draw_CAM(model_re2, 'data/data106772/img/test/629.webp', 'test3.webp', transform=None, visual_heatmap=True)
登录后复制
W1123 17:02:34.611114  6534 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1W1123 17:02:34.615968  6534 device_context.cc:465] device: 0, cuDNN Version: 7.6.
登录后复制
outputshape: [1, 4]featureshape: [1, 2048, 7, 7]
登录后复制
登录后复制实验结果

Paddle可视化神经网络热力图(CAM) - 游乐网

代码详解

关于代码,相信注释已经写得很明白了,需要注意的是,我把网络结构多返回了softmax层之前的特征向量,代码如下所示:

    def forward(self, inputs):        y = self.conv1_1(inputs)        y = self.conv1_2(y)        y = self.conv1_3(y)        y = self.pool2d_max(y)        blocks = []        for block in self.block_list:            y = block(y)            blocks.append(y)        # draw_features(32, 32, y.cpu().numpy(), "{}/f7_layer3.webp".format(savepath))        # y = self.convf_1(y)        y = self.pool2d_avg(y)        y = paddle.reshape(y, shape=[-1, self.pool2d_avg_channels])        out = self.out(y)        blocks.append(out)        return blocks[-1:-3:-1]
登录后复制

总结

通过该可视化方法,可以有针对性的对数据集进行扩充,以此来指导数据增强的方向。需要注意的是,大家需要对网络结构足够了解,CAM主要使用最后一层的特征向量,大家注意区分。

In [ ]

登录后复制
来源:https://www.php.cn/faq/1413508.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

Claude源码逾51万行遭泄露,Anthropic官方回应事件
AI
Claude源码逾51万行遭泄露,Anthropic官方回应事件

每日经济新闻4月1日消息 当地时间3月31日,被视为OpenAI最强竞争对手的Anthropic再次遭遇代码泄露事件,是其在一周内遭遇的第二起重大数据失误事件。Anthropic因npm包打包失误,

热心网友
04.01
揭秘AI工具如何深度渗透音乐制作:行业内的私密实践指南
AI
揭秘AI工具如何深度渗透音乐制作:行业内的私密实践指南

IT之家 3 月 31 日消息,据《滚石》杂志的深度调查显示,AI 生成工具正迅速渗透专业音乐制作领域,但整个行业却对此讳莫如深。今年早些时候,Suno 首席执行官米奇 · 舒尔曼接受《卫报》采访时

热心网友
03.31
AI工具全面优化投放链路,告别零活低效
AI
AI工具全面优化投放链路,告别零活低效

克雷西 发自 凹非寺量子位 | 公众号 QbitAIAI进入营销行业,已经是定局。艾瑞咨询报告显示,去年中国AI营销市场规模达669亿元,年复合增长率26 2%这个增速背后,是整个行业链条——从内容

热心网友
03.31
古尔曼披露:苹果Apple Intelligence在中国意外上线后下线
礼仪与书信
古尔曼披露:苹果Apple Intelligence在中国意外上线后下线

3月31日,苹果于今日凌晨开始分批推送国行Apple Intelligence Beta版,需升级至iOS 26 4及以上系统方可体验。彭博社记者马克·古尔曼今日发文称Apple Intellig

热心网友
03.31
阿里向员工发放Token,鼓励使用AI工具提升效率
AI
阿里向员工发放Token,鼓励使用AI工具提升效率

IT之家 3 月 17 日消息,据界面新闻今日报道,阿里巴巴集团正推进一项内部计划,向员工提供 Token 额度,鼓励员工在工作中使用先进的 AI 模型与工具。根据该计划,阿里员工可免费使用悟空、Q

热心网友
03.17

最新APP

火柴人传奇
火柴人传奇
动作冒险 04-01
街球艺术
街球艺术
体育竞技 04-01
飞行员模拟
飞行员模拟
休闲益智 04-01
史莱姆农场
史莱姆农场
休闲益智 04-01
绝区零
绝区零
角色扮演 04-01

热门推荐

解限机天袭者滨湾运输中心怎么实战
游戏攻略
解限机天袭者滨湾运输中心怎么实战

解限机天袭者滨湾运输中心实战教学:制霸空中与地形的终极指南 在《解限机》游戏的所有对战地图中,滨湾运输中心无疑是对玩家战术素养与地图掌控力的顶级试炼场。这片区域地形结构极为复杂,高楼耸立,集装箱遍布,形成了无数视野盲区与火力交叉点。若想在滨湾运输中心取得胜利,空有强大机甲与火力是远远不够的,关键在于

热心网友
04.06
Soul聊天记录如何批量删除
手机教程
Soul聊天记录如何批量删除

Soul聊天记录一键清理:批量删除完整步骤与隐私保护技巧 管理社交应用,如同定期整理你的数字家园。随着使用时间增长,Soul中的聊天记录会不断累积,无论是为了释放宝贵的手机存储空间,还是出于对个人隐私安全的重视,掌握批量删除功能都显得尤为必要。本文将为你提供一份清晰、易操作的Soul聊天记录批量删除

热心网友
04.06
GTA6不再延期 开发进入最终收尾阶段
游戏资讯
GTA6不再延期 开发进入最终收尾阶段

知名爆料人Kiwi Talkz近日透露,《GTA6》开发已进入最终收尾阶段,游戏确认不会再次延期。据爆料消息指出,其他游戏厂商要追赶R星在《GTA6》中达成的技术与内容高度,恐需15至20年时间。R星团队在部分技术目标上的规划极具突破性,展现了远超行业当前水准的雄心。 对于持续等待的全球玩家来说,这

热心网友
04.06
鸣潮奥古斯塔怎么培养
游戏攻略
鸣潮奥古斯塔怎么培养

《鸣潮》奥古斯塔养成全攻略:核心材料解析与高效培养路线 若想在《鸣潮》中将强力角色奥古斯塔培养成真正的战场主宰,详尽了解其养成材料是至关重要的第一步。这些资源直接决定了角色从前期成长到后期成型的完整路径,规划是否合理将极大影响实战表现与队伍构建。 首先,系统梳理奥古斯塔所需的各类养成素材是基础。经验

热心网友
04.06
索尼PC移植策略生变 第一方重回独占
游戏资讯
索尼PC移植策略生变 第一方重回独占

索尼工作室悄然修改措辞,PlayStation独占策略或将全面收紧,引发行业热议 近期,游戏行业内部关注到一个值得玩味的现象:索尼互动娱乐旗下多家核心第一方工作室,静悄悄地更新了其官方网站的简介说明。仔细对比可以发现,更新后的措辞发生了微妙但关键的转变——此前涉及PC平台的描述已基本被移除,取而代之

热心网友
04.06