cfzd / FcaNet

FcaNet: Frequency Channel Attention Networks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于通道分组

Asthestarsfalll opened this issue · comments

你好,我是一名深度学习初学者,我添加了两个FCA模块使原模型的mIOU提升了2.3,效果很好;
然而对于通道分组,我有一些其他的看法;
如果分组的通道中表示不同的信息,每个分组再使用不同的频率分量,这似乎会造成更多的信息丢失吧,因为DCT可以看作是一种加权和,可以从论文中看到除了GAP是对每个通道上像素的一视同仁,其他的都是对空间上某一个或几个部分注意的更多,这显然是存在偏颇的,这似乎也能解释为什么单个频率分量实验中GAP的效果最好;在这种情况下,对通道进行分组,或许会造成更多的信息损失?
我仔细思考了下,我认为FCAwork的原因主要是存在通道冗余以及DCT加权形成的一种“互补”
因为存在通道冗余,进行通道分组时可能某些分组中的信息相近,并且这些分组的权重是“互补”的,比如一个权重矩阵更注重左半边,一个更注重右半边这样。似乎模块学习这种‘稀疏’的关系效果会更好。
可以认为FAC比SE更充分的使用了冗余的通道。
考虑了两个实验来证明,
不对减小输入的通道数,将FCA与原模型或是SE进行对比,当通道减少到一定程度时,信息没有那么冗余,这时应该会有大量的信息丢失,精度相较于原模型更低;
关于频率分量的选择,选取某些“对称”“互补”的权重矩阵,而不是通过单个频率分量的性能的来选择,并且去除那些"混乱”的权重矩阵,因为单个频率分量证明这种混乱的权重并没有简单分块的效果好
另外可以在大通道数使用大的分组,在小通道数使用小的分组,来检验是否会获得更好的性能

不能完全表达我的意思,如有错误,恳请指出!

commented

@Asthestarsfalll
非常高兴看到我们的方法对你的模型有提升,也感谢你很有insight的分析。有一点我可能还是需要澄清一下:

其他的都是对空间上某一个或几个部分注意的更多,这显然是存在偏颇的

我觉得其他频率也并没有对某些部分注意更多,因为DCT的基函数都是由cos wave构成的,所以他是非常对称的一种结构。而且他是预先数学上定义好的形式,是data-independent的,所以我觉得可能没有过分关注某个部分这种情况。至于为什么GAP效果最好,我觉得可能有两个原因吧,第一个是求平均确实很好的一种提取信息的方式,也对微小变化不是很敏感(这个有可能对于抽象,提高语义理解能力是很有帮助的)。第二个是神经网络似乎就是喜欢低频一些,这个可以在CVPR2020那篇 learning in the frequency domain 找到佐证。

其他的观点我还是比较认同的,是有可能在上述方案中取得更好的效果的。

@cfzd
好的,感谢您的答复让我发现了频率在神经网络中的神奇奥秘!
另外,我将映射大小改为8,频率分量的选取改为
mapper_x = [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0]
mapper_y = [0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0]
相较于原FCA模块获得了0.3的提升,不过也可能是实验误差。