Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

c2wh = dict([(64,56), ( 128,28), (256,14) ,(512,7)]) 是否需要改动问题 #21

Open
Lewis0427 opened this issue Sep 29, 2021 · 8 comments

Comments

@Lewis0427
Copy link

我的输入尺寸是(64,48,48)若使用原始c2wh = dict([(64,56), ( 128,28), (256,14) ,(512,7)]) ,再用adaptive_avg_pool2d() 由48变为56(小尺寸变大尺寸),会不会损害性能呢,应该怎么处理较好呢?麻烦赐教

@cfzd
Copy link
Owner

cfzd commented Sep 30, 2021

@Lewis0427
根据我们的经验,分辨率不会影响结果,因为对于不同大小的分辨率,我们提取频率的时候总会在一个固定的7x7频谱上进行提取,相关的代码可以参看这个地方:

FcaNet/model/layer.py

Lines 38 to 39 in aa5fb63

mapper_x = [temp_x * (dct_h // 7) for temp_x in mapper_x]
mapper_y = [temp_y * (dct_w // 7) for temp_y in mapper_y]

上述代码的想法很简单,假设输入为n x n,那么其总共有n x n个频谱。但其实在一张14x14的特征图上的(2,2)频率分量他的绝对频率是和一张7x7的特征图上的(1,1)分量是一致的。因此我们为了保证不同stage(也即不同分辨率)的频率都是一致的,我们做了这样的归一化,这就导致分辨率不会影响结果。即使在COCO这种本身图像大小不一的数据集上也能work。

我们设置这个c2wh主要还是为了在固定分辨率和网络结构的情况下(一般是分类网络),提前确定好大小并预先生成对应频谱的DCT 权重,而不用每次都resize,这样应该会快一点。

@cfzd
Copy link
Owner

cfzd commented Sep 30, 2021

@Lewis0427
如果你的尺寸可以确定的话,那你完全可以按照你的尺寸去修改c2wh, 这样还可以省去adaptive_avg_pool2d

@Lewis0427
Copy link
Author

@Lewis0427 如果你的尺寸可以确定的话,那你完全可以按照你的尺寸去修改c2wh, 这样还可以省去adaptive_avg_pool2d

我不是7的倍数的尺寸写到c2wh中,不会影响吗?还请赐教

@cfzd
Copy link
Owner

cfzd commented Oct 2, 2021

@Lewis0427
不会影响,这个其实和分辨率大小没什么关系。

@Lewis0427
Copy link
Author

万分感谢您!

@CaptainPrice12
Copy link

你好,感谢你的分享!其实我关于c2wh setting那里有一些疑问。我看大多数类似的提问是关于如果feature size不是正好7X7这样的话c2wh该怎么设置。我看你的回复是adaptive_avg_pool2d那里做resize应该不会影响性能。不过那些问题都是基于feature map的H和W相等的情况。如果我的feature size的W和H不相等,比如input size是200X80这个大小的,如果最后的feature map size是25X8这样的话,DCT那里继续做adaptive_avg_pool2d的resize是否会影响最后的结果呢?顺便问下对于input size是变化的的情况(不同batch的input size不同),FCA的resize这个效果如何呢?谢谢!

@cfzd
Copy link
Owner

cfzd commented Jan 13, 2022

@CaptainPrice12
即使宽和高不一样,也是一样的,我们在COCO上的实验不仅宽高不一样,输入分辨率还会变化,这样我们的方法依然能够很好的工作。

@CaptainPrice12
Copy link

@cfzd 感谢你的回复!其实对channel分组我还有个疑问。如果不对channel做split成n组,而是每个DCT filter都对所有的channel做一次运算的话,就像issue#14讨论过的https://github.com/cfzd/FcaNet/issues/14, 这么做的话运算量确实会大一些,效果会怎么样呢?如果不同的DCT filter对每个channel都做运算的话,是不是最终应该对每个channel上不同DCT filter(e.g., top16)的运算结果再求一次平均从而得到最后这个channel的结果呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants