pytorch PixelShuffle和Upscale函数

pytorch PixelShuffle和Upscale函数pytorchPixel 和 Upscale 函数 该函数设计思想来源于 2016 年的一篇 SR 文章 Real TimeSingleIm ResolutionUs PixelConvolu 原理如下图 子像素卷积的实现原理 利用卷积得到图像 r2r 2r2 个

pytorch PixelShuffle和Upscale函数

​ 该函数设计思想来源于2016年的一篇SR文章,Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network 原理如下图:

​ 子像素卷积的实现原理:利用卷积得到图像 r 2 r^2 r2个通道的特征图,并且特征图的大小和输入图像的大小一致,然后将特征图上的一个元素位置的 r 2 r^2 r2个特征点按次序排列开,形成 r ∗ r r*r rr的像素分布,实现图像扩大的功能;

在这里插入图片描述

pytorch中的定义在:https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/pixelshuffle.py文件中

函数定义

其中upscale_factor为放大倍数

class torch.nn.PixleShuffle(upscale_factor) 

输入输出

Input:KaTeX parse error: Expected ‘}’, got ‘_’ at position 31: …\text { upsclae_̲factor} ^ { 2 }…

output:KaTeX parse error: Expected ‘}’, got ‘_’ at position 23: … \text {upscale_̲factor},W*\text…

例子:

pixel_shuffle = nn.PixelShuffle(3) #放大3倍 input = torch.randn(1, 9, 4, 4) output = pixel_shuffle(input) print(output.size()) #输出为[1,1,12,12] 

Upsample 函数

pytorch实现文件为:https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/upsampling.py

对给定多通道的1维(temporal)、2维(spatial)、3维(volumetric)数据进行上采样。

定义

class torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None) 

参数说明:

  • size 是要输出的尺寸,数据类型为tuple: ([optional D_out], [optional H_out], W_out)
  • scale_factor 在高度、宽度和深度上面的放大倍数。数据类型既可以是int——表明高度、宽度、深度都扩大同一倍数;亦或是tuple——指定高度、宽度、深度的扩大倍数。
  • mode 上采样的方法,包括最近邻(nearest),线性插值(linear),双线性插值(bilinear),三次线性插值(trilinear),默认是最近邻(nearest)。
  • align_corners 如果设为True,输入图像和输出图像角点的像素将会被对齐(aligned),这只在mode = linear, bilinear, or trilinear才有效,默认为False。

例子

input=torch.arange(1,5).view(1,1,2,2).float() input tensor([[[[ 1., 2.], [ 3., 4.]]]]) input m=nn.Upsample(scale_factor=2,mode='nearest') m(input) tensor([[[[ 1., 1., 2., 2.], [ 1., 1., 2., 2.], [ 3., 3., 4., 4.], [ 3., 3., 4., 4.]]]]) m = nn.Upsample(scale_factor=2, mode='bilinear') m(input) tensor([[[[ 1.0000, 1.2500, 1.7500, 2.0000], [ 1.5000, 1.7500, 2.2500, 2.5000], [ 2.5000, 2.7500, 3.2500, 3.5000], [ 3.0000, 3.2500, 3.7500, 4.0000]]]]) input m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True) m(input) tensor([[[[ 1.0000, 1.3333, 1.6667, 2.0000], [ 1.6667, 2.0000, 2.3333, 2.6667], [ 2.3333, 2.6667, 3.0000, 3.3333], [ 3.0000, 3.3333, 3.6667, 4.0000]]]]) input_3x3 = torch.zeros(3, 3).view(1, 1, 3, 3) input_3x3[:, :, :2, :2].copy_(input) tensor([[[[ 1., 2.], [ 3., 4.]]]]) input_3x3 tensor([[[[ 1., 2., 0.], [ 3., 4., 0.], [ 0., 0., 0.]]]]) m = nn.Upsample(scale_factor=2, mode='bilinear') # align_corners=False m(input_3x3) tensor([[[[ 1.0000, 1.2500, 1.7500, 1.5000, 0.5000, 0.0000], [ 1.5000, 1.7500, 2.2500, 1.8750, 0.6250, 0.0000], [ 2.5000, 2.7500, 3.2500, 2.6250, 0.8750, 0.0000], [ 2.2500, 2.4375, 2.8125, 2.2500, 0.7500, 0.0000], [ 0.7500, 0.8125, 0.9375, 0.7500, 0.2500, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]]]]) m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True) m(input_3x3) tensor([[[[ 1.0000, 1.4000, 1.8000, 1.6000, 0.8000, 0.0000], [ 1.8000, 2.2000, 2.6000, 2.2400, 1.1200, 0.0000], [ 2.6000, 3.0000, 3.4000, 2.8800, 1.4400, 0.0000], [ 2.4000, 2.7200, 3.0400, 2.5600, 1.2800, 0.0000], [ 1.2000, 1.3600, 1.5200, 1.2800, 0.6400, 0.0000], [ 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000]]]]) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203028.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:45
下一篇 2026年3月19日 下午10:45


