概述
最近遇到了需要将双目的左视图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.
最后
以上就是冷静绿草为你收集整理的torch.nn.function.grid_sample的介绍及使用方法torch.nn.function.grid_sample的全部内容,希望文章能够帮你解决torch.nn.function.grid_sample的介绍及使用方法torch.nn.function.grid_sample所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复