cfzd
cfzd
Is there any trained model that can be used for test ?
@eoyuana 是一样的,对于top2,我们会先把channel的前半部分计算第一个频率,后半部分计算第二个频率,拼起来还是一个长度为C的向量。
https://github.com/cfzd/FcaNet/blob/aa5fb63505575bb4e4e094613565379c3f6ada33/model/layer.py#L65-L117
@Lewis0427 我们目前的实验结果表明不需要更换,我们在COCO数据集(图像大小会变化)的网络也是一样使用7x7下的频率分量。可以参考一下这部分代码: https://github.com/cfzd/FcaNet/blob/aa5fb63505575bb4e4e094613565379c3f6ada33/model/layer.py#L53-L59
@Lewis0427 如果你不是做实验探究这几个的区别的话,应该始终选择fixed DCT init.
@wangjunhua-y 实际上这个是通过切分dct_filter实现的,可以看一下这部分代码: https://github.com/cfzd/FcaNet/blob/aa5fb63505575bb4e4e094613565379c3f6ada33/model/layer.py#L110 https://github.com/cfzd/FcaNet/blob/aa5fb63505575bb4e4e094613565379c3f6ada33/model/layer.py#L115
@WYHZQ 抱歉,这个已经没有了。不过训出这个模型的setting很简单,就是标准setting加上label smoothing和cos linearning rate decay。 你也可以很简单的用我们现成的代码训出来,只需要在训练命令上把模型替换掉就行了,把`-a fcanet50`换成`-a resnet50`即可。 ``` python -m torch.distributed.launch --nproc_per_node=$NGPUS main.py -a resnet50 --dali_cpu --b 128 --loss-scale 128.0 --opt-level O2 /path/to/your/ImageNet ```
https://github.com/cfzd/FcaNet/blob/aa5fb63505575bb4e4e094613565379c3f6ada33/model/layer.py#L65-L117
@dreamhua82 我不是很明白你的问题,能更详细一点吗?
@Lewis0427 根据我们的经验,分辨率不会影响结果,因为对于不同大小的分辨率,我们提取频率的时候总会在一个固定的7x7频谱上进行提取,相关的代码可以参看这个地方: https://github.com/cfzd/FcaNet/blob/aa5fb63505575bb4e4e094613565379c3f6ada33/model/layer.py#L38-L39 上述代码的想法很简单,假设输入为`n x n`,那么其总共有`n x n`个频谱。但其实在一张`14x14`的特征图上的`(2,2)`频率分量他的绝对频率是和一张`7x7`的特征图上的`(1,1)`分量是一致的。因此我们为了保证不同stage(也即不同分辨率)的频率都是一致的,我们做了这样的归一化,这就导致分辨率不会影响结果。即使在COCO这种本身图像大小不一的数据集上也能work。 我们设置这个c2wh主要还是为了在固定分辨率和网络结构的情况下(一般是分类网络),提前确定好大小并预先生成对应频谱的DCT 权重,而不用每次都resize,这样应该会快一点。