分类卷积网络的可视化【附代码】

简介: 笔记

写了一个有关对卷积网络可视化的小工具,可以直接调用使用,不需要对网络重新训练!【如果用在目标检测网络或者其他网络中需要稍微进行修改】

直接附代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
def Cnn_View(cnn_output, classes_layer, Or_img):
    '''
    cnn_output.size(1)是获得上一层的通道数
    如果你用的是CPU推理的,那么在cam处你应该将张量放在cpu上【我这里默认用的cuda】
    因为我的网络输入大小为224*224大小,所以需要对resize成224*224,以保证叠加图像大小一致!!
    最后将热力图和原始图进行一个叠加
    本代码是放在平均池化之后,分类层之前的,即classes_layer是定义的全连接层,如果放在其他层可以把该层注释掉
    '''
    Or_img = cv2.imread(Or_img)
    cam = nn.Conv2d(cnn_output.size(1), 1, 1, 1, 1).cuda()  # 512是上一层卷积输出后的通道,可以根据自己的网络修改
    cnn_output1 = cnn_output
    cnn_output = torch.flatten(cnn_output, 1)  # 平铺  (batch_size,512*7*7)
    cnn_output = classes_layer(cnn_output)  # 分类  (batch_size,512*7*7,num_classes)
    preds = torch.softmax(cnn_output[0], dim=-1).cpu().numpy()
    cam_output = cam(cnn_output1)
    cam_output[0, :, :, 1] = cam_output[0, :, :, 1 if preds.all() > 0.5 else 0]
    cam_output /= 10
    cam_output[cam_output < 0] = 0
    cam_output[cam_output > 1] = 1
    cam_output = cam_output.cpu().numpy()
    cam_output = cam_output.squeeze(0)
    img = cam_output.transpose(1, 2, 0)
    img = cv2.resize(img, (224, 224))
    img = np.uint8(255 * img)
    heatmap = cv2.applyColorMap(img, cv2.COLORMAP_JET)
    Or_img = cv2.resize(Or_img, (224, 224))
    out = cv2.addWeighted(Or_img, 0.8, heatmap, 0.4, 0)
    plt.axis('off')
    plt.imshow(out[:, :, ::-1])
    plt.show()

在网络中调用该函数,放在网络的forward(self,x)函数下,如果是分类网络,可以放在平均池化层后面

例如:

    def forward(self, x):
        x = self.features(x)  # 主干网络  14*14输出通道512
        x = self.avgpool(x)  # 平均池化  7*7输出通道512   (batch_size,512,7,7)
        Cnn_View(x, self.classifier, input("输入要叠加的原始图像: "))

最终得到的热力图和原始图叠加后:image.pngimage.pngimage.png

这样可以更进一步理解卷积的可视化,还有就是可以放在论文中,使自己的论文看着更好看点。放在目标检测中应该需要对上面稍微改一下。

目录
相关文章
|
1天前
|
机器学习/深度学习 并行计算 测试技术
BiTCN:基于卷积网络的多元时间序列预测
该文探讨了时间序列预测中模型架构的选择,指出尽管MLP和Transformer模型常见,但CNN在预测领域的应用较少。BiTCN是一种利用两个时间卷积网络来编码历史和未来协变量的模型,提出于《Parameter-efficient deep probabilistic forecasting》(2023年3月)。它包含多个由扩张卷积、GELU激活函数、dropout和全连接层组成的临时块,有效地处理序列数据。实验表明,BiTCN在具有外生特征的预测任务中表现优于N-HiTS和PatchTST。BiTCN的效率和性能展示了CNN在时间序列预测中的潜力。
11 1
|
3天前
|
机器学习/深度学习 人工智能 算法
【AI 初识】什么是卷积神经网络 (CNN)?
【5月更文挑战第2天】【AI 初识】什么是卷积神经网络 (CNN)?
|
3天前
|
机器学习/深度学习 自然语言处理 搜索推荐
|
5天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】卷积神经网络(CNN)的原理与应用
【4月更文挑战第30天】本文介绍了卷积神经网络(CNN)的基本原理和结构组成,包括卷积层、激活函数、池化层和全连接层。CNN在图像识别等领域表现出色,其层次结构能逐步提取特征。在Python中,可利用TensorFlow或PyTorch构建CNN模型,示例代码展示了使用TensorFlow Keras API创建简单CNN的过程。CNN作为强大深度学习模型,未来仍有广阔发展空间。
|
5天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
Python用线性回归和TensorFlow非线性概率神经网络不同激活函数分析可视化
10 0
|
5天前
|
机器学习/深度学习 数据可视化
R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化(下)
R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化
12 0
|
5天前
|
机器学习/深度学习 数据采集 数据可视化
R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化(上)
R语言逻辑回归、决策树、随机森林、神经网络预测患者心脏病数据混淆矩阵可视化
14 0
|
5天前
|
机器学习/深度学习 PyTorch 算法框架/工具
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
Python用GAN生成对抗性神经网络判别模型拟合多维数组、分类识别手写数字图像可视化
|
6天前
|
机器学习/深度学习 数据可视化 TensorFlow
Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
16 0
|
7天前
|
机器学习/深度学习 数据可视化
R语言用灰色模型 GM (1,1)、神经网络预测房价数据和可视化
R语言用灰色模型 GM (1,1)、神经网络预测房价数据和可视化
16 1