pytorch对中间特征层可视化方案

这篇具有很好参考价值的文章主要介绍了pytorch对中间特征层可视化方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要介绍如何使用pytorch获得已经训练好的网络的中间特征层,并将其转化为热力图的简单方法

效果图

中间特征可视化,文本检测,pytorch,计算机视觉,目标检测

1、在原本的test代码上进行修改

import matplotlib.pyplot as plt

2、随便写一个钩子函数(具体了解可以搜索“pytorch中的钩子(Hook)有何作用?”)

# 用于保存信息
output_list = []
input_list = []


# 定义hook方法(类似一个插件函数)
def forward_hook(module, data_input, data_output):
    # 这里简单进行保存相关的特征层
    # 也可以对特征层进行操作
    input_list.append(data_input)
    output_list.append(data_output)

3、然后注册一下钩子函数(在你需要保存的卷积层进行注册)

        register_forward_hook为在前向传播时工作

        如何查阅相关卷积层的名字,使用model.named_parameters()进行遍历查阅(本文不作详细解释)

# model.结构.某个卷积层.register_forward_hook(forward_hook)
model.det_head.conv2.register_forward_hook(forward_hook)

4、可视化一下

# 特征输出可视化
for i in range(6):  # 可视化卷积相应的通道数量
    # 以下绘制了一个宽度为6,高度为1的展示区域
    plt.subplot(6, 1, i + 1)
    plt.axis('off')
    # 制定使用jet热力图展示,还有其他的展示形式
    plt.imshow(output_list[0].data.cpu().numpy()[0, i, :, :], cmap='jet')
# 保存起来,无白边保存
plt.savefig(file_path, bbox_inches='tight', pad_inches=0)  ## 保存图片
# 在批量操作时,每次都会弹出来
# plt.show()  

5、代码展示(不全,仅仅展示如何在test.py中添加相关代码)文章来源地址https://www.toymoban.com/news/detail-536622.html

# 1、导入包
import matplotlib.pyplot as plt


# 2、定义保存信息的数组
output_list = []
input_list = []


# 3、定义hook方法
def forward_hook(module, data_input, data_output):
    input_list.append(data_input)
    output_list.append(data_output)


# 主要代码如下!!!!
def test(test_loader, model, cfg):
    model.eval()
    
    # 4、进行注册hook方法
    model.det_head.conv2.register_forward_hook(forward_hook)

    for idx, data in enumerate(test_loader):
        # 5、遍历操作、每次清空一下
        output_list.clear()
        input_list.clear()
        print('Testing %d/%d\r' % (idx, len(test_loader)), flush=True, end='')
        data.update(dict(cfg=cfg))


        # 6、forward,hook函数会生效
        with torch.no_grad():
            outputs = model(**data)

        # save result
        image_name, _ = osp.splitext(
            osp.basename(test_loader.dataset.img_paths[idx]))
        rf.write_result(image_name, outputs)

        # 7、生成热力图保存路径(自己按照自己的保存路径即可)
        tmp_folder = cfg.test_cfg.result_path.replace('.zip', '_visualization')
        file_name = '%s.jpg' % image_name
        file_path = osp.join(tmp_folder, file_name)
        # 8、特征输出可视化
        for i in range(6):  # 可视化了32通道
            plt.subplot(1, 6, i + 1)
            plt.axis('off')
            plt.imshow(output_list[0].data.cpu().numpy()[0, i, :, :], cmap='jet')
        # 9、保存中间特征层的热力图
        plt.savefig(file_path, bbox_inches='tight', pad_inches=0)  ## 保存图片
        # plt.show()  # 展示热力图,由于现在是批量操作,故注释


# 正常的模型加载操作,可忽略!!!按照自己的模型加载方法即可!!!
def main(args):
    # 读取配置文件
    cfg = Config.fromfile(args.config)

    # data loader数据加载
    data_loader = build_data_loader(cfg.data.test)
    test_loader = torch.utils.data.DataLoader(
        data_loader,
        batch_size=1,
        shuffle=False,
        num_workers=0,
    )
    
    # 模型加载
    model = build_model(cfg.model)
    model = model.cuda()

    # 加载预训练权重
    checkpoint = torch.load(args.checkpoint, map_location='cpu')
    d = dict()
    for key, value in checkpoint['state_dict'].items():
        tmp = key[7:]
        d[tmp] = value
    model.load_state_dict(d)

    # test
    test(test_loader, model, cfg)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Hyperparams')
    parser.add_argument('config', help='config file path')
    parser.add_argument('checkpoint', nargs='?', type=str, default=None)
    parser.add_argument('--report_speed', action='store_true')
    args = parser.parse_args()

    main(args)

