Pytorch grid_sample解析
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解析相关推荐
- 基于Pytorch再次解析使用块的现代卷积神经网络(VGG)
个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net 基于 ...
- 基于Pytorch再次解析AlexNet现代卷积神经网络
个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net 基于 ...
- 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], ...
- 自然语言处理(三):传统RNN(NvsN,Nvs1,1vsN,NvsM)pytorch代码解析
文章目录 1.预备知识:深度神经网络(DNN) 2.RNN出现的意义与基本结构 3.根据输入和输出数量的网络结构分类 3.1 N vs N(输入和输出序列等长) 3.2 N vs 1(多输入单输出) ...
- Pytorch损失函数解析
本文根据pytorch里面的源码解析各个损失函数,各个损失函数的python接口定义于包torch.nn.modules中的loss.py,在包modules的初始化__init__.py中关于损失函 ...
- 初探强化学习(13)DQN的Pytorch代码解析,逐行解析,每一行都不漏
首先上完整的代码. 这个代码是大连理工的一个小姐姐提供的.小姐姐毕竟是小姐姐,心细如丝,把理论讲的很清楚.但是代码我没怎么听懂.小姐姐在B站的视频可以给大家提供一下.不过就小姐姐这个名字,其实我是怀疑 ...
- ResNet论文笔记及Pytorch代码解析
注:个人学习记录 感谢B站up主"同济子豪兄"的精彩讲解,参考视频的记录 [精读AI论文]ResNet深度残差网络_哔哩哔哩_bilibili 算法的意义(大概介绍) CV史上的技 ...
- 上采样 介绍 + Bilinear pytorch代码解析
上采样 上采样,任何可以让你的图像变成更高分辨率的技术. 最简单的方式是重采样和插值:将输入图片input image进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值bil ...
- Bert-BiLSTM-CRF pytorch 代码解析-3:def _viterbi_decode
理解 github上代码:Bert-BiLSTM-CRF-pytorch Github 相关链接: link. 这部分用于解码阶段 def _viterbi_decode(self, feats, m ...
- 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 ...
最新文章
- 抛弃注意力,类Transformer新模型实现新SOTA
- vivo手机解锁工具_屏幕指纹优势凸显,vivo持续研发致力打造全屏指纹解锁
- expect一键登录mysql
- python嵩天第七章课后题答案_python语言程序设计嵩天第七章答案
- “新基建”提速,数字化硬核人才,你们准备好了吗?
- springMVC简介
- JAVA之stream汪文君_Java8新特性之Stream API
- STM32工作笔记0046---认识杜邦线_以及如何区分杜邦线公母_以及排线和杜邦线的区别
- 宁海元 mysql_每公斤约360元 宁海香榧可以品尝了
- 详解FindBugs的各项检测器
- LaTeX之双栏模板表格布局(单双栏满宽+不满宽)
- 隐私计算之数据隐私保护
- 人工智能会话代理在医疗保健中的有效性:系统综述
- coreldraw sp2精简版 x4_coreldraw下载
- 文案写作之销售文案写作技巧
- maven的使用方法
- OneNote 2007 无法启动的问题
- 【go-filecoin】V0.5.6 发布 / 命令更新
- APP安装个性化的优点
- Spring Boot 与 MVC 的区别,这些终于搞明白了!
热门文章
- 一段美好的记忆,一份真挚的感情,已经远去......
- UnavailableInvalidChannel: The channel is not accessible or is invalid. channel name: conda-forg ch
- 汇编语言--微机CPU的指令系统(五)(循环指令)
- 中国计算机学会高级会员资格,专业会员申请高级会员流程
- 用牛顿迭代法求下面方程在1.5附近的根:2x^3-4x^2+3x-6=0
- SAE 联合乘云至达与谱尼测试携手共同抗疫
- 通过淘宝司法拍卖购买房子,需要注意些什么?
- 灰度图像放大_matlab
- 均值已知检验方差_21.(6)AB test 假设检验例题实操
- iOS播放器SDK-基于FFmpeg解码OpenGL渲染-CYPlayer