模型中间部分的卷积可视化

news2024/9/20 10:51:02

整体代码如下:

    def forward(self, x):
        x = self.conv1(x)
        x1 = x
        out_img3 = x1.squeeze()
        print(out_img3.shape)
        print("经过第一个卷积之后的输出:",x.shape)
import yaml
from omegaconf import OmegaConf
from pathlib import Path
from PIL import Image
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
# 加载图像
img_path = "E:/fasterrcnn/input_images/cat_dog.png"
image = Image.open(img_path)
transform = transforms.ToTensor()
tensor_image = transform(image)
transform_size = transforms.Resize((512,512))
out = transform_size(tensor_image)
tensor_image_batch = out.unsqueeze(0)

yaml_file_path = 'F:/code/DEKR-main/experiments/coco/w32/w32_4x_reg03_bs10_512_adam_lr1e-3_coco_x140.yaml'
yaml_file = Path(yaml_file_path)
if yaml_file.exists():
    with yaml_file.open('r') as file:
        cfg_dict = yaml.safe_load(file)
        cfg = OmegaConf.create(cfg_dict)
    out_img3 = PoseHigherResolutionNet(cfg)
    input = torch.randn(1, 3, 512, 512)
    out_img3 = out_img3.forward(tensor_image_batch)
    # 选择要可视化的通道索引
    selected_channels = [0, 15, 30, 45, 63]  # 例如,选择第0、15、30、45和63个通道

    # 创建一个包含多个子图的图形
    fig, axes = plt.subplots(1, len(selected_channels), figsize=(15, 5))

    # 遍历选定的通道并绘制它们
    for i, ax in enumerate(axes):
        channel_image = out_img3[selected_channels[i]]  # 提取选定通道的图像
        print(channel_image.shape)
        out_img1 = transforms.ToPILImage()(channel_image)
        ax.imshow(out_img1, cmap='viridis')  # 使用 viridis 颜色图显示图像
        ax.set_title(f'Channel {selected_channels[i]}')  # 设置子图的标题
        ax.axis('off')  # 关闭坐标轴

    # 显示图形
    plt.tight_layout()  # 调整子图参数, 使之填充整个图像区域
    plt.show()
    # print(pose.forward(input))

else:
    print(f"Error: The YAML file {yaml_file_path} does not exist.")

首先加载图像

img_path = "E:/fasterrcnn/input_images/cat_dog.png"
image = Image.open(img_path)

然后将图像转换为tensor,也就是数组的形式

transform = transforms.ToTensor()
tensor_image = transform(image)

之后resize大小为(3,512,512)的形式

transform_size = transforms.Resize((512,512))
out = transform_size(tensor_image)

到了这里还不能作为模型的输入,模型的输入是四维的(batch_size,input_channel,width,height)

所以要加一个维度

tensor_image_batch = out.unsqueeze(0)

调用模型

out_img3 = PoseHigherResolutionNet(cfg)
    input = torch.randn(1, 3, 512, 512)
    out_img3 = out_img3.forward(tensor_image_batch)

我们取前向传播的第一个卷积输出,输出的大小为(1,64,112,112),将输出x定义为x1,并用squeeze将其batch_size去掉变成(64,112,112)

    def forward(self, x):
        x = self.conv1(x)
        x1 = x
        out_img3 = x1.squeeze()
        print(out_img3.shape)

 选择可视化的对应通道

# 选择要可视化的通道索引
    selected_channels = [0, 15, 30, 45, 63]  # 例如,选择第0、15、30、45和63个通道

创建一个包含多个通道子图的图形

# 创建一个包含多个子图的图形
    fig, axes = plt.subplots(1, len(selected_channels), figsize=(15, 5))

之后遍历通道并显示出来

# 遍历选定的通道并绘制它们
    for i, ax in enumerate(axes):
        channel_image = out_img3[selected_channels[i]]  # 提取选定通道的图像
        print(channel_image.shape)
        out_img1 = transforms.ToPILImage()(channel_image)
        ax.imshow(out_img1, cmap='viridis')  # 使用 viridis 颜色图显示图像
        ax.set_title(f'Channel {selected_channels[i]}')  # 设置子图的标题
        ax.axis('off')  # 关闭坐标轴

显示

# 显示图形
    plt.tight_layout()  # 调整子图参数, 使之填充整个图像区域
    plt.show()

让其封装到一些函数,方便调用

