我想估计给定大小的BxCxWxH
图像的傅里叶变换。
在以前的火炬版本中,下列人员完成了这项工作:
fft_im = torch.rfft(img, signal_ndim=2, onesided=False)
输出的大小是:
BxCxWxHx2
然而,对于新版本的rfft:
fft_im = torch.fft.rfft2(img, dim=2, norm=None)
我没有得到同样的结果。我错过了什么吗?
发布于 2022-03-17 16:45:13
几个问题
dim
参数是无效类型,它应该是两个数字的元组,或者应该省略。实际上,PyTorch应该引发一个例外。我认为,这一运行毫无例外是PyTorch中的一个bug (我打开了一张声明同样多的票证),complex
tensor types,所以FFT函数返回这些,而不是为实/虚部分添加一个新的维度。可以使用torch.view_as_real
将其转换为旧的表示形式。同样值得指出的是,view_as_real
不复制数据,因为它返回视图,因此不应该以任何明显的方式减慢速度。torch.fft.fft2
相同,这与PEP 20的第13条格言相冲突。提供一个特殊实值版本的FFT的全部意义是,您只需要计算每个维度的一半值,因为其余的值可以通过赫敏对称属性来推断。所以从你应该能够使用的
fft_im = torch.view_as_real(torch.fft.fft2(img))
如果要将重要传递给torch.fft
中的其他函数(如fft.ifft
或fft.fftshift
),则需要使用torch.view_as_complex
将其转换回复杂表示形式,这样这些函数就不会将最后一个维度解释为信号维度。
https://stackoverflow.com/questions/71515439
复制相似问题