grid_sample函数

这篇博客只对bilinear mode进行解释说明,并且会对align_corners为True或False两种情况进行分情况讨论。

torch.nn.functional.grid_sample(input, grid, mode=‘bilinear’, padding_mode=‘zero’, align_corners=None)

nn.functional下的grid_sample函数会根据提供的坐标(grid)对input pixels进行采样(sampling),这篇文章只以bilinear interpolation sampling为例。 根据官方文档介绍,input shape必须是4D或5D的,分别用于二维和三维图像的采样(前两个维度为batch size和channel)。

input的shape(4D case)是(N,C,Hin,Win)(N, C, H_{in}, W_{in})(N,C,Hin​,Win​), 这个很好理解。

gird的shape(4D case)是(N,Hout,Wout,2)(N, H_{out}, W_{out}, 2)(N,Hout​,Wout​,2), 这里的H和W是output的长和宽,有一点需要注意的是,grid_sample的output shape是(N,C,Hout,Wout)(N, C, H_{out}, W_{out})(N,C,Hout​,Wout​), 所以output的shape和grid的shape是一样的, 而不是和input的shape一样。grid的最后一个维度2表示的是x,y坐标, 如果是5D的情况,也就是处理三维图像的时候,gird的最后一个维度就是3,因为需要引入z坐标。

grid表示的是的sampling pixel的坐标,这个坐标是被normalized过的,grid坐标取值范围为[-1, 1]。 点(-1,-1)为左上角的pixel,(1,1)为右下的pixel。中间的坐标值为某个浮点数。

grid_sample函数做的就是根据grid坐标,从input的pixels里采样。 如果此坐标下没有对应的input pixel,就要用bilinear interpolation从周围的pixels采样。

下面是Piotr给出的一个例子
https://discuss.pytorch.org/t/solved-torch-grid-sample/51662/2

inp = torch.arange(4*4).view(1, 1, 4, 4).float()
d = torch.linspace(-1, 1, 8)
meshx, meshy = torch.meshgrid((d, d))
grid = torch.stack((meshy, meshx), 2).unsqueeze(0)
output = torch.nn.functional.grid_sample(inp, grid, align_corners=False)

meshy是x坐标

meshx是y坐标

align_corners=True

当align_corners=True时,以坐标(-0.7143, -0.7143)为例,请看下图。
因为align_corners=True,所以(-1, -1)点的值为0, (1, 1)点的值为15,可以认为grid的-1和1在是在corner pixel的中心位置。由此可以推出值为1和2的坐标为(-0.3333, 0)和(0.3333, 0)。我们要采样的点(-0.7143, -0.7143)在0, 1, 4, 5中间,所以要从这四点进行采样。根据坐标算出长度比例,然后用bilinear interpolation算出坐标(-0.7143, -0.7143)的值就okay了。

下图是align_corners=True的output

align_corners=False

当align_corners=False时,以坐标(0.7143, -0.7143)为例,请看下图。
注意:这个例子的坐标和上个例子的坐标不一样。

因为align_corners=False, 所以(-1, -1)点的值不为0,(1, 1)点的值也不是15,grid的-1和1不在corner pixel的中心位置,而是在正方形像素的角。所以(-0.25, -0.25)的值才是0, (0.75, 0.75)的值才是15。由此可以推出值为1和2的坐标分别为(-0.25, -0.75)和(0.25, -0.75)。我们要采样的点(0.7143, -0.7143)在2, 3, 6, 7中间,所以要从这四点进行采样。根据坐标算出长度比例,然后用bilinear interpolation算出坐标(0.7143, -0.7143)的值就okay了。

下图是align_corners=False的output:

