pytorch将tensor转为numpy用于图像绘制

目标: 将tensor(图像形式)转为numpy,然后绘制图像
1. 形如torch.Size([1, 3, 480, 856]) # B x C x H x W
分析: 这种形状的tensor一般是要输出的某种图像或者即将转化为要输出的某种特征图
绘制方法:
  1. 首先压缩tensor的维度
tensor = tensor.squeeze(0) # torch.Size([3, 480, 856])
  1. 然后转换tensor维度的顺序
tensor = tensor.permute(1, 2, 0) # torch.Size([480,856,3])
  1. 然后将tensor从cuda转到cpu上(未使用cuda可以不写这句话)
tensor = tensor.cpu()
  1. 最后将tensor形式转化为numpy形式
array = tensor.detach().numpy()

以上4步可以合并为一句话

array = tensor.squeeze(0).permute(1,2,0).cpu().detach().numpy()
  1. 使用PIL库绘制图像
from PIL import Image
im = Image.fromarray(array) # 图像全黑则尝试 im = Image.fromarray(np.uint8(array*255))
im.show()
2. 形如torch.Size([1, 32, 56, 56]) # B x C x H x W
分析: 这种形状的tensor是中间层的特征图,可以一次绘制一个通道或者写循环绘制所有通道,本次绘制一个通道
  1. 首先压缩tensor的维度
tensor = tensor.squeeze(0) # torch.Size([32, 56, 56])
  1. 从32个通道中选取一个通道绘制,以第一个通道为例
tensor = tensor[0, :, :]  # torch.Size([56, 56])
  1. 将tensor从cuda转到cpu上(未使用cuda可以不写这句话)
tensor = tensor.cpu()
  1. 将tensor形式转化为numpy形式
array = tensor.detach().numpy()

一句话

array = tensor.squeeze(0)[0, :, :].cpu().detach().numpy()
  1. 绘制
from PIL import Image
im = Image.fromarray(array) # 图像全黑则尝试 im = Image.fromarray(np.uint8(array*256))
im.show()
  • 12
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值