PyTorch中grid_sample的使用方法

news2024/11/15 4:20:17

官方文档
首先Pytorch中grid_sample函数的接口声明如下:

torch.nn.functional.grid_sample(input, grid, mode='bilinear', padding_mode='zeros', align_corners=None)
  • input : 输入tensor, shape为 [N, C, H_in, W_in]
  • grid: 一个field flow, shape为[N, H_out, W_out, 2],最后一个维度是每个grid(H_out_i, W_out_i)在input的哪个位置的邻域去采点。数值范围被归一化到[-1,1]。

这里的input和output就是输入的图片,或者是网络中的feature map。关键的处理过程在于grid,grid的最后一维的大小为2,即表示input中pixel的位置信息 (x,y) ,这里一般会将x和y的取值范围归一化到 [−1,1] 之间, (−1,−1) 表示input左上角的像素的坐标,(1,1) 表示input右下角的像素的坐标,对于超出这个范围的坐标(x,y),函数将会根据参数_padding_mode_的设定进行不同的处理。

  • padding_mode=‘zeros’:对于越界的位置在网格中采用pixel value=0进行填充。
  • padding_mode=‘border’:对于越界的位置在网格中采用边界的pixel value进行填充。
  • padding_mode=‘reflection’:对于越界的位置在网格中采用关于边界的对称值进行填充。

对于mode='bilinear’参数,则定义了在input中指定位置的pixel value中进行插值的方法,为什么需要插值呢?因为前面我们说了,grid中表示的位置信息x和y的取值范围在 [−1,1] 之间,这就意味着我们要根据一个浮点型的坐标值在input中对pixel value进行采样,mode有nearest和bilinear两种模式。

  • nearest就是直接采用与 (x,y) 距离最近处的像素值来填充grid
  • bilinear则是采用双线性插值的方法来进行填充,总之其与nearest的区别就是nearest只考虑最近点的pixel value,而bilinear则采用(x,y)周围的四个pixel value进行加权平均值来填充grid。

双线性插值:

举例:

import torch
from torch.nn import functional as F


inp = torch.ones(1, 128, 4, 4)

# 目的是得到一个 长宽为20的tensor
out_h = 20
out_w = 20
grid_x, grid_y = torch.meshgrid(
        torch.linspace(-1, 1, out_h),
        torch.linspace(-1, 1, out_w)
    )
# grid 最后一维度表示在input采样的位置(x,y),y表示图像纵轴,x表示横轴,grid顺序应该先x递增,后y递增
grid = torch.stack((grid_y, grid_x), dim=-1).unsqueeze(0) # (out_h, out_w, 2)
# F.grid_sample -> input:(N,C,Hin,Win), grid:(N,Hout,Wout,2), output:(N,C,Hout,Wout)
# outp = F.grid_sample(features, grid, align_corners=True, mode='bilinear')
outp = F.grid_sample(inp, grid, align_corners=True, mode='nearest')
print(outp.shape) # torch.Size([1, 128, 20, 20])

对图像,特征进行采样用以上grid才不会图像位置错误

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

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

相关文章

PS 安装教程 2022版(全网最详细图文教程)

