【grid】pytorch中的Flow_filed,MES,affine_gridHGRID,GRID_SAMPLE详解

grid in Pytorch

官方链接:
https://pytorch.org/docs/stable/generated/torch.nn.functional.grid_sample.html#torch.nn.functional.grid_sample

https://pytorch.org/docs/stable/generated/torch.nn.functional.grid_sample.html#torch-nn-functional-grid-sample

更多相关请看我的另一篇文章。

Flow filed 流场

在PyTorch中,流场(flow field)通常用来表示图像中像素的运动或位移信息。它是一个二维矢量场,每个像素都对应一个二维矢量,表示该像素从一个图像到另一个图像的位移。流场通常用于计算光流(optical flow)等计算机视觉任务,用于追踪物体的运动、分析视频序列等。

简单来说,就是在把图像a上的点a_{i, j} 变换到图像b的点b_{x, y}上。

Grid 网格

它是一个4维张量,形状为(N, Hout, Wout, 2)。其中N表示批次大小,Hout和Wout表示输出的高度和宽度,2表示每个像素在新图像上的(x, y)坐标。

TORCH.MESHGRID 生成grid

https://pytorch.org/docs/stable/generated/torch.meshgrid.html

MAKE_GRID 用于一次显示多张图

https://pytorch.org/vision/stable/generated/torchvision.utils.make_grid.html

**affine_grid用于仿射变换**

https://pytorch.org/docs/stable/generated/torch.nn.functional.affine_grid.html#torch.nn.functional.affine_grid

TORCH.NN.FUNCTIONAL.GRID_SAMPLE

定义

For each output location output[n, :, h, w], the size-2 vector grid[n, h, w] specifies input pixel locations x and y, which are used to interpolate the output value output[n, :, h, w].

根据输入值和映射网格(flow-field grid)计算输出。它主要用于在图像处理和计算机视觉任务中,根据给定的网格对输入数据进行采样和插值。

提供一个input的Tensor以及一个对应的flow-field网格(比如光流,体素流等),然后根据grid中每个位置提供的坐标信息(这里指input中pixel的坐标),将input中对应位置的像素值填充到grid指定的位置,得到最终的输出。

区别

grid_sample底层是应用双线性插值,把输入的tensor转换为指定大小。那它和interpolate有啥区别呢?

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

函数

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

align_corners: 一个可选参数,通常为None。如果为True,则网格中的像素坐标(-1, -1)和(1, 1)将对准输入图像的四个角。如果为False或None,则(-1, -1)对应于输入图像的左上角,(1, 1)对应于右下角。

例子中,我们将一个大小为4x4的tensor 转换为了一个20x20的。grid的大小指定了输出大小,每个grid的位置是一个(x,y)坐标,其值来自于:输入input的(x,y)中 的四邻域插值得到的。

import torch
from torch.nn import functional as Finp = 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])

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

例子

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt
import numpy as npdef visualize_affine_transformation(input_image, affine_matrix, padding_mode='zeros'):# 使用 grid_sample 进行仿射变换output_image = F.grid_sample(input_image, affine_matrix.unsqueeze(0).expand(input_image.size(0), -1, -1), padding_mode=padding_mode)# 可视化输入和输出图像input_image = input_image.squeeze().numpy()output_image = output_image.squeeze().numpy()plt.figure(figsize=(8, 4))plt.subplot(1, 2, 1)plt.imshow(input_image, cmap='gray')plt.title('Input Image')plt.subplot(1, 2, 2)plt.imshow(output_image, cmap='gray')plt.title('Output Image after Affine Transformation')plt.show()# 创建一个示例输入图像(单通道)
input_image = torch.zeros(1, 1, 5, 5)
input_image[0, 0, :, 2] = 1  # 在中心放置一个白色像素# 定义不同的仿射变换矩阵和 padding_mode
affine_matrix1 = torch.tensor([[1, 0, 2], [0, 1, 2], [0, 0, 1]], dtype=torch.float32)
affine_matrix2 = torch.tensor([[0.5, 0, 0], [0, 2, 0], [0, 0, 1]], dtype=torch.float32)
padding_mode1 = 'zeros'
padding_mode2 = 'border'# 调用可视化函数并尝试不同的参数组合
visualize_affine_transformation(input_image, affine_matrix1, padding_mode1)
visualize_affine_transformation(input_image, affine_matrix2, padding_mode1)
visualize_affine_transformation(input_image, affine_matrix1, padding_mode2)
visualize_affine_transformation(input_image, affine_matrix2, padding_mode2)

