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

简介: 笔记

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

直接附代码:

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天前
|
机器学习/深度学习 自然语言处理 自动驾驶
CNN的魅力:探索卷积神经网络的无限可能
卷积神经网络(Convolutional Neural Networks, CNN)作为人工智能的重要分支,在图像识别、自然语言处理、医疗诊断及自动驾驶等领域展现了卓越性能。本文将介绍CNN的起源、独特优势及其广泛应用,并通过具体代码示例展示如何使用TensorFlow和Keras构建和训练CNN模型。
|
1天前
|
机器学习/深度学习 数据采集 数据可视化
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
本文详细介绍如何使用PyTorch构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行图像分类。从数据预处理、模型定义到训练过程及结果可视化,文章全面展示了深度学习项目的全流程。通过实际操作,读者可以深入了解CNN在图像分类任务中的应用,并掌握PyTorch的基本使用方法。希望本文为您的深度学习项目提供有价值的参考与启示。
|
1天前
|
编解码 人工智能 文件存储
卷积神经网络架构:EfficientNet结构的特点
EfficientNet是一种高效的卷积神经网络架构,它通过系统化的方法来提升模型的性能和效率。
7 1
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出卷积神经网络(CNN)的奥秘
【9月更文挑战第3天】在人工智能的浪潮中,卷积神经网络(CNN)无疑是最耀眼的明星之一。本文将通过浅显易懂的语言,带你一探CNN的核心原理和应用实例。从图像处理到自然语言处理,CNN如何改变我们对数据的解读方式?让我们一起走进CNN的世界,探索它的魅力所在。
|
1天前
|
机器学习/深度学习 人工智能 监控
深度学习浪潮中的轻舟:探索卷积神经网络的奥秘
在这个数据泛滥的时代,深度学习如同一艘巨轮,在知识的海洋中破浪前行。然而,在这艘巨轮上,有一个小小的角落常常被人忽视—那就是卷积神经网络(CNN)。本文将带领读者一探究竟,从CNN的核心概念到其在实际中的应用,我们将用通俗易懂的语言,揭开这一技术神秘面纱,让每一位对深度学习感兴趣的朋友都能轻松理解并应用CNN。
6 0
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】在人工智能的浪潮中,深度学习以其强大的数据处理能力成为时代的宠儿。本文将引导你走进深度学习的核心组件之一——卷积神经网络(CNN),并带你一探其背后的奥秘。通过简明的语言和直观的代码示例,我们将一起构建一个简易的CNN模型,理解它在图像处理领域的应用,并探索如何利用Python和TensorFlow实现它。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇通往深度学习世界的大门。
|
9天前
|
安全 Apache 数据安全/隐私保护
你的Wicket应用安全吗?揭秘在Apache Wicket中实现坚不可摧的安全认证策略
【8月更文挑战第31天】在当前的网络环境中,安全性是任何应用程序的关键考量。Apache Wicket 是一个强大的 Java Web 框架,提供了丰富的工具和组件,帮助开发者构建安全的 Web 应用程序。本文介绍了如何在 Wicket 中实现安全认证,
21 0
|
10天前
|
机器学习/深度学习 自动驾驶 算法框架/工具
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】 本文旨在通过浅显易懂的方式,引导初学者步入卷积神经网络(CNN)的神秘世界。我们将从CNN的基础概念出发,逐步深入到其在图像处理中的应用实例,最后通过一个简单的Python代码示例,展示如何实现一个基础的CNN模型。无论你是编程新手还是深度学习领域的初探者,这篇文章都将为你打开一扇了解和掌握CNN的大门。
|
10天前
|
机器学习/深度学习 数据采集 TensorFlow
从零到精通:TensorFlow与卷积神经网络(CNN)助你成为图像识别高手的终极指南——深入浅出教你搭建首个猫狗分类器,附带实战代码与训练技巧揭秘
【8月更文挑战第31天】本文通过杂文形式介绍了如何利用 TensorFlow 和卷积神经网络(CNN)构建图像识别系统,详细演示了从数据准备、模型构建到训练与评估的全过程。通过具体示例代码,展示了使用 Keras API 训练猫狗分类器的步骤,旨在帮助读者掌握图像识别的核心技术。此外,还探讨了图像识别在物体检测、语义分割等领域的广泛应用前景。
7 0
|
10天前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门
【8月更文挑战第31天】 在探索人工智能的奥秘时,我们常常被其背后的复杂算法所迷惑。本文旨在以浅显易懂的语言,带你走进深度学习的世界,特别是卷积神经网络(CNN)这一核心概念。我们将一起了解CNN的基本结构,它是如何工作的,以及为什么它在图像识别领域如此强大。通过简单的代码示例,你将学会如何搭建一个简单的CNN模型,并在自己的数据集上进行实验。无论你是编程新手还是深度学习初学者,这篇文章都将为你打开一扇通往高级人工智能应用的大门。
下一篇
DDNS