torch.nn.function.grid_sample的介绍及使用方法

最近遇到了需要将双目的左视图warping到右视图的问题。参考了monodepth v2的网络中做warping的步骤发现是用torch.nn.function.grid_sample做的。因此学习了一下这个函数。

torch.nn.function.grid_sample

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

给定一个输入和一个grid,使用输入值和来自grid对应的像素值计算输出。输入可以是4维或5维的。
常用4维的输入。
输入维度: (N, C, H in H_\text{in} Hin, W in W_\text{in} Win)
grid维度:(N, H out H_\text{out} Hout, W out W_\text{out} Wout, 2)
输出维度:(N, C, H out H_\text{out} Hout, W out W_\text{out} Wout)
对于每个输出位置[n,:,h,w],grid最后一维等于2,对应两个grid[n,h,w,0]和gird[n,h,w,1]的值分别对应输入的位置坐标x和y。也就是说在我们编程时,首先需要生成两个[n,h,w]大小的grid,将其concat起来得到[n,h,w,2]的grid。对应这个gird[…,0]应该每个坐标值都对应input中的x坐标值。对应这个gird[…,1]应该每个坐标值都对应input中的y坐标值。
如果要做左视图在disparity的y方向做warping到右视图的操作,那么应该将disparity(维度为[n,h,w,1])加到gird[…,1]中。同理,如果要做左视图在disparity的x方向做warping到右视图的操作,那么应该将disparity(维度为[n,h,w,1])加到gird[…,0]中。

grid通常是[-1,1]的范围,因此需要将grid范围做规范化。超出范围的值将会以padding_mode的方式处理掉。
padding_mode=“zeros”: use 0 for out-of-bound grid locations,

padding_mode=“border”: use border values for out-of-bound grid locations,

padding_mode=“reflection”: use values at locations reflected by the border for out-of-bound grid locations. For location far away from the border, it will keep being reflected until becoming in bound, e.g., (normalized) pixel location x = -3.5 reflects by border -1 and becomes x’ = 1.5, then reflects by border 1 and becomes x’’ = -0.5.

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值