码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Pytorch】网络中间特征图可视化—详细记录-函数可直接调用


     前言:

    • 嘿~你需要知道,你的特征图在哪里!
    • 该教程是从知晓特征图的位置进行特征图查看!
    • 至于特征图在哪,建议Debug跟踪一下x的序列!(或者后续我看看怎么表述哈哈哈)

    目录

    1 特征图可视化模板

    2 注意事项

    ⚪特征图的输入要求[B,H,W,C]

    ⚪特征图的维度不是256-降维

    ⚪f1 = f1.cpu().detach().numpy()


    1 特征图可视化模板

    • 声明:import matplotlib.pyplot as plt
    • 使用方式:已经写成函数啦,直接用就行,嘿嘿!
    • 语句也都备注好啦~
    1. import matplotlib.pyplot as plt
    2. # 这里的输入假定的是 [B,H,W,C] 自行确认!关于如何修改,写在后面啦~
    3. def Show_Feature(feature_map):
    4. # 1 将传入的特征图给到f1,os:单纯为了好记,可以直接用feature_map
    5. f1= feature_map
    6. # 2 确认特征图的shape.[B,H,W,C]
    7. print(f1.shape)
    8. # 3 预期希望的特征图shape [B,C,H,W]
    9. # 明显特征图shape是[B,H,W,C],利用permute进行调整
    10. f1 = f1.permute(0,3, 1, 2)
    11. # 4 确认特征图的shape [B,C,H,W]
    12. print(f1.shape)
    13. # 5 特征图向量从cuda转换到cpu,numpy格式
    14. # 自行检查特征向量位置,亦可根据报错进行修改
    15. # 目的 torch.Size([B,C,H,W]) 转换成 (B,C,H,W)
    16. # 可尝试 f1.cpu().numpy()
    17. f1 = f1.cpu().detach().numpy()
    18. # 6 确认特征图的shape (B,C,H,W)
    19. print(f1.shape)
    20. # 7 去除B (C,H,W)
    21. f1 = f1.squeeze(0)
    22. # 8 确认特征图的shape (C,H,W)
    23. print(f1.shape)
    24. # 9 开始规范作图
    25. # 特征图的数量,就是维度啦,图像通常256维,超过的需要降维!
    26. f1_map_num = f1.shape[0]
    27. # 图像行显示数量
    28. row_num = 16
    29. # 绘制图像
    30. plt.figure()
    31. #通过遍历的方式,将通道的tensor拿出
    32. for index in range(1, f1_map_num + 1):
    33. plt.subplot(row_num, row_num, index)
    34. plt.imshow(f1[index - 1], cmap='gray')
    35. plt.axis('off')
    36. plt.imsave( 'feature_map_save/'+str(index) + ".png", f1[index - 1])
    37. plt.show()
    38. return 0
    39. # 特征图位置直接调用!x:[B,H,W,C]
    40. Show_Feature(x)
    •  os:以上代码主要为了详细说明,查看print语句可自行删除。

    2 注意事项

    实际上,看代码中的解读就很容易发现一些注意点!

    ⚪特征图的输入要求[B,H,W,C]

    有时后中间特征会以[B,HW相关变动,C],也就是没有H,W清晰的分开,此时,需要追寻中间数据是怎么得到的,还原一下!

    • 原 x[1,3,384,384]
    • 现 x[1,9216,256]
    • 通道数3------256
    • 384,384-----9216
    • dubug可以发现9216 是图像降采样4x后 96*96=926
    • 分析完reshape就行啦
    1. x = x.reshape(1,96,96,256)
    2. Show_Feature(x)

    ⚪特征图的维度不是256-降维

    • 原 x[1,3,384,384]
    • 现 x[1,144,512]
    • 通道数3------512
    • 384,384-----144
    • dubug可以发现144 是图像降采样后 12*12=144
    • 降维+ reshape 
    • 注意:输入输出要求格式,以及代码语句!
    1. # 降维放在类self.xxx的位置
    2. # 注意前两项就是维度 希望512变成256
    3. self.fe_rn =nn.Conv2d(512, 256,kernel_size=3,stride=1,padding=1,bias=False,)
    4. # reshape [1,144,512]
    5. x = x.reshape(1,12,12,512)
    6. # 降维的格式,做点交换
    7. x = x.permute(0,3,1,2)
    8. # 降维
    9. x = self.fe_rn(x)
    10. # 特征可视化格式,做点交换
    11. x = x.permute(0,2,3,1)
    12. Show_Feature(x)

    ⚪f1 = f1.cpu().detach().numpy()

    实际上就是涉及numpy和tensor的转换问题:

    [推荐学习]TypeError: can‘t convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory..._将tensor从cuda转为cpu

  • 相关阅读:
    leaflet:利用Leaflet-Geoman绘制多种图形,导出为geojson文件(135)
    【C++进阶】map和set( 万字详解)—— 上篇
    SQLSERVER查看数据库日志方法和语句示例,已亲测。
    【owt-server】Frame到Destination的数据转发
    Linux 基本语句_编译C过程
    【力扣】面试经典150题——哈希表
    【C++并发编程】(一)线程管理
    scratch接钻石 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析
    记录--用JS轻松实现一个录音、录像、录屏的工具库
    NeuralProphet之八:NeuralProphet部署
  • 原文地址:https://blog.csdn.net/MengYa_Dream/article/details/127656642
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号