def figure_trans():
    # 加载图像并转换为数组的形式,调整大小
    img_path = "E:/fasterrcnn/input_images/cat_dog.png"
    image = Image.open(img_path)
    transform = transforms.ToTensor()
    tensor_image = transform(image)

    transform_size = transforms.Resize((512, 512))
    out = transform_size(tensor_image)
    tensor_image_batch = out.unsqueeze(0)

    return tensor_image_batch

def yml_plot():
    yaml_file_path = 'F:/code/DEKR-main/experiments/coco/w32/w32_4x_reg03_bs10_512_adam_lr1e-3_coco_x140.yaml'
    yaml_file = Path(yaml_file_path)
    tensor_image_batch = figure_trans()

    if yaml_file.exists():
        with yaml_file.open('r') as file:
            cfg_dict = yaml.safe_load(file)
            cfg = OmegaConf.create(cfg_dict)
        out_img3 = PoseHigherResolutionNet(cfg)
        # input = torch.randn(1, 3, 512, 512)
        out_img3 = out_img3.forward(tensor_image_batch)
        # 选择要可视化的通道索引
        selected_channels = [0, 15, 30, 45, 63]  # 例如,选择第0、15、30、45和63个通道

        # 创建一个包含多个子图的图形
        fig, axes = plt.subplots(1, len(selected_channels), figsize=(15, 5))

        # 遍历选定的通道并绘制它们
        for i, ax in enumerate(axes):
            channel_image = out_img3[selected_channels[i]]  # 提取选定通道的图像
            print(channel_image.shape)
            out_img1 = transforms.ToPILImage()(channel_image)
            ax.imshow(out_img1, cmap='viridis')  # 使用 viridis 颜色图显示图像
            ax.set_title(f'Channel {selected_channels[i]}')  # 设置子图的标题
            ax.axis('off')  # 关闭坐标轴

        # 显示图形
        plt.tight_layout()  # 调整子图参数, 使之填充整个图像区域
        plt.show()
        # print(pose.forward(input))

    else:
        print(f"Error: The YAML file {yaml_file_path} does not exist.")

plt_figure = yml_plot()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

景联文科技:提供高质量多模态数据标注,推动智能化转型

随着人工智能技术的快速发展,多模态数据标注成为推动智能系统更深层次理解和应用的关键技术之一。 作为行业领先的多模态数据标注服务商,景联文科技凭借其在技术、流程和人才方面的综合优势,推出了全面的多模态标注解决方案,助力…

C语言详细笔记--构造数据类型(共用体)

目录 一、共用体类型声明 二、共用体变量的定义 三、共用体变量的初始化 四、共用体变量的引用 一、共用体类型声明 共用体类型是一种多个不同类型数据共享存储空间的构造类型,即共用体变量的所以成员占用同一个存储空间,一般声明格式如下&#xff…

【LeetCode面试150】——205同构字符串

博客昵称:沈小农学编程 作者简介:一名在读硕士,**定期更新相关算法面试题**,欢迎关注小弟! PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大…

录屏没声音怎么办?3招解决,教您秒变声音大师

在录屏的过程中,突然发现录制的视频没有声音,这无疑会让人感到沮丧。声音作为视频的重要组成部分,一旦缺失,便会让整个作品失去生动性。然而,不必过于担心,因为录屏没声音的问题并非无法解决。 接下来&…

新手c语言讲解及题目分享(十七)--运算符与表达式专项练习

本文主要讲解c语言的基础部分,运算符与表达式的学习,在这一部分中,往往有许多细节的东西需要去记住。当各种运算符一起用时,就会存在优先级的关系,本文末尾有各种运算符的优先级顺序表。 参考书目和推荐学习书目&#…

开放式耳机哪个牌子好?长文传授6招秘籍,彻底远离坑货!

​大家好,作为一位专注于评测各类数码产品的博主,今天我特别推荐开放式耳机作为我们日常的首选。这种耳机以其独特的设计,避免了传统耳机长时间佩戴可能带来的不适和感染风险。开放式耳机佩戴简便且稳固,尤其适合热爱跑步和运动的…

解决TMP_InputField 在WebGL(抖音)上不能唤起虚拟键盘,不能使用手机内置输入法的问题

整整花费了一天时间测试和解决。试验了多个方法,花了不少美刀,最终才发现抖音这个官方文档,哭了: https://partner.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/open-capacity/capabi…

[Python] 从0到1实现一个简单的数字图像识别大模型

目录 前言介绍 神经网络 简单的神经网络 使用均方误差与正规方程实现神经网络 随机梯度下降与批量梯度下降实现神经网络 用更复杂的梯度下降实现一个神经网络 利用Sigmoid激活函数实现神经网络 使用 PyTorch 框架快速构建一个神经网络、 案例实战 前言介绍 大模型的本…

