pytorch中torchvision.utils包下的save_image函数

2023-11-03

雷郭出品

函数的用途:
将NCHW的tensor以网格图的形式存储到硬盘中,该图也叫做雪碧图sprite image
如下图所示:
在这里插入图片描述
将多张图以网格的形式拼凑起来,每张图的大小是28*28,单通道
那宽高如何确定?
我们可以来看看该函数的源码

def save_image(
    tensor: Union[torch.Tensor, List[torch.Tensor]],
    fp: Union[Text, pathlib.Path, BinaryIO],
    nrow: int = 8,
    padding: int = 2,
    normalize: bool = False,
    range: Optional[Tuple[int, int]] = None,
    scale_each: bool = False,
    pad_value: int = 0,
    format: Optional[str] = None,
) -> None:
    """Save a given Tensor into an image file.

    Args:
        tensor (Tensor or list): Image to be saved. If given a mini-batch tensor,
            saves the tensor as a grid of images by calling ``make_grid``.
        fp (string or file object): A filename or a file object
        format(Optional):  If omitted, the format to use is determined from the filename extension.
            If a file object was used instead of a filename, this parameter should always be used.
        **kwargs: Other arguments are documented in ``make_grid``.
    """
    from PIL import Image
    grid = make_grid(tensor, nrow=nrow, padding=padding, pad_value=pad_value,
                     normalize=normalize, range=range, scale_each=scale_each)
    # Add 0.5 after unnormalizing to [0, 255] to round to nearest integer
    ndarr = grid.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to('cpu', torch.uint8).numpy()
    im = Image.fromarray(ndarr)
    im.save(fp, format=format)

可以看到nrow默认为8
padding默认为2
当我们的tensor形状为96* 1* 28 * 28的时候
网格的行和列对应的格子数分别为(N/nrow,nrow)
即(12,8)
对应的就是第一张图

但是实际当我去查看图片的像素大小时,由于padding的存在
像素大小并不是(12 * 28,8 * 28)
而是(12 * 28+13 * 2,8 * 28+9 * 2)

还有一点要注意,当你存储图片的时候由于总的图片数可能不能被batchsize整除
所以当雪碧图的格子数跟batchsize不对应的时候
不要犯愁
这是正常
我也是看了好几个小时才突然从下面的打印中得到的灵感

real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([128, 1, 28, 28])
real_images的shape: torch.Size([96, 1, 28, 28])
real_img的shape: torch.Size([96, 784])

可以看到一开始的形状都是128
到了最后一个就变成了96
然后再次使用还是96
我就立刻想到了余数
然后我再验证6000=128 * 468+96
完美符合验证

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytorch中torchvision.utils包下的save_image函数 的相关文章

