文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PyTorch中grid_sample的使用及说明

2023-02-01 12:00

关注

关于grid_sample的使用

grid_sample底层是应用双线性插值,把输入的tensor转换为指定大小。

那它和interpolate有啥区别呢?

interpolate是规则采样(uniform),但是grid_sample的转换方式,内部采点的方式并不是规则的,是一种更为灵活的方式。

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

下面将介绍具体的例子

import torch
from torch.nn import functional as F


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

# 目的是得到一个 长宽为20的tensor
out_h = 20
out_w = 20
 # grid的生成方式等价于用mesh_grid
new_h = torch.linspace(-1, 1, out_h).view(-1, 1).repeat(1, out_w)
new_w = torch.linspace(-1, 1, out_w).repeat(out_h, 1)
grid = torch.cat((new_h.unsqueeze(2), new_w.unsqueeze(2)), dim=2)
grid = grid.unsqueeze(0)

outp = F.grid_sample(inp, grid=grid, mode='bilinear')
print(outp.shape)  #torch.Size([1, 1, 20, 20])

在上面的例子中,我们将一个大小为4x4的tensor 转换为了一个20x20的。

grid的大小指定了输出大小,每个grid的位置是一个(x,y)坐标,其值来自于:输入input的(x,y)中 的四邻域插值得到的。

在这里插入图片描述

图片来自于SFnet(eccv2020)。flow field是grid, low_resolution是input, high resolution是output。

至于grid的值是控制在-1,1的。那如何对应在input上呢。

这个来看一下pytorch的底层源码。

第66行到71行,获取到了grid的x和y,之后对其做了新的变换,变到input的坐标系下了。

IW和IH是input的宽和高。

        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);

torch.nn.functional.grid_sample() 注意点

用法: 主要用于采样,一般是使用bilinear根据grid的坐标采样

F.grid_sample(img, grid, align_corners=True)
dx = torch.linspace(-1,1, 9)
dy = torch.linspace(-1, 1,7)
coords = torch.stack(torch.meshgrid(dy, dx), axis=-1)   #[dy*dx*2]

输入输出情况:

假如是4D 的input:

img.shape : [B,C,H_in,W_in]
grid.shape: [B,H_out,W_out,2]
out: [B,C,H_out,W_out]

细节

1.为什么meshgrid生成坐标的时候,stack成coords时需要逆序(第一层是y,第二层是x)?

Ans:采样的时候,在img上取点,坐标是根据grid来的,grid[:,:,0]是W维度的坐标,grid[:,:,1]是H维度的坐标,所以这个地方需要注意,是反过来的

2.grid的形状仅仅影响output的形状,直接决定取点的还是坐标,所以尤其要注意grid坐标叠。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