前言:
最近博主搭建网络需要用到一些直接对于GPU上的tensor的上采样和下采样操作,如果使用opencv那么就需要先将数据从GPU上面copy到CPU,操作完后在转移到GPU。这样不能利用GPU的加速技术,并且还会导致程序阻塞,pytorch中带有函数interpolate可以实现这个功能,下面详细讲解这个函数的使用。
torch.nn.functional.
interpolate
(input, size=None, scale_factor=None, mode=’nearest’, align_corners=None, recompute_scale_factor=None, antialias=False) [SOURCE]
**输入尺寸以以下形式解释: 小批量 x 通道 x [可选深度] x [可选高度] x 宽度。
**向下/向上对给定 <span>size </span>
或 给定的输入进行采样 <span>scale_factor</span>
**用于插值的算法由 <span>mode</span>
确定,目前支持时间、空间和体积采样,即预期输入的形状是 3-D、4-D 或 5-D。
*可用于调整大小的模式有:(中英文对照)
nearest, linear (3D-only), bilinear, bicubic (4D-only), trilinear (5D-only), area, nearest-exact
最近、线性(仅限 3D)、 双线性、双三次(仅限 4D)、三线性(仅限 5D)、面积、最近精确
- input ( Tensor ) – 输入张量
- size ( int or Tuple [ int ] or Tuple [ int , int ] or Tuple [ int , int , int ] ) – 输出空间尺寸。
- scale_factor ( float 或 Tuple [ float ] ) – 空间大小的乘数。如果scale_factor是一个元组,它的长度必须匹配input.dim()。
- mode ( str ) – 用于上采样的算法:
<span><span>'nearest'</span></span>
|<span><span>'linear'</span></span>
|<span><span>'bilinear'</span></span>
|<span><span>'bicubic'</span></span>
|<span><span>'trilinear'</span></span>
|<span><span>'area'</span></span>
|<span><span>'nearest-exact'</span></span>
. 默认:<span><span>'nearest'</span></span>
- align_corners ( bool , optional ) – 在几何上,我们将输入和输出的像素视为正方形而不是点。如果设置为
<span><span>True</span></span>
,则输入和输出张量由其角像素的中心点对齐,保留角像素处的值。如果设置为<span><span>False</span></span>
,则输入和输出张量通过其角像素的角点对齐,并且插值对边界外的值使用边缘值填充,使得此操作在保持相同时与输入大小 无关。<span><span>scale_factor</span></span>
这仅在<span><span>mode</span></span>
is<span><span>'linear'</span></span>
、或<span><span>'bilinear'</span></span>
时有效。默认:<span><span>'bicubic'</span></span>
<span><span>'trilinear'</span></span>
<span><span>False</span></span>
- recompute_scale_factor ( bool , optional ) – 重新计算 scale_factor 以用于插值计算。如果recompute_scale_factor是
<span><span>True</span></span>
,则 必须传入 scale_factor 并且scale_factor用于计算输出大小。计算出的输出大小将用于推断插值的新比例。请注意,当scale_factor为浮点数时,由于舍入和精度问题,它可能与重新计算的scale_factor不同。如果recompute_scale_factor是<span><span>False</span></span>
,那么size或scale_factor将直接用于插值。默认值:<span><span>None</span></span>
. - *antialias ( bool , optional ) — 应用抗锯齿的标志。默认值:
<span><span>False</span></span>
. 使用 anti-alias 选项和<span><span>align_corners=False</span></span>
,插值结果将匹配 Pillow 结果以进行下采样操作。支持的模式:<span><span>'bilinear'</span></span>
,<span><span>'bicubic'</span></span>
.
重要note:
上采样和想采样的参数设置不一致,不要弄混了
NOTE
使用 <span><span>mode='bicubic'</span></span>
,可能会导致过冲,换句话说,它可以为图像生成负值或大于 255 的值。如果要减少显示图像时的过冲,请显式调用。 <span><span>result.clamp(min=0,</span></span> <span><span>max=255)</span></span>
NOTE
Mode <span><span>mode='nearest-exact'</span></span>
匹配 Scikit-Image 和 PIL 最近邻插值算法,并修复了 <span><span>mode='nearest'</span></span>
. 引入此模式是为了保持向后兼容性。模式 <span><span>mode='nearest'</span></span>
匹配有缺陷的 OpenCV 的 <span><span>INTER_NEAREST</span></span>
插值算法。
NOTE
具体的使用方法:
from functools import partial
class test(nn.Module):
#
def __init__(self,in_ch,out_ch,scale_factor=0.5):
super(test, self).__init__()
#在搭建网络的类里面初始化
self.downsample = partial(F.interpolate,scale_factor=scale_factor, mode='area',recompute_scale_factor=True)
# 注意关键字scale_factor 要与 recompute_scale_factor 搭配使用
def forward(self, x):
x = self.downsample(x)
return x
recompute_scale_factor=True, 重新计算 scale_factor 以用于插值或下采样计算,
如果不设置该参数报错误:
# .../lib/python3.9/site-packages/torch/nn/functional.py:3502:
# UserWarning: The default behavior for interpolate/upsample with float scale_factor changed in 1.6.0 to align with other frameworks/libraries,and now uses scale_factor directly, instead of relying on the computed output size. If you wish to restore the old behavior,please set recompute_scale_factor=True. See the documentation of nn.Upsample for details.
5. 插值方法:
可以设置 scale_factor参数,最后输出的尺寸为原始尺寸*该参数,大于1便是插值,小于就是降采样。mode参数是插值算法类型。
Original: https://blog.csdn.net/weixin_44503976/article/details/126597180
Author: 两只蜡笔的小新
Title: torch.nn.interpolate—torch上采样和下采样操作
相关阅读
Title: PyTorch1.11.0 GPU版本安装(python3.8+pyTorch1.11.0,torch1.11.0+cu113 torchvision0.12.0+cu113)
目录
2. 安装pytorch v1.11.0:(在pytorch官网的历史版本里找安装命令)
电脑:win11 + 英伟达显卡(GeForce RTX 3090)+ Anaconda3-2021-05(python3.8.8)+ cuda11.6。
目标:安装gpu版本的PyTorch1.11.0(torch1.11.0/cu113 + torchvision0.12.0/cu113)
写在前面:由于需要安装较新gpu版本的pytorch(感觉显卡越新,cuda版本越高,pytorch版本也需要越新,才能适配),于是再次安装pytorch。电脑里已经装好Anaconda3-2021-05(python3.8.8),电脑里的英伟达3090显卡适配的cuda最高版本为11.6,也已经装好cuda11.6。接下来,开始安装PyTorch1.11.0(torch1.11.0+cu113,torchvision0.12.0+cu113)~~~
一、电脑相关信息
- nvidia-smi,可以看到驱动最高支持的cuda版本为11.6(CUDA Version:11.6)。