Pytorch grid_sample解析相关推荐

  1. 基于Pytorch再次解析使用块的现代卷积神经网络(VGG)

    个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net 基于 ...

  2. 基于Pytorch再次解析AlexNet现代卷积神经网络

    个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net 基于 ...

  3. pytorch代码解析:loss = y_hat - y.view(y_hat.size())

    pytorch代码解析:pytorch中loss = y_hat - y.view(y_hat.size()) import torchy_hat = torch.tensor([[-0.0044], ...

  4. 自然语言处理(三):传统RNN(NvsN,Nvs1,1vsN,NvsM)pytorch代码解析

    文章目录 1.预备知识:深度神经网络(DNN) 2.RNN出现的意义与基本结构 3.根据输入和输出数量的网络结构分类 3.1 N vs N(输入和输出序列等长) 3.2 N vs 1(多输入单输出) ...

  5. Pytorch损失函数解析

    本文根据pytorch里面的源码解析各个损失函数,各个损失函数的python接口定义于包torch.nn.modules中的loss.py,在包modules的初始化__init__.py中关于损失函 ...

  6. 初探强化学习(13)DQN的Pytorch代码解析,逐行解析,每一行都不漏

    首先上完整的代码. 这个代码是大连理工的一个小姐姐提供的.小姐姐毕竟是小姐姐,心细如丝,把理论讲的很清楚.但是代码我没怎么听懂.小姐姐在B站的视频可以给大家提供一下.不过就小姐姐这个名字,其实我是怀疑 ...

  7. ResNet论文笔记及Pytorch代码解析

    注:个人学习记录 感谢B站up主"同济子豪兄"的精彩讲解,参考视频的记录 [精读AI论文]ResNet深度残差网络_哔哩哔哩_bilibili 算法的意义(大概介绍) CV史上的技 ...

  8. 上采样 介绍 + Bilinear pytorch代码解析

    上采样 上采样,任何可以让你的图像变成更高分辨率的技术. 最简单的方式是重采样和插值:将输入图片input image进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值bil ...

  9. Bert-BiLSTM-CRF pytorch 代码解析-3:def _viterbi_decode

    理解 github上代码:Bert-BiLSTM-CRF-pytorch Github 相关链接: link. 这部分用于解码阶段 def _viterbi_decode(self, feats, m ...

  10. Bert-BiLSTM-CRF pytorch 代码解析-1:def _forward_alg(self, feats, mask=None)

    理解 github上代码:Bert-BiLSTM-CRF-pytorch Github 相关链接: link. neg_log_likelihood_loss = forward_score - go ...

最新文章

  1. 抛弃注意力,类Transformer新模型实现新SOTA
  2. vivo手机解锁工具_屏幕指纹优势凸显,vivo持续研发致力打造全屏指纹解锁
  3. expect一键登录mysql
  4. python嵩天第七章课后题答案_python语言程序设计嵩天第七章答案
  5. “新基建”提速,数字化硬核人才,你们准备好了吗?
  6. springMVC简介
  7. JAVA之stream汪文君_Java8新特性之Stream API
  8. STM32工作笔记0046---认识杜邦线_以及如何区分杜邦线公母_以及排线和杜邦线的区别
  9. 宁海元 mysql_每公斤约360元 宁海香榧可以品尝了
  10. 详解FindBugs的各项检测器
  11. LaTeX之双栏模板表格布局(单双栏满宽+不满宽)
  12. 隐私计算之数据隐私保护
  13. 人工智能会话代理在医疗保健中的有效性:系统综述
  14. coreldraw sp2精简版 x4_coreldraw下载
  15. 文案写作之销售文案写作技巧
  16. maven的使用方法
  17. OneNote 2007 无法启动的问题
  18. 【go-filecoin】V0.5.6 发布 / 命令更新
  19. APP安装个性化的优点
  20. Spring Boot 与 MVC 的区别,这些终于搞明白了!

热门文章

  1. 一段美好的记忆,一份真挚的感情,已经远去......
  2. UnavailableInvalidChannel: The channel is not accessible or is invalid. channel name: conda-forg ch
  3. 汇编语言--微机CPU的指令系统(五)(循环指令)
  4. 中国计算机学会高级会员资格,专业会员申请高级会员流程
  5. 用牛顿迭代法求下面方程在1.5附近的根:2x^3-4x^2+3x-6=0
  6. SAE 联合乘云至达与谱尼测试携手共同抗疫
  7. 通过淘宝司法拍卖购买房子,需要注意些什么?
  8. 灰度图像放大_matlab
  9. 均值已知检验方差_21.(6)AB test 假设检验例题实操
  10. iOS播放器SDK-基于FFmpeg解码OpenGL渲染-CYPlayer