理解Pytorch中的grid_sample函数

2024-08-27 19:44

本文主要是介绍理解Pytorch中的grid_sample函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 函数签名
    • 参数说明
    • 示意图

grid_sample是 PyTorch 提供的一个函数,用于执行采样操作,通常用于图像处理。它允许通过给定的采样坐标从输入张量中获取相应的值。采样坐标可以包含小数,这时 grid_sample 会使用插值方法计算出对应的值。

torch.nn.functional.grid_sample 是 PyTorch 中用于从输入特征图中采样的函数。它接受一个输入张量(通常是特征图)和一个包含采样点坐标的网格(grid),并在输入张量中按照网格坐标采样,生成一个新的特征图。

函数签名

torch.nn.functional.grid_sample(input, grid, mode='bilinear', padding_mode='zeros', align_corners=True)

参数说明

  1. input:
    这是一个形状为 (N, C, H_in, W_in) 的 4D 张量,其中 N 是批次大小,C 是通道数,H_inW_in 分别是输入特征图的高度和宽度。
  2. grid:
    这是一个形状为 (N, H_out, W_out, 2) 的 4D 张量,表示目标位置的网格。最后一维表示每个位置的 (x, y) 坐标,值的范围通常在 [-1, 1] 之间,其中 -1 对应左/上边界,1 对应右/下边界。
  3. mode:
    指定插值方式,有两个选项:
    • 'bilinear'(默认):使用双线性插值。
    • 'nearest':使用最近邻插值。
  4. padding_mode:
    当采样点超出输入特征图边界时指定填充方式,有三个选项:
    • 'zeros'(默认):超出边界的点填充为 0。
    • 'border':超出边界的点采用边界值填充。
    • 'reflection':超出边界的点使用对称填充。
  5. align_corners(有懂哥可以解释的更清楚一点):
    • True:采样网格的边缘点直接对齐到原始特征图的像素格上。
    • False:采样网格的边缘点直接对齐到原始特征图的像素格的角点上。

示意图

grid_sample.png

这里补充一下,grid经常会生成小数点的值,这些小数点的值是没法作为索引切片的。所以这时候插值的方法就会影响最终的结果了。

grid_sample 提供两种插值方式:

  1. mode='bilinear'

    (默认):

    • 进行双线性插值(bilinear interpolation)。当坐标包含小数时,grid_sample 会根据周围的像素值来计算出精确的采样结果。这意味着,如果采样点的坐标(即 displacement)落在像素之间,grid_sample 会根据四个相邻像素的值进行加权平均,生成插值结果。

    • 具体来说,如果采样点 (x, y) 对应的坐标在 (i, j)(i+1, j+1) 之间,双线性插值会计算如下:
      value = ( 1 − Δ x ) ( 1 − Δ y ) ⋅ V i , j + Δ x ( 1 − Δ y ) ⋅ V i + 1 , j + ( 1 − Δ x ) Δ y ⋅ V i , j + 1 + Δ x Δ y ⋅ V i + 1 , j + 1 \text{value} = (1 - \Delta x)(1 - \Delta y) \cdot V_{i,j} + \Delta x(1 - \Delta y) \cdot V_{i+1,j} + (1 - \Delta x) \Delta y \cdot V_{i,j+1} + \Delta x \Delta y \cdot V_{i+1,j+1} value=(1Δx)(1Δy)Vi,j+Δx(1Δy)Vi+1,j+(1Δx)ΔyVi,j+1+ΔxΔyVi+1,j+1
      其中, Δ x \Delta x Δx Δ y \Delta y Δy 是坐标的小数部分, V i , j V_{i,j} Vi,j 是像素值。

  2. mode='nearest'

    • 采用最近邻插值(nearest-neighbor interpolation)。如果采样坐标包含小数,grid_sample 会取最近的整数位置对应的像素值。

另外grid的取值范围是 [-1, 1],在函数内部会进行尺度的复原:

real ix = THTensor_fastGet4d(grid, n, h, w, 0);
real iy = THTensor_fastGet4d(grid, n, h, w, 1);// normalize ix, iy from [-1, 1] to [0, IH-1] & [0, IW-1]
ix = ((ix + 1) / 2) * (IW-1);
iy = ((iy + 1) / 2) * (IH-1);

这篇关于理解Pytorch中的grid_sample函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112602

相关文章

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分