python-网页自动化(二)

获取元素属性 1. 获取属性 以百度首页的logo为例&#xff0c;获取logo相关属性 <img hidefocus"true" id"s_lg_img" class"index-logo-src" src"//www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" width"270…

微服务-nacos

nacos-注册中心 启动 服务注册到nacos

【MIT 6.5840/6.824】In Search of an Understandable Consensus Algorithm 学习笔记

In Search of an Understandable Consensus Algorithm 1 Introduction2 Replicated state machines3 What’s wrong with Paxos?4 Designing for understandability5 The Raft consensus algorithm5.1 Raft basics5.2 Leader election5.3 Log replication5.4 Safety5.4.1 Elec…

知识付费最新版知识付费做的最好的平台,网创资源知识付费 知识付费网站搭建,搭建知识付费APP平台教学:在线教育系统源码。

目录 前言&#xff1a; 一、知识付费平台特点 二、知识付费平台功能 三、 知识付费小程序 前言&#xff1a; 知识付费小程序是一种在线学习平台&#xff0c;用户可以通过该小程序以一定的费用获取专业知识和技能。这些知识和技能可以来自行业专家、教育机构或个人创作者。知…

Docker 容器技术:简化 MySQL 主从复制部署与优化

文章目录 前言一、为什么基于Docker搭建&#xff1f;二、利用Docker搭建主从服务器2.1 配置Master&#xff08;主&#xff09;2.2 配置Slave&#xff08;从&#xff09;2.3 链接Master&#xff08;主&#xff09;和Slave&#xff08;从&#xff09;2.4 测试主从复制 三、常见问…

面试官:你有写过自定义指令吗?自定义指令的应用场景有哪些?

一、什么是指令 开始之前我们先学习一下指令系统这个词 指令系统是计算机硬件的语言系统&#xff0c;也叫机器语言&#xff0c;它是系统程序员看到的计算机的主要属性。因此指令系统表征了计算机的基本功能决定了机器所要求的能力 在vue中提供了一套为数据驱动视图更为方便的…

VMWARE VCENTER6.7 VCSA通过Web5480进行版本升级

VCENTER当前版本如下图 操作前先给VCENTER打一个快照&#xff0c;出问题可以立即回退 1、先下载VCSA镜像&#xff0c;并将VCSA镜像上传至DataStore中&#xff1b; 2、选中VCSA虚拟机&#xff0c;编辑配置 3、挂载新上传的VCSA镜像&#xff0c;一定要勾选“已连接”和“打开电源…

自定义string类

#include <iostream> #include <string> int main() { std::string str "Hello, World!"; // 使用 c_str() 将 std::string 转换为 C 风格字符串&#xff0c;并传递给 printf printf("The string is: %s\n", str.c_str()); // 尝试修改…

网络层 V(IPv6)【★★★★★★】

一、IPv6 的特点 IP 是互联网的核心协议。现在使用的 IP&#xff08;即 IPv4 ) 是在 20 世纪 70 年代末期设计的。互联网经过几十年的飞速发展&#xff0c;到 2011 年 2 月&#xff0c;IPv4 的地址已经耗尽&#xff0c; ISP 已经不能再申请到新的 IP 地址块了。我国在 2014 年…

全能与专精:探索未来AI模型的发展趋势与市场潜力

文章目录 每日一句正能量前言AI模型的全面评估和比较AI模型的专精化和可扩展性AI模型的合理使用和道德规范后记 每日一句正能量 一个人&#xff0c;如果没有经受过投资失败的痛楚&#xff0c;又怎么会看到绝望之后的海阔天空。很多时候&#xff0c;经历了人生中最艰难的事&…

告别繁琐切换,可道云teamOS让企业微信和钉钉无缝对接,爽到飞起

在当今快节奏的工作环境中&#xff0c;企业对于高效办公工具的需求日益增强。特别是企业微信和钉钉的普及&#xff0c;已成为许多企业日常沟通协作的基石。然而&#xff0c;传统企业网盘与这些平台的割裂&#xff0c;常常让工作流程变得繁琐。 幸运的是&#xff0c;teamOS的出…

vs2019编译opencv+contribute+gpu

1、提前准备 vs2019、opencv4.4.0、opencv-contribute4.4.0、CUDA Toolkit 11.8&#xff08;不能高于自己电脑的CUDA版本&#xff09;、CUDNN8.9.6 ps&#xff1a;先提前准备环境 1&#xff09;cmd中查看&#xff1a;nvidia-smi查看自己的显卡信息&#xff0c;不存在下述信息…