TORCH.NN.FUNCTIONAL.AFFINE_GRID

AFFINE_GRID用于生成仿射变换所需的矩阵。也就是映射所需的流场。

Generates a 2D or 3D flow field (sampling grid), given a batch of affine matrices theta.

其中的具体参数

torch.nn.functional.affine_grid(theta, size, align_corners=None)

  • theta:一个4x2的张量,表示仿射变换的参数矩阵。这个矩阵通常由用户指定,它包含了仿射变换的缩放、旋转、平移和错切等信息。矩阵的形状应为 (N, 2, 3),其中 N 是批次大小。通常情况下,你可以使用PyTorch的 torch.tensor 创建这个矩阵。

  • size:一个包含两个整数的元组 (H, W),指定生成的仿射变换网格的大小。H 表示输出的高度,W 表示输出的宽度。

  • align_corners:一个布尔值或None,通常影响网格生成的坐标点的精确位置。

    当它为True时,生成的网格的坐标点会与输入图像的四个角对齐,这意味着生成的网格将确切地覆盖输入图像的所有四个角。这种情况下,坐标点的精确位置与输入图像的四个角相吻合,对于某些精确的几何变换可能更合适。

    如果为False或None(默认值),则生成的网格的坐标点会与输入图像的左上角对齐。这种情况下,坐标点的精确位置可能会在输入图像的像素之间,对于一般的仿射变换通常更常见。

Reference

grid_sample()函数及双线性采样

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

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

相关文章

SSH远程访问与控制

