pytorch子项目torchvision提供了用于保存tensor为图片的方法 torchvision.utils.save_image

其中,参数tensor的维度为(batch_size, channel_size, H, W) 或者 (channel_size, H, W) 或者 (H, W),fp则为文件保存路径
注意:该处batch_size应该为同类图片的张数,而channel应该为单张图片的通道数(例如灰度图为1,rgb图为3),而不是你训练的batch size,也不是特征图的通道数

事实上,当输入tensor为minibatch时,其内部还会调用 torchvision.utils.make_grid
方法对所有的图片合成一张大图

在torchvision.utils.save_image
参数中,可以直接使用kv的形式传递torchvision.utils.make_grid
的参数,通过save_image的源码可以看到,它是直接将后面的参数传递给了make_grid,由此你就可以在save_image方法中调整拼接图的间距(本该是make_grid的参数)

示例:
# 将上一个模型得到的特征图x保存下来
# x的第一维是train的batch size,每一个batch并不属于同一个物品,故将每个物品的特征图单独保存(单独取出每个train的batch)
# 每个物品的特征图有很多,每个特征图又是一张单独的灰度图,故将特征图的数量作为save_image的batch_size,而每张图是单通道的灰度图,故给每张图都增加一个维度用于表示其通道数为一维
# nrow 用于指定每一行并排拼接多少张图片,为了让整个大图看起来更方,这个就用特征图数量的开方
torchvision.utils.save_image(x[0].unsqueeze(1), r"D:\Tmp\feature.jpg", nrow=int(math.sqrt(x.shape[1])), padding=8)
结果就是本文最开头的那个图片