点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”
导读
改一行代码就能涨点,这么好的事情,还不赶紧来看看,用不同的频率分量来做注意力,确实有效果!
论文:https://arxiv.org/abs/2012.11879
1、介绍
注意力机制有很多种方法,空间注意力,通道注意力,自注意力等,这里我们讨论的是通道注意力。通道注意力非常简单,直接学习出对应的每个通道的权值就可以,所以非常的好用。一般来说,在计算通道注意力的时候,每个通道的会需要有个标量值来计算后面的注意力权重,这个标量的计算函数一般都是使用Global Average Pooling。但是,GAP并不是那么的完美,简单的去均值的方法会丢弃很多的信息,无法充分的获取每个通道的多样性的信息。那么,除了使用全局的平均值来计算通道注意力之外,还有其他的方法吗?后面会详细说明。
文章的主要贡献如下:
我们证明了GAP是一种特殊形式的DCT(离散余弦变换),基于这个证明,我们将通道注意力泛化到频域,并提出了FcaNet,使用多个频率的通道注意力网络。
我们提出了一个2阶段的损失函数,用来选择不同的频率分量,不同的频率数量,以及不同的频率组合。
我们在COCO和ImageNet上都到了SOTA,并超越之前的通道注意力的方法。
我们的方法非常的简单,只需要改一行代码就可以替换之前的通道注意力方法。
2、方法
在这部分,我们来看下,GAP是如何和DCT联系到一起的,以及FcaNet是如何设计的。
2.1 通道注意力和离散余弦变换
通道注意力
假设X是输入的特征图,通道注意力机制可以写成:
这里,att是注意力向量,得到了这个注意力向量之后,每个通道就可以通过这个注意力向量的对应元素进行缩放,得到通道注意力机制的输出:
离散余弦变换
DCT定义为:
这里,f是DCT的频谱,x是输入,L是x的长度,2维的DCT可以写成:
2D的DCT的反变换可以写成:
在式子(4)和(5)中,为了简单起见,所以去掉了一些归一化的常量。
通过通道注意力和DCT的定义,我们可以总结出两点:1、现有的方法在做通道注意力的时候,使用GAP作为预处理。2、DCT可以看成是输入的加权和,权值就是(3)和(4)的余弦部分。
GAP是一个取均值的操作,可以看成是输入的最简单的频谱,也就是频率为0的分量。但是,在通道注意力中只使用单独的GAP信息并不是很好,既然单独的频谱不好,那么可以考虑多用几个频率分量,这就引入了多频谱的通道注意力机制。
2.2 多频谱通道注意力
通道注意力的理论分析
上面我们分析过了,DCT可以看成是输入的加权和,我们会进一步提出,GAP实际上就是DCT的一种特殊形式。
定理1 GAP是2D DCT的一种特殊形式,它和2D DCT中的最低的频率分量是成比例的。
证明:假设在(4)式中,h和w为0,我们有:
在(6)式中,
表示2D DCT中的最低的频率分量,和GAP就差了一个比例常数。因此,定理1证明完毕。
既然我们已经证明了GAP是DCT的一种特殊形式,我们当然也可以引入其他的频率分量到通道注意力中,我们可以讨论一下我们这样做的原因。
简单起见,我们用B来表示2D DCT的基础形式:
我们可以把式(5)重写一下:
可以看到,这个特征图X可以表示为不同的频率分量的组合,其实就是信号处理中的频率分解,根据(1)式:
通道注意力仅仅是基于GAP,但是,输入的特征图X并不仅仅只有GAP一个频率分量,还有很多其他的频率分量:
所以说,在用GAP做通道注意力的时候,很多的信息其实被丢掉了。
多频谱注意力模块
为了利用到输入特征图X的更多的信息,我们可以使用多个频率分量,包括GAP。首先,我们把输入特征图X,按照通道分为多个组, ,原来的通道数为C,分完之后,每个组的通道数为C',其中 ,而且,C应该是n的倍数,对于每个组,分配一个特定的2D DCT的频率分量,这个特定的频率分量需要事先选择好。于是,可以将2D DCT作为通道注意力的预处理,这里,我们有:
这里的[u,v]是频率分量的2D索引,
是C‘维的向量。整体的预处理向量就是把所有的拼接起来:
这里Freq就是得到的多频谱向量,然后这个多频谱的通道注意力可以写成:
可以看到,对于不同的组,可能使用不同的[u,v]组合,也就是说,每个组使用不同的频率分量。这样,就将GAP的单个频谱扩展到了多个频谱。
下图是和SENet的对比:
选择频率分量的规则
现在有个问题是如何去选择频率分量,也就是每个 中的[u,v]如何选取。对于每个通道,空间分辨率为HW,在做2DDCT之后,可以得到HW个频率分量,这样的话,C个通道的频率分量的组合数量有CHW个。比如,对于ResNet50,C为2048,测试所有的组合不现实的,计算量非常大,因此,我们提出了一个2步走的启发式的方案来选择频率分量。
主要的思想是先确定每个频率分量的重要性,然后确定一起使用不同数量的频率分量的有效性。首先,我们检查单个频率分量在通道注意力中的有效性,然后,我们选择topk个效果最好的频率分量,这样,得到多频谱的频率分量。
2.3 讨论
多频谱框架如何嵌入更多的信息
从上面的式子可以看到,GAP实际上是丢掉了很多其他的频率分量的信息,只留下了最低频率的信息。多频谱很显然可以使用更多的频率信息。
我们知道,卷积神经网络的通道是有冗余的,也就是说,不同的通道的信息可能是相似的。那么,使用GAP的时候,得到的信息也是相似的,而使用多频谱的话,可以对于不同的通道提取不同的频谱特征。使得可以得到更加丰富的信息。
复杂性分析
从参数数量上来说,我们的方法并没有引入任何的参数。从计算量上来说,我们的额外的计算开销是非常小的,计算量几乎是和SENet一样。
只需要改一行代码
实现时候,只需要在原始的SENet的代码上修改一行代码:
3. 实验
单独频率分量的效果,在ImageNet上的准确率:
使用不同数量的频率分量的效果:
和其他的方法的比较:
将FcaNet作为物体检测的主干的时候,在MS COCO上的结果:
在MS COCO的实例分割时的效果:
在附录的地方,还做了关于频率组合策略的一些实验,除了文中提到了选择topk个效果最好的频率之外,还尝试了效果最差的k个,还有频率最低的k个。Low-k表示频率最低的k个,Bot-k表示效果最差的k个。
总结
模型效果很好,改动也很简单,涨点很明显。只是不清楚这个最佳的频率分量的组合的泛化性能怎么样,能不能用到其他的数据集上。不过,从作者给出的结果看,选出来的其实主要还是低频的分量,而且从low-k的效果来看,也是挺好的,那么,其实只要按照low-k的方法选取分量,应该也都是有效果的,期待有人在更多数据集上做下类似的实验。
—END—
论文链接:https://arxiv.org/abs/2012.11879
请长按或扫描二维码关注本公众号
喜欢的话,请给我个在看吧!
转载:https://blog.csdn.net/u011984148/article/details/112793219