随机推荐

  • UE4c++ Brush创建

    前言 UE4常用的new FSlateBrush的方式与正常的SlateStyle的方式就不说了 这类的文章很多 这里主要仿照引擎源码加载图片的方式加加载 参考源码 FTestStyle h class FMainStyle public
  • SpringBoot主程序运行及配置文件

    主程序运行 SpringBootApplication public class SpringbootApplication public static void main String args SpringApplication run
  • 5G 的未来

    目录 5G流量 5G应用场景 VR AR MR 5G关键技术 超密集组网 5G关键技术 动态自组织网 SON 软件定义网络SDN SDN与NFV的深度融合 5G挑战 频谱资源 新业务的挑战 新使用场景的挑战 终端设备带来的挑战 5G面临的安
  • 反射和多线程基础

    Version 邢朋辉 今日主播 邢朋辉 QQ 345086739 一 今日内容 1 1 课程回顾 1 2 反射是啥 1 3 进程和线程 1 4 线程的创建方式 1 5 线程的状态 1 6 线程的常用方法 二 课程回顾 Java的基本语法
  • R语言的常用的包

    在学习R的时候 R的包众多 很多时候对于初学者会造成很大的困扰就是不知道用什么样的包比较合适 我会在不断使用R的过程中 进行使用同时结合使用体验为大家推荐合适的R包 避免重复学习 以节约时间 标了 精 的是需要重点研究和掌握的包 1 数据导
  • 写CSDN博客时,调节字体、大小、颜色

    字体颜色样式系列 为了突出重点内容 想设置不同颜色 颜色挑选网址 https blog csdn net wo919191 article details 84249531 face设置字体 文本内容使用font标签包裹 可通过face设置
  • 查询tomcat可用 端口

    步骤一 cmd输入 输入 netstat ano 步骤二 查询端口号是否被占用 netstat aon findstr 端口号 步骤三 查询占用端口的应用 tasklist findstr 查询出的 listening 步骤四 taskki
  • 如果有多个异步函数需要保证同时执行并保证全部执行完毕后再进行下一步

    array push api post array push api get Promise all array then resArr gt resArr forEach res gt console log res 在 then后面判断
  • python3 抖音短视频链接去水印下载视频到本地

    基于近段时间对抖音 快手 秒拍等视频抓取一直想搞一下 加了个QQ群 里面全是自媒体 就是抖音 快手 秒拍的视频搬运工 把一个平台搬到另外一个平台上 去除水印 降低被干掉的危险 经过半天的琢磨 自己用python也搞出来一个根据抖音分享视频链
  • python用input输入列表_python怎么用input函数输入一个列表

    在Python3 0以后 键盘输入使用input函数 gt gt gt x input gt gt gt 123 123 在命令行没有任何显示 输入123后直接赋值给x 并打印 仅仅使用input是无法解决大部分数据处理的 通常输入的字符串
  • Python构建ANN模型预测气温变化

    在利用爬虫模型得到了气温数据集后 具体参考上篇Python构建爬虫模型爬取天气数据 我们开始利用tensorflow自带的模块搭建一个简单的ANN模型预测气温变化 其实这个模型适用于预测很多数据变化趋势 这里以预测气温变化为例 import
  • 数据结构--栈—JS实现一个栈结构

    数据结构 栈 JS实现一个栈结构 前言 数据结构和算法是脱离语言的 比如pop push在js中可以使用 但是其他的语言也有吗 不一定 但是都可以通过数据结构和算法写出其功能 1 栈是一种后进先出 LIFO last in first ou
  • 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte问题的解决

    utf 8 codec can t decode byte 0xd6 in position 0 invalid continuation byte 把 utf 8 改为 gbk
  • git进行commit撤销,并撤销远程push,回退到之前的版本

    刚开始使用版本管理工具 选择的是git 各种git终端 常用的有SourceTree TortoiseGit git GUI等 本人选择的是第一个 闲话不多说 当你commit并push本地代码到云服务器后 发现自己修改的有问题 但又不想重
  • 知识图谱学习--网易云唐宇迪老师课程记录

    一 知识图谱是什么 知识图谱是一种图模型 可以将各个实体的信息联系在一起 形成一个整体 知识图谱会应用各种不同技术 不仅限于NLP 还包括图像 推荐系统等 构建一整个关系网络 知识图谱在医疗领域的作用 二 知识图谱的数据怎么处理 1 数据怎
  • GPT「高仿」问世:GPT-Neo,最大可达GPT-3大小,已开源

    GPT 高仿 问世 GPT Neo 最大可达GPT 3大小 已开源 近日 有个名叫 EleutherAI的团队 创始成员为 Connor Leahy Leo Gao和Sid Black 宣布推出GPT Neo开源项目 可用于复现GPT系列的
  • 强化学习-论文调研-experience replay

    experience replay 论文调研 一 论文概要 1 Hindsight Experience Replay 2017 NeurIPS 在奖励稀疏的情况下 要用强化学习算法训练是很困难的 本文提出一种通过增设不同的目标 增加状态转
  • Amazon Linux 2上面安装Amazon Corretto 8(JDK)

    shell 启用Amazon Linux 2 中的aws yum扩展库 sudo amazon linux extras enable corretto8 安装jre sudo yum install java 1 8 0 amazon c
  • spring cloud jackson自定义文本转换器

    由于 spring jackson default property inclusion 配置失效 所以得自定义文本转换器 废话不多说上代码 Configuration EnableWebMvc public class WebAppCon
  • pytorch中torchvision.utils包下的save_image函数

    雷郭出品 函数的用途 将NCHW的tensor以网格图的形式存储到硬盘中 该图也叫做雪碧图sprite image 如下图所示 将多张图以网格的形式拼凑起来 每张图的大小是28 28 单通道 那宽高如何确定 我们可以来看看该函数的源码 de