grid in Pytorch
更多相关请看我的另一篇文章。
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
MAKE_GRID 用于一次显示多张图
**affine_grid用于仿射变换**
TORCH.NN.FUNCTIONAL.GRID_SAMPLE
定义
For each output location
output[n, :, h, w]
, the size-2 vectorgrid[n, h, w]
specifiesinput
pixel locationsx
andy
, which are used to interpolate the output valueoutput[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 转换为了一个20x