评价此页

torch.nn.functional.affine_grid#

torch.nn.functional.affine_grid(theta, size, align_corners=None)[源代码]#

给定一批仿射矩阵 theta,生成 2D 或 3D 流场(采样网格)。

注意

此函数通常与 grid_sample() 结合使用来构建 空间变换网络

参数
  • theta (Tensor) – 输入的仿射矩阵批次,形状为 (N×2×3N \times 2 \times 3) 用于 2D,或 (N×3×4N \times 3 \times 4) 用于 3D

  • size (torch.Size) – 目标输出图像大小。 (N×C×H×WN \times C \times H \times W) 用于 2D,或 N×C×D×H×WN \times C \times D \times H \times W) 用于 3D) 示例:torch.Size((32, 3, 24, 24))

  • align_corners (bool, optional) – 如果 True,则将 -11 视为像素角点的中心而不是图像的角点。有关更完整的描述,请参阅 grid_sample()。由 affine_grid() 生成的网格应以相同的选项设置传递给 grid_sample()。默认为 False

返回

输出 Tensor,形状为 (N×H×W×2N \times H \times W \times 2)

返回类型

output (Tensor)

警告

align_corners = True 时,网格位置取决于相对于输入图像大小的像素大小,因此由 grid_sample() 采样的位置对于给定不同分辨率(即经过上采样或下采样后)的相同输入将会不同。直到 1.2.0 版本,默认行为是 align_corners = True。此后,为了与 interpolate() 的默认行为保持一致,已将默认行为更改为 align_corners = False

警告

align_corners = True 时,1D 数据上的 2D 仿射变换和 2D 数据上的 3D 仿射变换(即当一个空间维度大小为 1 时)是不明确的,并且不是预期用途。当 align_corners = False 时,这不是问题。直到 1.2.0 版本,沿单位维度的所有网格点都被任意视为 -1。从 1.3.0 版本开始,在 align_corners = True 下,沿单位维度的所有网格点都被视为 0(输入图像的中心)。