相关推荐

  • python3中for循环的用法_Python3 for循环语句

    python3中for循环的用法_Python3 for循环语句语法foriterating_varinsequence:statements(s)如果一个序列中包含一个表达式列表时,它需要首先计算。然后,序列中的第一项被分配给所述迭代变量iterating_var,接下来,语句块被执行。列表中的每一项都被分配到iterating_var,并执行语句(statement)块,直到整个序列完成。流程图range()函数内置函数range()是迭代…

    2022年8月12日
    10
  • 软件测试的基本理论知识_学软件测试需要什么基础

    软件测试的基本理论知识_学软件测试需要什么基础01软件研发流程1.软件产品软件产品是指向用户提供的计算机软件、信息系统或设备中嵌入的软件或在提供计算机信息系统集成、应用服务等技术服务时提供的计算机软件。2.软件工程软件工程,英文名SoftwareEngineering,是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。“软件工程是开发、运行、维护和修复软件的系统方法。”这个定义相当概括,它主要强调软件工程是系统方法而不是某种…

    2025年8月22日
    4
  • python冒泡排序函数_python冒泡排序-Python,冒泡排序

    python冒泡排序函数_python冒泡排序-Python,冒泡排序arr 7 4 3 67 34 1 8 defbubble sort 最近在学习 Python 下面是我的一些笔记冒泡排序实现思路 使用双重 for 循环 内层变量为 i 外层为 j 在内层循环中不断的比较相邻的两个值 i i 1 的大小 如果 i 1 的值大于 i 的值 交换两者位置 每循环一次 外层的 j 增加 1 等到 j 等于 n 1 的时候 结束循环第一次看不懂很正常 不要灰心 下面是使用代码的实现 arr

    2026年3月17日
    2
  • Spring Boot 中的异步调用[通俗易懂]

    Spring Boot 中的异步调用[通俗易懂]SpringBoot中的异步调用通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行。而异步编程则没有这个限制,代码的调用不再是阻塞的。所以在一些情景下,通过异步编程可以提高效率,提升接口的吞吐量。这节将介绍如何在SpringBoot中进行异步编程。要开启异步支持,首先得在SpringBoot入口类上加上@EnableAsync注解:@SpringBootApplication@EnableAsyncpublic

    2022年7月11日
    30
  • 价值3888开源企业发卡网源码/全网对接/全新UI风格/完美运营

    价值3888开源企业发卡网源码/全网对接/全新UI风格/完美运营介绍:系统是全开源的,功能很多就不一一介绍了,喜欢就拿走,互站上卖3888免费开源,100%能搭建!老米发卡系统功能亮点介绍:1:已接入易支付接口/支持qq/微信/支付宝2:全网商品对接,店铺对接一秒完成对接,!3:商品池系统/供货系统/代理系统/对接码对接商品4:店铺音乐支付接口/缩我短网址接口/销售模版主题设置5:后台新增一键添加支付接口/商品池权限/推荐商品权限/商家保证金6:平均有15套pc售卡模版,3套手机售卡模版7:一些系统还带有后门,我这个系统完全无后门8:本系统不敢说全

    2022年7月14日
    22
  • 举例说明随机函数的应用python_Python生成50个随机数

    举例说明随机函数的应用python_Python生成50个随机数摘要:下文讲述Python代码中seed()函数的简介说明,如下所示:seed()函数功能用于改变随机数生成器的种子,常用于其它随机函数之前运行此函数seed()函数语法seed.seed([x])———参数说明—-x:任意数字———返回值说明—-无返回值seed()函数注意事项:1.使用seed()函数需引入包random(importrandom)2.设置随…

    2025年5月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号