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

这篇具有很好参考价值的文章主要介绍了【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 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])

图片来自于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 np

def 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()函数及双线性采样文章来源地址https://www.toymoban.com/news/detail-799613.html

到了这里,关于【grid】pytorch中的Flow_filed,MES,affine_gridHGRID,GRID_SAMPLE详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • css中的grid高频布局

    1.一个父级容器内有n个子元素; 2.每个子元素最小宽度是100px; 3.每个子元素最大宽度根据屏幕宽度自适应; 4.每个子元素的宽度保持同宽; 5.每个元素之间有间隔,每一行的两边不留间隙,每一列的上下不留间隙; 6.每个子元素中的文本超出之后省略显示; css排版常见布局

    2024年02月04日
    浏览(58)
  • Vivado IP核生成报错 [IP_Flow 19-3460] Validation failed on parameter ‘XML_INPUT_FILE(XML_INPUT_F

    昨天在使用·Vavido生成DDR3的IP核时,经历过痛苦的管脚绑定后,一路下一步,然后就爆了错误,[IP_Flow 19-3460] Validation failed on parameter \\\'XML_INPUT_FILE(XML_INPUT_F,开始我以为是我管脚绑定错了,就问了同事,同事说如果是管脚绑定错了,绑定完管脚后点下一步就会报错,所以排除,

    2024年02月13日
    浏览(48)
  • 制造知识普及--MES系统中的调度排产管理

    要想弄清楚MES系统调度排产的管理机制,则要首先搞清楚车间调度排产是一套怎样的工作流程,它的难点在什么地方? 生产调度指的是具体组织实现生产作业计划的工作,是对执行生产作业计划过程中发生的问题和可能出现的问题,及时采取措施进行处理,纠正偏差,保证按

    2024年02月02日
    浏览(37)
  • Python中的分布式运行:Selenium Grid

    Selenium Grid 是 Selenium 测试框架的一个关键组件,它为测试人员提供了在多个计算机和浏览器上并行执行测试的能力。通过 Selenium Grid,我们能够更高效地进行大规模测试,并确保应用程序在不同环境中的稳定性和一致性。 我们将从以下几点深入解析Selenium Grid分布式运行的逻辑

    2024年04月12日
    浏览(34)
  • 【入门向】光流法(optical flow)基本原理+深度学习中的应用【FlowNet】【RAFT】

    光流(optical flow)是空间运动物体在成像平面上的 像素运动的瞬时速度 。 通常将一个描述点的瞬时速度的二维矢量 u ⃗ = ( u , v ) vec u = (u,v) u = ( u , v ) 称为光流矢量。 空间中的运动场转移到图像上就表示为光流场(optical flow field)。 光流场是很多光流的集合; 构建光流场

    2023年04月10日
    浏览(45)
  • torch.nn.functional.grid_sample(F.grid_sample)函数的说明 & 3D空间中的点向图像投影的易错点

    由于二者有一定共通之处,因此放在一篇文章内介绍。   该函数的作用是在图像/体素空间中采样特征。 变量名 数据类型 默认值 含义 备注 input Tensor - 原始图像/体素空间的特征 形状需为 ( B , C , H , W ) (B,C,H,W) ( B , C , H , W ) 或 ( B , C , D , H , W ) (B,C,D,H,W) ( B , C , D , H , W ) ,分

    2023年04月24日
    浏览(49)
  • scikit-learn(sklearn)库中的网格搜索(Grid Search)自动化的方法来搜索最佳参数组合

    在机器学习中,调参是一个非常重要的步骤,它可以帮助我们找到最优的模型参数,从而提高模型的性能。然而,手动调参是一项繁琐且耗时的工作,因此,我们需要一种自动化的方法来搜索最佳参数组合。在这方面,scikit-learn(sklearn)库中的网格搜索(Grid Search)功能为我

    2024年02月11日
    浏览(47)
  • Pytorch训练过程中出现RuntimeError: falseINTERNAL ASSERT FAILED... Couldn‘t open shared file mapping...

    一句话:换成pytorch1.8。 今天跑一个开源的模型跑到第9个epoch时报错,如下: 遂搜索,同类问题比较少,有一个博客讲到是显卡性能问题。于是我尝试大幅降低batch_size和works,又跑了一遍,这次第3个epoch就报了同样的错误(我跑一个epoch要一小时)。 这时我就奇怪了,降低了

    2023年04月21日
    浏览(31)
  • 加载模型时出现 OSError: Unable to load weights from pytorch checkpoint file 报错的解决

    查了下,在网上还是个比较常见的报错 一般为加载某模型时突然报错 一般为下载某个 XXX_model.bin 的时候下载报错了 而下载源可以看到为 HuggingFace 首先得看看你是下载哪个模型报错了。像我这里有一个中间模型,所以不知道是哪个低层模型下载报错了。 打开 ~/.cache/huggingfa

    2024年02月08日
    浏览(42)
  • Python中的File(文件)操作

    针对磁盘中的文件的读写。文件I/O I 输入(input) O输出(Output) 文件操作步骤:1.打开文件 2.读写文件 3.关闭文件 写入文件的操作:(把大象装进冰箱) 打开文件 open() == 打开冰箱 写入内容 write() == 把大象装进冰箱 关闭文件 close() == 关闭冰箱门 读取文件的操作:(把大象从冰

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包