零基础也可以探索 PyTorch 中的上采样与下采样技术

目录

torch.nn子模块Vision Layers详解

nn.PixelShuffle

用法与用途

使用技巧

注意事项

参数

示例代码

nn.PixelUnshuffle

用法与用途

使用技巧

注意事项

参数

示例代码

nn.Upsample

用法与用途

使用技巧

注意事项

参数

示例代码

nn.UpsamplingNearest2d

用法与用途

使用技巧

注意事项

参数

形状(同上)

示例代码

nn.UpsamplingBilinear2d

用法与用途

使用技巧

注意事项

参数

示例代码

总结


torch.nn子模块Vision Layers详解

nn.PixelShuffle

torch.nn.PixelShuffle 是 PyTorch 深度学习框架中的一个子模块,主要用于图像超分辨率(Super Resolution)任务。这个模块通过重新排列输入张量(Tensor)的元素,从而将图像的分辨率提高。

用法与用途

  • 用法: PixelShuffle 接收一个输入张量,并按照指定的上采样因子(upscale factor)重新排列张量中的元素,以提高图像的分辨率。
  • 用途: 它主要用于图像超分辨率任务,如将低分辨率的图像转换成高分辨率图像。这在视频增强、图像恢复等领域非常有用。

使用技巧

  • 选择合适的上采样因子: 上采样因子决定了图像分辨率的提升程度。因子越大,分辨率提升越明显,但同时也要求输入张量有足够的通道数。
  • 输入张量的通道数: 输入张量的通道数必须是上采样因子的平方倍数。例如,如果上采样因子为 3,则输入张量的通道数应为 9 的倍数。

注意事项

  • 内存消耗: 上采样因子较大时,输出张量的大小会显著增加,这可能会导致更高的内存消耗。
  • 输入和输出形状: 确保输入张量的形状符合要求,以避免运行时错误。

参数

  • upscale_factor (int): 用于提高空间分辨率的因子。

示例代码

import torch
import torch.nn as nn# 初始化 PixelShuffle 模块
pixel_shuffle = nn.PixelShuffle(3)# 创建一个随机张量作为输入
# 输入张量的形状为 (批大小, 通道数, 高, 宽)
# 通道数必须是上采样因子的平方倍数,这里为 3^2 = 9
input = torch.randn(1, 9, 4, 4)# 应用 PixelShuffle
output = pixel_shuffle(input)# 输出张量的形状
print(output.size())

这段代码首先创建了一个 PixelShuffle 模块,上采样因子设置为 3。然后,创建一个形状为 (1, 9, 4, 4) 的输入张量,并将其传递给 PixelShuffle 模块。输出的张量形状会变为 (1, 1, 12, 12),即分辨率提高了。

nn.PixelUnshuffle

torch.nn.PixelUnshuffle 是 PyTorch 深度学习框架中的一个子模块,它执行 PixelShuffle 的逆操作。PixelUnshuffle 通过重新排列输入张量的元素,从而降低图像的分辨率。这个模块在一些特定的图像处理任务中非常有用,特别是当需要降采样图像时。

用法与用途

  • 用法: PixelUnshuffle 接收一个输入张量,并按照指定的下采样因子(downscale factor)重新排列张量中的元素,以降低图像的分辨率。
  • 用途: 它主要用于图像处理中的降采样任务,如在超分辨率网络中的特征图降采样,或在处理过大图像时减少计算负担。

使用技巧

  • 选择合适的下采样因子: 下采样因子决定了图像分辨率的降低程度。因子越大,分辨率降低越明显。
  • 输入张量的尺寸: 输入张量的高度和宽度必须是下采样因子的整数倍,以确保操作的平滑进行。

注意事项

  • 内存消耗: 当下采样因子较大时,输出张量的通道数会显著增加,可能会导致内存消耗的增加。
  • 输入和输出形状: 确保输入张量的尺寸符合要求,以避免运行时错误。

参数

  • downscale_factor (int): 用于降低空间分辨率的因子。

示例代码

import torch
import torch.nn as nn# 初始化 PixelUnshuffle 模块
pixel_unshuffle = nn.PixelUnshuffle(3)# 创建一个随机张量作为输入
# 输入张量的形状为 (批大小, 通道数, 高, 宽)
input = torch.randn(1, 1, 12, 12)# 应用 PixelUnshuffle
output = pixel_unshuffle(input)# 输出张量的形状
print(output.size())

 这段代码首先创建了一个 PixelUnshuffle 模块,下采样因子设置为 3。然后,创建一个形状为 (1, 1, 12, 12) 的输入张量,并将其传递给 PixelUnshuffle 模块。输出的张量形状会变为 (1, 9, 4, 4),即通道数增加,而空间分辨率降低了。