- 电脑已经安装好cuda toolkit11.6。
下载地址:CUDA Toolkit Archive | NVIDIA Developer


下载好的exe压缩包(cuda_11.6.2_511.65_windows.exe)如下所示:

点击exe压缩包进行安装,安装路径选择默认的c盘默认路径。安装好之后可以看到:

二、安装Pytorch1.11.0 GPU版本
1. 准备:新建虚拟环境
1)首先安装Anaconda。(很简单,自行搜索)
2)其次在用Anaconda建一个虚拟环境。
- conda create -n pytorch1.11.0 python=3.8 (pytorch1.11.0表示自己起的环境的名字。pytorch1.11.0要求python至少是3.7或者3.8,python3.6不行不支持,所以此处不能写python=3.6,此处我选择python=3.8。)
- conda activate pytorch1.11.0 (激活虚拟环境)
2. 安装pytorch v1.11.0:(在pytorch官网的历史版本里找安装命令)
1)在上述PyTorch官网历史版本链接( https://pytorch.org/get-started/previous-versions/)里面,找到v1.11.0的安装命令, 此处选择的是cuda11.3对应的PyTorch安装命令。如下图所示:


CUDA 11.3
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 –extra-index-url https://download.pytorch.org/whl/cu113
2)安装pytorch v1.11.0(torch1.11.0+cu1113 ,torchvision0.12.0+cu113)
安装命令:
# CUDA 11.3
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113

3)测试:
可以看到torch和torchvision对应的版本:torch1.11.0+cu113 ,torchvision0.12.0+cu113

这样,pytorch v1.11.0 GPU版本(torch1.11.0+cu1113 ,torchvision0.12.0+cu113)就已经安装成功啦!
Original: https://blog.csdn.net/weixin_39450145/article/details/125669330
Author: weixin_39450145
Title: PyTorch1.11.0 GPU版本安装(python3.8+pyTorch1.11.0,torch1.11.0+cu113 torchvision0.12.0+cu113)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/285569/
转载文章受原作者版权保护。转载请注明原作者出处!