[一起学习pytorch吧]之grid_sample函数

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

给定input和流场grid,利用input值和grid中的像素位置计算output。

在空间(4-D)的例子中,当input为(N,C,H_{in},W_{in}),grid为(N,H_{out},W_{out},2)时,output为(N,C,H_{out},W_{out})

对于每个output位置output\left [ n, :,h,w \right ],向量grid\left [ n,h,w \right ] 确定了input的像素位置x和y,这用于对output值output\left [ n, :,h,w \right ]进行插值。在5D输入的情况中,grid\left [ n,d,h,w \right ] 确定了用于插值输出output\left [ n, :,d,h,w \right ]的x,y,z像素位置。mode参数用于确定使用的是最近邻插值还是双线性插值来采样输入像素。

grid指定由input空间维度归一化的采样像素位置。因此,它的大部分值应该在\left [ -1,1 \right ]的范围内。举个例子,x=-1,y=-1是input的左上角像素,x=1,y=1是input的右下角像素。

如果grid有值超过上述范围,相关的输出由padding_mode来定义。选项如下:

  • padding_mode="zeros":超过边界的网格位置记为0,
  • padding_mode="dorder":超过边界的网格位置记为边界值,
  • padding_mode="reflection":超过边界的网格位置记为边界的反映。对于距离边界很远的位置,它将会保持被反映,直到进入边界,比如,(归一化)像素位置x=-3.5由边界-1反映,然后变为x^{'}=1.5,然后由边界1来反映,并变为x^{'}=-0.5。(这里是-0.5吗?为什么我觉得是0.5)

注:该函数常常配合affine_grid()函数使用,从而构建Spatial Transformer Networks。

参数:

  • input(Tensot)—形状为(N,C,H_{in},W_{in})(4D情况)或(N,C,D_{in},H_{in},W_{in})(5D情况)的输入
  • grid(Tensor)—形状为(N,H_{out},W_{out},2)(4D情况)或(N,D_{out},H_{out},W_{out},3)(5D情况)的流场
  • mode(str)—用于计算输出值的插值模式:‘bilinear’或‘nearest’。默认值为‘bilinear’
  • padding_mode(str)—外围网格值的填充模式:‘zeros’或‘border’或‘reflection’。默认值为‘zeros’
  • align_corners(bool,可选的参数)—在几何上,我们将输入的像素考虑为正方形而不是点。如果设为True,极值(-1和1)为输入角点像素的中心点。如果设为False,则为输入角点像素的角点,从而使采样更不确定分辨率。此选项与intrpolate()中的align_corners选项平行,因此在网格采样之前,此处使用的选项也应该被用于重设输入图像的大小。默认值:False。

返回值: output Tesnor

返回值类型:output(Tensor)

你可能感兴趣的:(一起学习pytorch)