目录 一.简介 二.安装步骤 软件:PS版本:2022语言:简体中文大小:2.83G安装环境:Win10(1903)及以上版本,64位操作系统硬件要求:CPU2.0GHz 内存4G(或更高,不支…

【Unity小技巧】如何在 Unity 中使用我们的Cinemachine虚拟相机跟踪多个目标

文章目录 每篇一句前言安装虚拟相机跟随多个目标和间隙占比代码控制添加主角目标代码控制添加敌人目标扩展代码如何实现虚拟相机跟随玩家呢?我们来实现一下修改虚拟相机的视野修改虚拟相机的位置和角度 推荐完结 每篇一句 岂不闻天无绝人之路,只要我想走…

变压器分析

参考方向 如图所示,是变压器的原理图。其中, ϕ \phi ϕ是变压器铁芯的有效磁通, ϕ 1 \phi_1 ϕ1​是主线圈的漏磁通, ϕ 2 \phi_2 ϕ2​是副线圈的漏磁通。图中 u 1 u_1 u1​为初级线圈输入电压, i 1 i_1 i1​为初级…

iOS Autolayout 约束设置【顺序】的重要性!

0x00 顺序不同,结果不同 看图说话 1 代码是这样滴~ 设置好约束,让 4 个按钮,宽度均分~ 结果如上图 [_pastButton.topAnchor constraintEqualToAnchor:_textView.bottomAnchor constant:6].active YES;[_pastButton.leftAnchor constraintEq…

电子学会C/C++编程等级考试2023年05月(四级)真题解析

C/C等级考试(1~8级)全部真题・点这里 第1题:怪盗基德的滑翔翼 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度…

云原生安全:如何保护云上应用不受攻击

文章目录 云原生安全的概念1. 多层次的安全性2. 自动化安全3. 容器安全4. 持续监控5. 合规性 云原生安全的关键挑战1. 无边界的环境2. 动态性3. 多云环境4. 容器化应用程序5. API和微服务 如何保护云上应用不受攻击1. 身份验证和访问控制示例代码: 2. 数据加密示例代…

Python时间序列分析库介绍:statsmodels、tslearn、tssearch、tsfresh

时间序列分析在金融和医疗保健等领域至关重要,在这些领域,理解随时间变化的数据模式至关重要。在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库…

深入浅出排序算法之计数排序

目录 1. 原理 2. 代码实现 3. 性能分析 1. 原理 首先看一个题目,有n个数,取值范围是 0~n,写出一个排序算法,要求时间复杂度和空间复杂度都是O(n)的。 为了达到这种效果,这一篇将会介绍一种不基于比较的排序方法。这…

Day 11 python学习笔记

模块 内置模块 random random:随机数模块 我们可以在解释器中看到其蕴含的方法 接下来我解释一些常用的方法: random.random( ) random.random( ) 返回0-1的随机数 [0,1) >>> random.random() 0.364183511476754 random.randint(n,m) r…

Java JSON字符串转换成JSON对象

方法一:要先转为LinkedHashMap,再转json(推荐,我使用这种方法) String jsonStr"{\"id\":\"10001\",\"name\":\"肉类\",\"menus\":[{\"name\":\&qu…

Node切换版本

以非安转版本方式安装Node,经常会需要进行Node的版本切换。 官方的做法是:nvm use version。 但是这种方法经常会失败。如下: 其实nvm命令的本质就是给当前node版本添加一个快捷方式(或软连接),因为环境变…

AT800(3000) +昇腾300V 之一 环境部署

环境部署 背景服务器 硬件资源系统:CPU:NPU:固件与驱动CANN 背景 因nvidia 受限 公司转华为推理服务器 AT800(3000) 昇腾 ,将推出一系列文章 ,记录过程。 服务器 硬件资源 系统:…

再畅通工程(最小生成树)

题目描述:还是畅通工程 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)&…

轻量封装WebGPU渲染系统示例<6>-混合模式(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/BlendTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5. 用户…

8086汇编环境的使用

先打开emu8086,写入代码 ;给11003H的地址赋1234H的值;不能直接给DS赋值需要寄存器中转 mov dx, 1100H mov ds, dx mov ax, 1234H ;不能直接给内存地址赋值,需要DS:[偏移地址]指向内存 mov [3H], ax 点击emulate开始模拟 出现调试框,调试框的…

moviepy处理手机端图片旋转问题

1.手机拍摄的图片或者在ffmpeg处理的时候,会读取图片的元数据从而进行旋转 左边是拍摄的图片,右侧是进行处理以后得图片 video VideoFileClip(file_path) if video.rotation in (90, 270):video video.resize(video.size[::-1])video.rotation 0

Live800:智能客服的意义和价值

近年来,智能客服系统的出现引起了各行各业的共同关注,成为了许多企业在数字化转型中的重要步骤之一。智能客服系统能够帮助企业降低人力成本,提高客户满意度,对于企业而言具有不可替代的价值和意义。 智能客服系统的主要价值包括以…

Diffusion Models视频生成-博客汇总

0、【论文汇总】Diffusion Models视频生成/视频编辑/可控视频生成/跨模态视频生成 本文总结了Diffusion Models视频生成领域相关的工作,目前共收录142篇,持续更新中。 1、Video Diffusion Models:基于扩散模型的视频生成 扩散模型已经被广泛运用到图像生成、image-to-image转…

网络搭建和运维的基础题目

服务部分(linux) 实操部分 1.在任意文件夹下面创建形如 A/B/C/D 格式的文件夹系列。 [rootlocalhost ~]# mkdir -p A/B/C/D 2.在创建好的文件夹下面,A/B/C/D ,里面创建文本文件 mkdir.txt [rootlocalhost ~]# cd A/B/C/D [r…

前端跨页面通信,你知道哪些方法?

一、同源页面 1.广播站模式 一个页面将消息通知给一个“中央站”,再由“中央站”通知给各个页面,以下会介绍这个中央站可以是LocalStorage,可以是BroadCast Channel实例,也可以是一个Service worker 1.1.LocalStorageStorageEven…