零基础也可以探索 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,bicubic或trilinear。 - 调整对齐角点:
align_corners参数控制角点像素的对齐方式。在使用linear,bilinear,bicubic和trilinear模式时,它会影响插值的结果。
注意事项
- 插值模式: 不同的插值模式适用于不同的应用场景。例如,
nearest通常用于类别标签,而bilinear更适用于图像。 - 大小和比例因子: 可以通过
size或scale_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。 - 用途: 在图像处理领域,这个模块通常用于放大图像尺寸,同时尽量保持图像内容的平滑性。它在一些图像超分辨率任务中非常有用。
使用技巧
- 选择尺寸或比例因子: 根据具体需求选择设置
size或scale_factor。size直接指定输出图像的高度和宽度,而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。每个模块的用法、用途、关键技巧和注意事项都进行了详细的说明。PixelShuffle 和 PixelUnshuffle 分别用于图像的超分辨率提升和降采样处理,而 Upsample 提供了多种上采样方法,包括最近邻和双线性插值等。UpsamplingNearest2d 和 UpsamplingBilinear2d 则专注于 2D 图像的最近邻和双线性上采样。
相关文章:
零基础也可以探索 PyTorch 中的上采样与下采样技术
目录 torch.nn子模块Vision Layers详解 nn.PixelShuffle 用法与用途 使用技巧 注意事项 参数 示例代码 nn.PixelUnshuffle 用法与用途 使用技巧 注意事项 参数 示例代码 nn.Upsample 用法与用途 使用技巧 注意事项 参数 示例代码 nn.UpsamplingNearest2d …...
代码随想录算法训练营Day23|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
目录 669. 修剪二叉搜索树 前言 思路 递归法 108.将有序数组转换为二叉搜索树 前言 递归法 538.把二叉搜索树转换为累加树 前言 递归法 总结 669. 修剪二叉搜索树 题目链接 文章链接 前言 本题承接昨天二叉搜索树的插入和删除操作题目,要对整棵二叉搜索树…...
乱 弹 篇(一)
题记 对于“乱弹”这个词汇的释义,《辞海》上仅有“ 戏曲剧种,亦指声腔 ”8个字。而由于“乱弹 ”的“ 弹”谐音谈”,这就容易让人联想到“乱谈”。不过从文体上看,“乱谈”也非乱七八糟之谈,反倒是“东西南北&#x…...
《JVM由浅入深学习【八】 2024-01-12》JVM由简入深学习提升分(JVM的垃圾回收算法)
目录 JVM的垃圾回收算法1. 标记-清除算法(Mark-Sweep)原理步骤优点缺点 2. 复制算法(Copying)原理步骤优点缺点 3. 标记-整理算法(Mark-Compact)原理步骤优点缺点 4. 分代收集算法(Generational…...
在矩阵回溯中进行累加和比较的注意点
1 总结 在回溯时,如果递归函数采用void返回,在入口处使用了sum变量,那么一般在初次调用dfs的地方,这个sum的初始值可能不是0,而是数组的对应指针的值,在比较操作的时候,需要在for循环开始之前进行…...
AI语音机器人的发展
第一代AI语音机器人具体投入研发的开始时间不太清楚,只记得2017年的下半年就已经开始接触到成型的AI语音机器人,并且正式商用。语音识别效果还不多,大多都是接入的科大讯飞或者百度的ASR。 2018年算是AI语音机器人的“青春期”吧,…...
SQL语句错误this is incompatible with sql_mode=only_full_group_by解决方法
一、原理层面 这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题: mysql 5.7.5版本以上默认的sql配置是:sql_mode“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。 很多从5.6升级到5.7时,为了语法兼容,大部…...
静态长效代理IP和动态短效代理IP有哪些用途?分别适用场景是什么?
静态长效代理IP和动态短效代理IP是两种常见的代理IP类型,它们在用途和适用场景上存在一定的差异。了解它们的特性以及使用场景有助于我们更好地利用代理IP,提高网络访问的效率和安全性。 一、静态长效代理IP 1. 用途 静态长效代理IP是指长期保持稳定的代…...
基于Spring Boot+Vue的课堂管理系统(前后端分离)
该项目完全免费 介绍 基于Spring BootVue的课堂管理系统。前后端分离。包含教师授课管理、学生选退课、聊天室、签到、笔记管理模块等。 技术架构 SpringBoot MyBatis Redis WebSocket VueCLI Axios Element UI 项目特点: 1、后台使用MyBatis连接数据库&…...
供排水管网管理信息化的必要性
供排水管网是城市供水系统的大动脉,它负担者将优质水源输送到最终用户的重要职责,对供水系统有着极其重要的作用。城市供排水管网埋设在地下,规模庞大,仅靠人工难以管理。同时,由于城市的发展,管网连接结构…...
统一格式,无限创意:高效管理不同格式图片批量转换
在数字时代,图片格式的多样性带来了管理上的不便。为了满足不同的需求,我们经常需要将大量图片转换为统一的格式。那么,有没有一种简单、高效的方法来解决这个问题呢?答案是肯定的!今天,我们将为您介绍一款…...
工作电压范围宽的国产音频限幅器D2761用于蓝牙音箱,输出噪声最大仅-90dBV
近年来随着相关技术的不断提升,音箱也逐渐从传统的音箱向智能音箱、无线音箱升级。同时在消费升级的背景下,智能音箱成为人们提升生活品质的方式之一。智能音箱是智能化和语音交互技术的产物,具有点歌、购物、控制智能家居设备等功能…...
中国智造闪耀CES | 木牛科技在美国CES展亮相多领域毫米波雷达尖端方案
素有全球科技潮流“风向标”之称的2024国际消费类电子产品展(CES),于1月9-12日在美国拉斯维加斯会议中心举办。CES是全球最大的消费电子和消费技术展览会之一,汇集了世界各地优秀的消费电子和科技公司,带着最好的产品来…...
亚马逊衣物收纳 梳妆台 收纳柜CPC认证ASTM F2057-23 报告分析
衣物收纳商品是指带有抽屉或铰链门的家具商品,通常是卧室家具,用于存放衣物。该政策适用于独立式服装收纳商品 包括但不限于箱子、五斗橱、抽屉柜、大橱柜、衣橱柜、衣橱、门柜和梳妆台,并且满足以下要求: 衣物收纳商品是指带有抽…...
【设计模式】02-SOLID 设计原则
面向对象编程(OOP)是一种广泛应用的编程范式,它鼓励开发者通过对象来模拟现实世界。为了提高面向对象设计(OOD)的质量和可维护性,Robert C. Martin提出了 SOLID 原则,这五个原则构成了编写良好、…...
突然间我懂了软件
什么是 “遗留代码” – 它是一个不再由具有这些代码相关理论的人维护的代码库。 单枪匹马的工程师能做出比同样有能力的专业团队更好的产品。单干的工程师会花时间为自己的程序建立一套完整的理论,而专业人员则会定期在不同的项目之间流动,他们只对自己…...
游戏美术的技与艺
大家好,我是阿赵。 可能很多朋友都知道,我刚进入游戏行业的时候,做的是美术工作,包括了建模、贴图、动画等,都做过。我对各种美术资源制作也都很熟悉,懂得很多制作的技术。但最后,我却没有继…...
Python(35):Python3 通过https上传文件和下载文件
Python(35):Python3 通过https上传文件和下载文件 Python http方式的下载,参考:https://blog.csdn.net/fen_fen/article/details/113753983 https需要先安装需要的模块 1、上传示例 1.1、调用: upload_strategy(access_token,"1234…...
【MySQL】日期格式为 YYYY-MM 无法直接使用 DATE_SUB 函数的解决方案(特殊处理 或 PERIOD_DIFF 函数)
力扣题 1、题目地址 1843. 可疑银行账户 2、模拟表 表:Accounts Column NameTypeaccount_idintmax_incomeint account_id 是这张表具有唯一值的列。每行包含一个银行账户每月最大收入的信息。 表:Transactions Column NameTypetransaction_idint…...
Redis的key淘汰方式和内存不足淘汰方式
Redis的key过期淘汰方式 Redis key过期策略 定期删除惰性删除 Redis如何淘汰过期的key 定期删除 隔一段时间,就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除定期删除可能会导致很多过期key到了时间并没有被删除掉&#x…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
