如何从PyTorch中获取过程特征图实例详解

作者:ViperL1 时间:2022-07-08 04:04:44 

一、获取Tensor

神经网络在运算过程中实际上是以Tensor为格式进行计算的,我们只需稍稍改动一下forward函数即可从运算过程中抓到Tensor

代码如下:

base_feature = self.extractor.forward(x)    #正常的前向传递
feature=base_feature.detach()               #抓取tensor
feature_imshow(feature)                     #展示函数(关键代码)

通过将过程张量赋值给一个临时变量,即可将其从前向传递中分离出来且不影响原来的前向传递函数,这种方法远比复杂的hook函数更实用。

将Tensor数据取到后到可视化还需要进行以下几步:

①类型转换

如果网络是在cuda中进行运算,则需要将提取到的tensor转换为cpu类型才能进行接下来的运算

inp = inp.cpu()        #类型转换

②张量拆解

网络中的张量一般是高维度的,需要对其进行降维,一般降至两维即可进行显示。这里以Faster R-CNN中的resnet50特征提取网络为例:输出其特征图尺寸为:[1,1024,68,38],可以很明显的看出,第一维实际上是batch_size,在图像显示中不需要,可以直接去除;第二维1024则是网络提取到的特征图张数,故可以对第二维进行遍历;而第3,4维是特征图的尺寸,直接显示即可。

inp=inp.squeeze(0)    #除去第一维

for i in range(len(inp)):
   plt.imshow(transforms.ToPILImage()(inp[i]))    #遍历第二维并将其转换为图像

③图像展示

选取你需要的特征图像,进行保存或使用plt进展示

完整的展示函数如下:

def feature_imshow(inp, title=None):
   inp = inp.cpu()
   inp=inp.squeeze(0)
   print(inp.shape)
   plt.figure(figsize=(12, 7))
   for i in range(len(inp)):
       plt.subplot(4, 5, i+1)    #第一二个参数为图像个数,第三参数为图像位置
       plt.imshow(transforms.ToPILImage()(inp[i]))
       i+=1
   plt.show()
   plt.pause(0.001)

如何从PyTorch中获取过程特征图实例详解

来源:https://blog.csdn.net/weixin_37878740/article/details/128584950

标签:pytorch,过程,特征图
0
投稿

猜你喜欢

  • SQL Server 数据库备份和还原认识和总结 (一)

    2012-10-07 10:52:54
  • 简单的在线调试服务端js代码的asp源码

    2008-04-23 13:30:00
  • php中preg_match的isU代表什么意思

    2024-05-03 15:13:51
  • Tensorflow加载与预处理数据详解实现方法

    2023-01-29 02:57:09
  • IIS 301重定向与程序代码实现301重定向的差别

    2022-04-16 07:45:23
  • pandas按条件筛选数据的实现

    2021-10-04 03:07:54
  • Selenium+BeautifulSoup+json获取Script标签内的json数据

    2023-06-17 09:30:18
  • Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法

    2023-03-01 14:24:38
  • python画图系列之个性化显示x轴区段文字的实例

    2023-01-16 06:15:24
  • Python全面解读高级特性切片

    2021-06-05 14:23:13
  • OpenCV黑帽运算(BLACKHAT)的使用

    2022-11-11 22:32:00
  • SQL Server 中的数据类型隐式转换问题

    2024-01-16 21:05:38
  • python微信跳一跳系列之棋子定位像素遍历

    2023-11-04 01:27:47
  • Python正则表达式教程之一:基础篇

    2023-11-13 19:46:02
  • PHP中动态显示签名和ip原理

    2024-05-11 10:12:33
  • Python matplotlib绘图建立画布及坐标系

    2021-03-28 02:56:07
  • JavaScript实现的伸展收缩型菜单代码

    2024-04-16 09:22:33
  • python中unittest框架应用详解

    2023-05-26 14:27:42
  • python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)

    2021-10-15 16:40:52
  • Python算法输出1-9数组形成的结果为100的所有运算式

    2022-05-02 22:45:48
  • asp之家 网络编程 m.aspxhome.com