pytorch中的grid_sample和affine_grid
pytorch中提供了对Tensor进⾏Crop的⽅法,可以使⽤GPU实现。具体函数
是_grid和_sample。前者⽤于⽣成⼆维⽹格,后者对输⼊Tensor按照⽹格进⾏双线性采样。
grid_sample函数中将图像坐标归⼀化到[−1,1],其中0对应-1,width-1对应1。
affine_grid的输⼊是仿射矩阵(Nx2x3)和输出Tensor的尺⼨((NxHxWx2)),输出的是归⼀化的⼆维⽹格。
下⾯进⾏简单的实验:
1.⾸先⽣成⼀个1x1x5x5的Tensor变量
2.裁剪窗⼝为x1=2.5,x2=4.5,y1=0.5,y2=3.5,size为1x1x3x2,根据坐标设置theta矩阵
3.进⾏裁剪,并与numpy计算结果相⽐较。
a=((1,1,5,5))
print(a)
#x1=2.5,x2=4.5,y1=0.5,y2=3.5
#out_w=2,out_h=3
size=((1,1,3,2))
print(size)
#theta
theta_np=([[0.5,0,0.75],[0,0.75,0]]).reshape(1,2,3)
theta=_numpy(theta_np)
print('theta:')
print(theta)
print()
flowfield=_grid(theta,size)
sampled_a=_sample(a,(32))
sampled_a=sampled_().squeeze()
print('sampled_a:')
print(sampled_a)
#computebilinearat(0.5,2.5),using(0,3),(0,4),(1,3),(1,4)
#quicklycompute(/lxlclzy1130/article/details/50922867)
print()
coeff=([[0.5,0.5]])
A=a[0,0,0:2,2:2+2]
print('torchsampledat(0.5,3.5):%.4f'%sampled_a[0,0])
print('numpycompute:%.4f'%((coeff,A),coeff.T).squeeze())
运⾏结果为:
可以看到结果是相同的
Processingmath:100%
本文发布于:2022-11-27 11:51:54,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/30832.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |