Pytorch可视化神经网络热力图

from PIL import Image
import torch
import torchvision.transforms as transforms
import numpy as np
import matplotlib.pyplot as plt
import cv2

def draw_CAM(model,img_path,save_path,resize=227,isSave=False,isShow=False):
    # 图像加载&预处理
    img=Image.open(img_path).convert('RGB')
    loader = transforms.Compose([transforms.Resize(size=(resize,resize)),transforms.ToTensor()]) 
    img = loader(img).unsqueeze(0) # unsqueeze(0)在第0维增加一个维度
    
    # 获取模型输出的feature/score
    model.eval() # 测试模式,不启用BatchNormalization和Dropout
    feature=model.features(img)
    output=model.classifier(feature.view(1,-1))
    
    # 预测得分最高的那一类对应的输出score
    pred = torch.argmax(output).item()
    pred_class = output[:, pred]

    # 记录梯度值
    def hook_grad(grad):
        global feature_grad
        feature_grad=grad
    feature.register_hook(hook_grad)
    # 计算梯度
    pred_class.backward()
    
    grads=feature_grad # 获取梯度
    
    pooled_grads = torch.nn.functional.adaptive_avg_pool2d(grads, (1, 1)) # adaptive_avg_pool2d自适应平均池化函数,输出大小都为(1,1)

    # 此处batch size默认为1,所以去掉了第0维(batch size维)
    pooled_grads = pooled_grads[0] # shape为[batch,通道,size,size],此处batch为1,所以直接取[0]即取第一个batch的元素,就取到了每个batch内的所有元素
    features = feature[0] # 取【0】原因同上
    
    ########################## 导数(权重)乘以相应元素
    # 512是最后一层feature的通道数
    for i in range(len(features)):
        features[i, ...] *= pooled_grads[i, ...] # features[i, ...]与features[i]效果好像是一样的,都是第i个元素
    ##########################
    
    # 绘制热力图
    heatmap = features.detach().numpy()
    heatmap = np.mean(heatmap, axis=0) # axis=0,对各列求均值,返回1*n
 
    heatmap = np.maximum(heatmap, 0)
    heatmap /= np.max(heatmap)
    
    # 可视化原始热力图
    if isShow:
        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格式
    heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)  # 将热力图应用于原始图像
    superimposed_img = heatmap * 0.4 + img  # 这里的0.4是热力图强度因子
    # 将图像保存到硬盘
    if isSave:
        cv2.imwrite(save_path, superimposed_img)  
    # 展示图像
    if isShow:
        superimposed_img/=255
        plt.imshow(superimposed_img)
import torchvision.models as models
model=models.alexnet()
# draw_CAM(model,'/Users/liuyanzhe/Study/陶瓷研究相关/陶瓷数据/ceramic_data/训练/1牡丹/mudan15.png','/Users/liuyanzhe/Downloads/热力图1.png',isSave=True,isShow=True)
draw_CAM(model,'/Users/liuyanzhe/Downloads/2.jpg','/Users/liuyanzhe/Downloads/热力图1.png',isSave=True,isShow=True)

在这里插入图片描述

在这里插入图片描述

import torchvision.models as models
model=models.vgg16()
# draw_CAM(model,'/Users/liuyanzhe/Study/陶瓷研究相关/陶瓷数据/ceramic_data/训练/1牡丹/mudan15.png','/Users/liuyanzhe/Downloads/热力图2.png',isSave=True,isShow=True)
draw_CAM(model,'/Users/liuyanzhe/Downloads/2.jpg','/Users/liuyanzhe/Downloads/热力图2.png',isSave=True,isShow=True)

在这里插入图片描述
在这里插入图片描述

相关推荐
<p> <strong><span> </span></strong> </p> <p class="ql-long-16800510"> <span style="color:#333333;"><strong><span style="color:#333333;"> </span></strong></span> </p> <p class="ql-long-24357476"> <span style="color:#E53333;font-size:14px;">每天前100人再送5门编程课!</span> </p> <p class="ql-long-24357476"> <span style="color:#E53333;font-size:14px;">AI+5门300元课程+社群闭门分享会</span> </p> <p class="ql-long-24357476"> <span style="color:#E53333;font-size:14px;">源码开源下载:<a href="https://github.com/DjangoPeng/keras-101/tree/master/code_samples">https://github.com/DjangoPeng/keras-101/tree/master/code_samples</a></span> </p> <p> <br /> </p> <h3 class="ql-long-26664262"> <div class="ql-long-26664262"> <span style="font-size:14px;color:#337FE5;">【为什么学AI】</span> </div> </h3> <p class="ql-long-26664262"> <span style="font-size:14px;">归功于近年来大规模数据和硬件计算能力的大幅度提升,人工智能的概念近两年一直是市场追捧的对象。目前各大厂都争先恐后地布局AI,落地各类AI的的商业应用,也随之打响了一场激烈的人才争夺战。长远来看,越快将 AI 用于自己的工作中就能越早体会到AI带来的收益。</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:14px;color:#337FE5;">【讲师介绍】</span></strong> </p> <p class="ql-long-16800510"> <span style="font-size:14px;">彭靖田 Google Developer Experts。</span> </p> <p class="ql-long-16800510"> <span style="font-size:14px;">曾为 TensorFlow Top级 的贡献者,著书《深入理解TensorFlow》,是国内第一本深度剖析 Google AI 框架的畅销书。</span> </p> <p class="ql-long-16800510"> <span style="font-size:14px;">曾从0到1深入参与了华为 2012 实验室深度学习平台和华为深度学习云服务的设计与研发工作。</span> </p> <p class="ql-long-16800510"> <br /> </p> <h3 class="ql-long-26664262"> <p> <span style="color:#337FE5;"><span style="font-size:14px;color:#337FE5;">【课程设计】</span></span> </p> </h3> <p class="ql-long-26664262"> <br /> </p> <p class="ql-long-26664262"> <span style="font-size:14px;">课程内容基于最新的Keras版本(你也可以使用 TensorFlow 2 的 tf.keras 模块),其中有大量独家解读、案例,以及不少讲师一线实战多年的方法论和深度思考。同时,在层次划分上,难易兼顾,循序渐进。既有核心的基础知识,也有高级的进阶操作,尽量做到“老少皆宜”。</span> </p> <p class="ql-long-26664262"> <br /> </p> <p class="ql-long-26664262"> <span style="font-size:14px;"><strong>课程分为基础篇、入门篇和实战篇:</strong></span> </p> <p class="ql-long-26664262"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262"> <strong><span style="font-size:14px;">一、基础篇:</span></strong> </p> <p class="ql-long-26664262"> <span style="font-size:14px;">主要讲解人工智能发展史和深度学习脱颖而出的原由,以及神经网络的基础概念、理论实现、优化原理和计算方法。</span> </p> <p class="ql-long-26664262"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262"> <strong><span style="font-size:14px;">二、入门篇:</span></strong> </p> <p class="ql-long-26664262"> <span style="font-size:14px;">主攻快速上手,通过7个小节让你从0到1实现环境搭建、模型优化,直接试水2个实战项目。同时,增强AI的理论学习,系统掌握机器学习3大分支、模型评估方法、数据预处理常用手段与过拟合问题的解决方案。</span> </p> <p class="ql-long-26664262"> <span style="font-size:14px;"><br /> </span> </p> <p class="ql-long-26664262"> <strong><span style="font-size:14px;">三、实战篇:</span></strong> </p> <p class="ql-long-26664262"> <span style="font-size:14px;">通过4个实战全面掌握深度学习理论与实现,涵盖目标检测、图像分类、可视化和可解释性学习、迁移学习、特征提取、数据增强等。带你综合运用前面所学的所有知识,逐渐熟练AI开发流程与技能。</span> </p> <p> <br /> </p> <p> <br /> </p> <p class="MsoNormal"> <br /> </p> <p> <img src="https://img-bss.csdn.net/202002271330419257.png" alt="" /> </p> <p> <span style="font-size:14px;">课程包含思维导图上的所有内容(价值199元)前500名立减100元,仅99元买完就能学!</span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页