到了这里,关于pytorch对中间特征层可视化方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉特征图可视化与注意力图可视化(持续更新)

    可视化代码: 使用: 结果示例: 可视化代码: 使用: 结果示例:  优化的可视化代码可视化结果更加清晰 参考:GitHub - z1069614715/objectdetection_script: 一些关于目标检测的脚本的改进思路代码,详细请看readme.md 可视化代码:  使用: 结果示例:  参考:GitHub - z1069614715/object

    2024年02月11日
    浏览(39)
  • 特征可视化技术(CAM)

    https://zhuanlan.zhihu.com/p/269702192 CAM技术可以帮助我们理解CNN在图像中寻找目标对象的过程,并且可以用于可视化CNN的中间层特征,以及对图像分类结果的解释和可视化。CAM技术的实现比较简单,可以使用常用的深度学习框架如PyTorch和TensorFlow来实现。 CAM(Class Activation Map)是一

    2024年02月02日
    浏览(44)
  • 多模型图像特征可视化

            特征图可视化是指将网络中某一层的特征图可视化出来,以便观察网络在不同层次上学到的特征。卷积可视化可以帮助深度学习研究者更好地理解卷积的概念和原理,从而更好地设计和优化卷积神经网络。通过可视化,研究者可以更清晰地看到卷积运算中的每一个

    2024年01月17日
    浏览(36)
  • 可视化CNN和特征图

    卷积神经网络(cnn)是一种神经网络,通常用于图像分类、目标检测和其他计算机视觉任务。CNN的关键组件之一是特征图,它是通过对图像应用卷积滤波器生成的输入图像的表示。 1、卷积操作 卷积的概念是CNN操作的核心。卷积是一种数学运算,它把两个函数结合起来产生第三

    2023年04月10日
    浏览(50)
  • Python 数据可视化-文本可视化(词云图)

    这篇文章主要是教大家如何制作一个自定义个性化词云图,具体要求如下: 1.    文本内容使用文件content.txt的内容。如下图所示: 2.    字体任意选取。这里我选择的是极影毁片辉宋字体   3.    指定词云形状为文件222.png。如下图所示:   4.    设置文字颜色以背景图片

    2024年02月13日
    浏览(55)
  • 在windows上可视化redis中间件

    首先需要下载一下RedisDesktopManager这个可视化工具,在很多CSDN博客上都有博主进行介绍,其实就是一个傻瓜式安装。 windows下安装redis的话可以去B站上查看一下怎么安装,主要是在github上去下载,目前更新的比较快,不过很多视频都是装的5.x的版本,它也是一个傻瓜式的安装,

    2024年02月11日
    浏览(42)
  • 网络特征之PCA可视化-Python实现

    PCA也是对网络特征可视化的一种方法,目的是对特征进行降维,然后通过图片的形式来对网络的特征提供一种解释。 所以,本博客提供一个将网络特征进行PCA的可视化的代码,其原理为将C通道的特征降维到3通道,即图片的RGB通道,然后直接进行可视化。 关于PCA和t-SNE的差异

    2023年04月08日
    浏览(53)
  • Python文本数据及其可视化

    根据qq音乐获取的信息,对某一首歌曲的评论内容进行处理。 分析评论中的词性分布。 统计高频词,画出词云。     1. 文本信息初处理: 根据实验二QQ音乐抓取周杰伦的前五首歌曲评论等信息筛查晴天这首歌的相关信息存为“晴天-周杰伦”的文本文件方便后续数据读取。

    2024年02月02日
    浏览(47)
  • CNNs:ZFNet之基于AlexNet特征可视化实验分析

    上一篇我们介绍了如何利用 Deconvnet 网络进行特征可视化操作,本篇我们将基于 Deconvnet 对文献中的相关实验进行分析,并验证一些结论。除此之外,我们还将针对实验现象对对 AlexNet 网络进行微调( ZFNet ),并对网络进行简单介绍。然后基于 ZFNet 进行实验分析。 实验条件:

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包