nn.Upsample

torch.nn.Upsample 是 PyTorch 中的一个子模块,用于对多通道的 1D(时间序列)、2D(空间)或 3D(体积)数据进行上采样(增加分辨率)。

用法与用途

  • 用法: Upsample 可以增加数据的尺寸,例如将一个低分辨率的图像转换成高分辨率的图像。它可以处理 3D、4D 或 5D 的张量,分别对应于 1D、2D 和 3D 数据。
  • 用途: 在图像处理、视频处理和医学成像等领域,Upsample 常用于图像超分辨率、放大图像或视频帧等任务。

使用技巧

  • 选择合适的上采样模式: 根据数据类型和需求选择 nearest, linear, bilinear, bicubictrilinear
  • 调整对齐角点: align_corners 参数控制角点像素的对齐方式。在使用 linear, bilinear, bicubictrilinear 模式时,它会影响插值的结果。

注意事项

  • 插值模式: 不同的插值模式适用于不同的应用场景。例如,nearest 通常用于类别标签,而 bilinear 更适用于图像。
  • 大小和比例因子: 可以通过 sizescale_factor 指定输出的尺寸,但不能同时指定两者,因为这会引起歧义。

参数

  • size (int or Tuple[int]): 输出的空间尺寸。
  • scale_factor (float or Tuple[float]): 空间尺寸的乘数。
  • mode (str): 上采样算法,包括 'nearest', 'linear', 'bilinear', 'bicubic', 'trilinear'。
  • align_corners (bool): 控制角点像素的对齐方式。
  • recompute_scale_factor (bool): 重新计算用于插值计算的比例因子。

示例代码

import torch
import torch.nn as nn# 创建一个 2x2 的输入张量
input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2)# 初始化 Upsample 模块,上采样因子为 2,使用最近邻插值
m = nn.Upsample(scale_factor=2, mode='nearest')
output_nearest = m(input)# 初始化 Upsample 模块,上采样因子为 2,使用双线性插值
m = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=False)
output_bilinear = m(input)# 输出结果
print("Nearest neighbor upsampling:\n", output_nearest)
print("\nBilinear upsampling:\n", output_bilinear)

这段代码展示了如何使用 Upsample 来对一个小张量进行上采样,分别使用最近邻和双线性插值。这可以在图像放大等场景中被应用。

nn.UpsamplingNearest2d

torch.nn.UpsamplingNearest2d 是 PyTorch 中的一个子模块,专门用于对 2D 数据(如图像)应用最近邻上采样。这种类型的上采样通过复制邻近的像素值来增加图像的尺寸,从而提高图像的分辨率。

用法与用途

  • 用法: 可以通过指定目标输出尺寸(size)或上采样因子(scale_factor)来使用此模块。
  • 用途: 主要用于图像放大,特别是在需要保持像素值不变的场景中,如在某些类型的图像生成任务中。

使用技巧

  • 选择尺寸或比例因子: 根据需求选择提供输出尺寸还是上采样比例因子。比例因子会根据输入尺寸按给定比例放大图像,而指定尺寸可以直接设定输出图像的维度。
  • 应用场景: 由于最近邻上采样可能会导致图像出现锯齿状边缘,它更适用于那些对图像锐度要求不高的应用。

注意事项

  • 已弃用: UpsamplingNearest2d 已在较新版本的 PyTorch 中弃用,建议改用 torch.nn.functional.interpolate() 方法。

参数

  • size (int or Tuple[int, int], optional): 输出的空间尺寸。
  • scale_factor (float or Tuple[float, float], optional): 空间尺寸的乘数。

形状(同上)

示例代码

import torch
import torch.nn as nn# 创建一个 2x2 的输入张量
input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2)# 初始化 UpsamplingNearest2d 模块,上采样因子为 2
m = nn.UpsamplingNearest2d(scale_factor=2)
output = m(input)# 输出结果
print("Nearest neighbor upsampling:\n", output)

这段代码展示了如何使用 UpsamplingNearest2d 对一个小张量进行最近邻上采样。这种上采样方法简单但可能导致像素化的视觉效果。

nn.UpsamplingBilinear2d

torch.nn.UpsamplingBilinear2d 是 PyTorch 深度学习框架中的一个子模块,用于将输入信号(由多个输入通道组成)应用 2D 双线性上采样。这个模块在图像处理中非常有用,特别是在需要放大图像并保持图像内容平滑时。

