torch.nn.functional.affine_grid¶
- torch.nn.functional.affine_grid(theta, size, align_corners=None)[源码][源码]¶
给定一批仿射矩阵
theta
,生成 2D 或 3D 流场(采样网格)。注意
此函数通常与
grid_sample()
结合使用,以构建 空间变换网络 (Spatial Transformer Networks)。- 参数
theta (Tensor) – 输入的仿射矩阵批次,其形状对于 2D 为 (),对于 3D 为 ()
size (torch.Size) – 目标输出图像尺寸。对于 2D 为 (),对于 3D 为 ) 示例: torch.Size((32, 3, 24, 24))
align_corners (bool, optional) – 如果为
True
,则将-1
和1
视为角像素的中心,而非图像的角点。更完整的描述请参考grid_sample()
。由affine_grid()
生成的网格应与此选项的相同设置一起传递给grid_sample()
。默认值:False
- 返回值
大小为 () 的输出 Tensor
- 返回值类型
output (Tensor)
警告
当
align_corners = True
时,网格位置取决于像素尺寸相对于输入图像尺寸的大小,因此对于不同分辨率(即经过上采样或下采样)的相同输入,grid_sample()
采样到的位置将不同。直到 1.2.0 版本,默认行为是align_corners = True
。自此之后,默认行为已更改为align_corners = False
,以便与interpolate()
的默认行为保持一致。警告
当
align_corners = True
时,对 1D 数据进行 2D 仿射变换以及对 2D 数据进行 3D 仿射变换(即当一个空间维度尺寸为 1 时)是未明确定义的,并非预期用例。当align_corners = False
时则没有此问题。直到 1.2.0 版本,沿尺寸为 1 的维度上的所有网格点都被任意视为位于-1
处。从 1.3.0 版本开始,在align_corners = True
的设置下,沿尺寸为 1 的维度上的所有网格点都被视为位于0
处(即输入图像的中心)。