ssh优点 数据传输是加密的,可以防止信息泄露 数据传输是压缩的,可以提高传输速度 作用 sshd 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。 ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务(文件传…

对C语言的理解

1.计算机语言 就是我们人类与计算机进行交流的媒介。我们可以使用编程语言对计算机下达命令,从而让计算机完成我们所需要的功能。 语言 语法 逻辑 计算机语言有很多种。如:C 、C、Java、Go、JavaScript、Python,Scala等。 2.计算机语言简史…

宠物空气净化器品牌推荐哪个牌子好?五款猫用空气净化器高质量推荐品牌

养宠人家里除了猫粮、猫砂和罐头等必备的日常用品外,宠物空气净化器也是必需的。它可以在我们不方便开窗通风的日子里,有效净化室内空气,并且能够有效减少动物皮屑引起的过敏反应。然而,面对市场上琳琅满目的新款空气净化器、功能…

嵌入式简历填写的相关注意事项

嵌入式简历 最近无聊在看咋写嵌入式简历的相关视频,这里就总结下。 嵌入式简历注意方法 自己的联系方式,包括姓名,性别,住在哪里(大概外置就行),电话号码,邮箱(最好不是…

Webpack模块打包工具

目录 Webpack模块打包工具知识点自测01.Webpack 简介以及体验目标讲解小结 02.Webpack 修改入口和出口目标讲解小结 03.案例-用户登录-长度判断目标讲解小结 04.Webpack 自动生成 html 文件目标讲解小结 05.Webpack-打包 css 代码目标讲解小结 06.优化-提取 css 代码目标讲解小…

浅谈对Maven的理解

一、什么是Maven Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队…

C++ Webserver从零开始:基础知识(三)——Linux服务器程序框架

目录 前言 一.服务器编程基础框架 C/S模型 主要框架 二.I/O模型 阻塞I/O 非阻塞I/O 异步I/O 三.两种高效的事件处理模式 Reactor Proactor 四.模拟Proactor模式 五.半同步/半异步的并发模式 六.有限状态机 七.其他提高服务器性能的方法 池 数据复制 上下文切换…

浅谈缓存最终一致性的解决方案

浅谈缓存最终一致性的解决方案 作者:clareguo,腾讯 CSIG 后台开发工程师 来源:腾讯技术工程open in new window 到底是更新缓存还是删除缓存? 到底是先更新数据库,再删除缓存,还是先删除缓存,再更新数据…

非常非常实用!不能错过,独家原创,9种很少人听过,但却实用的混沌映射!!!以鲸鱼混沌映射为例,使用简便

很多人在改进的时候,想着增加混沌映射,增加初始种群的多样性,可是,大多数论文中常见的映射,都被别人使用了,或者不知道被别人有没有使用, 本文介绍9种很少人知道,但非常实用混沌映射…

线性调频信号的解线调(dechirp,去斜)处理matlab仿真

线性调频信号的解线调 线性调频信号的回波模型参考信号去斜处理去斜处理傅里叶变换得到脉压结果解线调仿真总结 线性调频信号的回波模型 对于线性调频脉冲压缩雷达,其发射信号为: s ( t ) r e c t ( t T ) e x p ( j π μ t 2 ) \begin{equation} s(…

强化学习求解TSP:Qlearning求解旅行商问题(Traveling salesman problem, TSP)

一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…

等保测评流程是什么样的?测评周期多久?

等保测评流程是什么样的?测评周期多久? 等保测评一般分成五个阶段,定级、备案、测评、整改、监督检查。 1.定级阶段 针对用户的信息系统有等保专家进行定级,一般常见的系统就是三级系统或者是二级系统。在这里有一个小的区分&am…

[ACM算法学习] 诱导排序与 SA-IS算法

学习自诱导排序与SA-IS算法 - riteme.site 为了简化一些操作,定义 # 是字典序最小的字符,其字典序小于字母集里任意字符,并且将其默认作为每个字符串的最后一个字符,即作 S[|S|] SA-IS 算法 SA-IS 算法是基于诱导排序这种思想。…

【二、自动化测试】unittest测试框架简介

你好啊!我是程序员山茶,你也可以称我为测试开发Guide。本文首发“unittest” 每个语言都包含有自己的测试框架,python中同样有很多测试框架,具体如下 unittest: unittest是Python自带的单元测试框架,它提供…

Umi-OCR:开源、免费、离线、多功能的 OCR 图片文字识别软件

两个版本 官方版本说明 不同版本仅OCR引擎插件不同,其它功能完全一致。 均支持 win7 x64 及以上的系统,附带多国语言识别库。 .7z.exe为自解压包,可以用压缩软件打开,也可以在没有安装压缩软件的电脑上直接双击解压。 Paddle 引…

Docker安装Elasticsearch8详细步骤

前面讲了Elasticsearch7的安装步骤,今天讲讲Elasticsearch8的安装,大同小异。 1、配置环境变量 .env 文件设置运行 docker-compose.yml 配置文件时使用的环境变量。 确保使用 ELASTIC_PASSWORD 和 KIBANA_PASSWORD 变量为 elastic 和 kibana_system 用…

基于机器学习的高考志愿高校及专业分析系统

本项目在“基于 Python 的高考志愿高校及专业分析系统”基础上补充添加了机器学习算法对高考总问进行预测; 项目采用了网络爬虫技术,从指定的高考信息网站上抓取了各大高校的历年录取分数线数据。 通过精细的数据清洗过程,这些数据被存储于…

前端开发vscode 常用插件记录

通用插件: 一、live Server 主要作用是提供一个本地开发服务器,以便实时预览和调试网页应用程序。 二、css peek 它的主要作用是帮助开发人员更轻松地查找和导航CSS样式表中的类、ID、选择器和样式定义(鼠标移动到css样式名即可查看样式&…

云计算任务调度仿真02

前面已经分享过一个仿真项目,但是基于policy gradient方法实现的,考虑到许多人从零到一实现DQN方法有点难度,所以这次分享一个基于DQN实现的仿真项目,非常简单。 这里之所以简单主要得益于它是用pytorch实现的,而pyto…

NLP论文阅读记录 - 2022 W0S | 基于Longformer和Transformer的提取摘要层次表示模型

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Hierarchical Representation Model Based on Longformer and …