用法与用途

  • 用法: 可以通过指定 size(输出图像的尺寸)或 scale_factor(空间尺寸的乘数)来使用 UpsamplingBilinear2d
  • 用途: 在图像处理领域,这个模块通常用于放大图像尺寸,同时尽量保持图像内容的平滑性。它在一些图像超分辨率任务中非常有用。

使用技巧

  • 选择尺寸或比例因子: 根据具体需求选择设置 sizescale_factorsize 直接指定输出图像的高度和宽度,而 scale_factor 指定相对于原始尺寸的放大比例。
  • 双线性插值: 这种方法通过考虑相邻像素值的加权平均来计算新像素点,因此在放大图像时能够保持较好的图像平滑度。

注意事项

  • 已废弃: 请注意,UpsamplingBilinear2d 类在最新版本的 PyTorch 中已被废弃,推荐使用 torch.nn.functional.interpolate(..., mode='bilinear', align_corners=True) 方法进行上采样。
  • 使用替代方法: 虽然已废弃,但了解其原理对于理解图像处理中的双线性插值是有帮助的。

参数

  • size (int or Tuple[int, int], optional): 输出空间尺寸。
  • scale_factor (float or Tuple[float, float], optional): 空间尺寸的乘数。

示例代码

import torch
import torch.nn as nn# 创建一个 2x2 的输入张量
input = torch.arange(1, 5, dtype=torch.float32).view(1, 1, 2, 2)# 初始化 UpsamplingBilinear2d 模块,上采样因子为 2
m = nn.UpsamplingBilinear2d(scale_factor=2)
output = m(input)# 输出结果
print("Bilinear upsampling:\n", output)

这段代码展示了如何使用 UpsamplingBilinear2d 对一个小张量进行双线性上采样。这种上采样方法能够在放大图像时保持更好的图像质量,避免像素化的视觉效果。

总结

这篇博客深入探讨了 PyTorch 深度学习框架中的几个关键的图像上采样和下采样子模块,包括 nn.PixelShuffle, nn.PixelUnshuffle, nn.Upsample, nn.UpsamplingNearest2d, 和 nn.UpsamplingBilinear2d。每个模块的用法、用途、关键技巧和注意事项都进行了详细的说明。PixelShufflePixelUnshuffle 分别用于图像的超分辨率提升和降采样处理,而 Upsample 提供了多种上采样方法,包括最近邻和双线性插值等。UpsamplingNearest2dUpsamplingBilinear2d 则专注于 2D 图像的最近邻和双线性上采样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDNS-GO配置使用教程

环境:openwrt 下载地址:Releases jeessy2/ddns-go GitHub 下载 ssh至openwrt根目录,根据你的处理器选择要下载的版本,我是路由器,选择的是 ddns-go_5.7.1_linux_arm64.tar.gz wget github链接 安装 tar -zxvf…

svn - 配置账号、自动更新、配置log权限

概述 虽然已经有很多朋友的公司都不使用svn了,但也有很多朋友的公司在使用,统一整理了svn的配置账号、自动更新、配置log权限,常用的操作知识。 找到Svn的位置和运行的项目 找到运行中的svn进程PID,/var/svn/,这个就是svn服务启…

计算机网络-2019期末考试解析

【前言】 从内容上看比较像计算机网络课程了,先做了。 一.填空选择题(共 20 分,每空 1 分) 1 、双绞线由两根相互绝缘的、绞合成均匀的螺纹状的导线组成,下列关于双绞线的叙述,不正确的是___ __…

go语言的http post推送

