我是靠谱客的博主 饱满黑猫,最近开发中收集的这篇文章主要介绍FcaNet:频率通道注意力网络论文解读1、介绍2、方法3. 实验总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

点击上方“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

请长按或扫描二维码关注本公众号

喜欢的话,请给我个在看吧

最后

以上就是饱满黑猫为你收集整理的FcaNet:频率通道注意力网络论文解读1、介绍2、方法3. 实验总结的全部内容,希望文章能够帮你解决FcaNet:频率通道注意力网络论文解读1、介绍2、方法3. 实验总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部