F3Net
F3Net copied to clipboard
请问如果图像的宽和高不一样,这样如何做DCT和IDCT呢?
DCT不要求图像必须是方阵,可以理解为对行和列依次做1D-DCT,行列顺序是无关的。
您好,是这样的,就是如果宽和高不一样的话,那么初始化的self._DCT_all和 self._DCT_all_T的宽和高也不一样,这一句就会报错:x_freq = self._DCT_all @ x @ self._DCT_all_T。以及后面的IDCT也会报错,这问这个如何处理呢
这个是我代码里没有考虑HW不一致的情况,在models里面有一个DCT_mat函数用来生成变换矩阵,可以重写一下这个函数。
DCT_mat我已经重新写好了,得到的初始化宽和高不一样,请问x_freq = self._DCT_all @ x @ self._DCT_all_T这一句,和下面的y = self._DCT_all_T @ x_pass @ self._DCT_all应该如何修改呢?比如我输入的是256*128: x_freq = self._DCT_all @ x @ self._DCT_all_T ——>(256, 128)@(256, 128)@(128, 256),我代码能力比较弱
我不清楚你是如何修改的DCT_mat函数,我觉得如果写成矩阵形式应该是 (256, 256) @ (256, 128) @ (128, 128), 我没有仔细推过公式不一定对,你也可以按照最终的循环展开式来实现。
好的,多谢啦,我试试看
该邮件从移动设备发送
--------------原始邮件-------------- 发件人:"Yike Yuan @.>; 发送时间:2022年5月18日(星期三) 晚上7:32 收件人:"yyk-wew/F3Net" @.>; 抄送:"张玉康 @.>;"Author @.>; 主题:Re: [yyk-wew/F3Net] 请问如果图像的宽和高不一样,这样如何做DCT和IDCT呢? (Issue #21)
我不清楚你是如何修改的DCT_mat函数,我觉得如果写成矩阵形式应该是 (256, 256) @ (256, 128) @ (128, 128), 我没有仔细推过公式不一定对,你也可以按照最终的循环展开式来实现。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
您好,请问一下DCT和IDCT能否初始化为不同的矩阵呢?比如: self._DCT = nn.Parameter(torch.tensor(DCT_mat(size1)).float(), requires_grad=False) self._DCT_T = nn.Parameter(torch.transpose(torch.tensor(DCT_mat(size2)).float(), 0, 1), requires_grad=False)
self._IDCT = nn.Parameter(torch.tensor(DCT_mat(size2)).float(), requires_grad=False)
self._IDCT_T = nn.Parameter(torch.transpose(torch.tensor(DCT_mat(size1)).float(), 0, 1), requires_grad=False)
因为矩阵宽高不一样,这样初始化的话就可以继续操作了,只是不知道原理上能否讲得通呢?
好像是行不通哈哈哈哈