go语言的网络功能比较强大,使用go语言实现http 协议的推送非常简单,这里做了个简单的post推送示例。 代码 package mainimport ("bytes""fmt""io/ioutil""crypto/tls""net/http""flag" …

[modern c++] std::binder 的返回值用 std::function 保存

前言: 当使用 std::function 保存 std::binder 的返回值时,需要注意所有被 placeholder 占用的参数位置都不应该再出现再 std::function 的模板列表里。 参考: c - std::function and std::bind return value - Stack Overflow Demo&#x…

canvas绘制流动的蚂蚁线(图文示例)

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

sqlilabs第五十一五十二关

Less-51(GET - Error based - ORDER BY CLAUSE-String- Stacked injection) 手工注入 源码 单引号闭合用注释(没有后续输出只能堆叠注入) 自动注入 和上一关一样 Less-52(GET - Bind based - ORDER BY CLAUSE-numeric- Stacked injection) 手工注入 数字类型 不用注释直接…

gcc/g++工具详解

目录 一、安装gcc/g 二、背景知识 三、相关选项 四、gcc如何工作 1.预处理 2.编译 3.汇编 4.链接 5.函数库的概念 6.动静态库 一、安装gcc/g gcc/g -v : 用来查看当前你使用的gcc/g版本 因为我的gcc/g是升级过的所以版本更高,如果你用的是centos7.6的话…

干货|Google ads谷歌广告投放详细步骤与技巧

对于跨境电商、独立站运营的卖家来说,谷歌广告投放是必备的流量拓展来源,但是在投入运营之前,你需要完整了解谷歌广告投放详细步骤,以为你丝滑地进行有效投放做好基础,下面为大家整理具体的谷歌投放技巧与步骤&#xf…

BIOS知识枝桠——认识主板

文章目录 前言一、主要构成二、I/O区域1.I/O区域2.CPU区域与内存区域3.拓展区域4.南桥区域与外围接口 其他 前言 主板由电路板铜线芯片针脚数千个精密的元器件组合构成,是把显卡、内存、CPU等核心硬件串在一起的骨架,在计算机中发挥着重要的作用。文章以…

箭头函数与普通函数的差异

一、箭头函数中的this指向 箭头函数的this指向通常有两种情况 如果箭头函数处在一个普通函数之中,那么他的this指向与包裹他的外层函数的this指向一致。其他情况下箭头函数中的this都指向window let obj {fn:function(){console.log(我是普通函数,this obj) …

[渗透测试学习] Surveillance -HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描端口 nmap -sV -sC -v -p- --min-rate 1000 10.10.11.245扫出来两个端口,其中80端口有http服务并且重定向到surveillance.htb 那么我们添加下域名然后访问80端口,发现是企业网站尝试扫描子域名和目录无果后,用Wappalyzer插…

vue3中的hook公共函数封装及运用

vue3 中的 hooks 就是函数的一种写法,就是将文件的一些单独功能的js代码进行抽离出来,放到单独的js文件中,或者说是一些可以复用的公共方法/功能 使用Vue3的组合API封装的可复用的功能函数自定义hook的作用类似于vue2中的mixin技术自定义Hook…

NetCore部署微服务(三)

接上文,服务端部署完成之后,同样我们也需要修改一下客户端代码 Blocking Queries 1.1 服务发现 在客户端代码中使用Nuget安装consul包 修改配置文件,我们首先需要把consul的请求地址配置在配置文件中 修改control方法 using Consul; usin…

复选框QCheckBox和分组框QGroupBox

1. 复选框:QCheckBox 实例化 //实例化 // QCheckBox* checkBox new QCheckBox("是否同意该条款",this);QCheckBox* checkBox new QCheckBox(this);1.1 代码实现 1.1.1 复选框的基本函数 复选框选中状态的参数 Qt::Unchecked //未选中状态 Qt::Part…

学习C指针

指针基本介绍 计算机中的每个内存都有地址 整型分配4字节,字符分配1字节 ,浮点数分配4字节 指针是一个变量,它存放着另外一个变量的地址 int a; int *p; p &a;// a 5; printf(p) //get a address print &a //get a address …

chatgpt免费使用的网站

前言 如果您认为本文对你有帮助,希望可以点赞收藏!感谢您的支持 下面我为你推荐我自己在用的gpt类工具,帮你在工作学习生活上解决一些大小问题 🎉智能GPT 地址: https://meet.adminjs.net 在他的详情中有详细的使用…

半监督学习 - 自训练(Self-training)

什么是机器学习 半监督学习中的自训练(Self-training)是一种利用已标记数据和未标记数据进行模型训练的方法。以下是自训练的详细教程: 步骤一:准备数据集 标记数据集: 收集和标记一小部分数据,用于有监…

Pandas实战100例 | 案例 21: 条件运算

案例 21: 条件运算 知识点讲解 在 Pandas 中进行条件运算可以用于创建新的列或修改现有的列,基于一定的条件逻辑。这些运算通常结合布尔索引或 apply 方法进行。 布尔条件运算: 可以根据列之间的比较生成布尔值列。apply 方法进行条件运算: 使用 apply 方法可以在 DataFrame…

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式 前提docker环境已经安装好 如未安装,请参考博文https://blog.csdn.net/a554521655/article/details/134251763 文章目录 ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式安装emqx查看是否安装并启动成功登录前端查 安…