

通道注意力新突破!从频域角度出发,浙大提出 FcaNet:仅需修改一行代码,简洁又高效
source link: https://bbs.cvmart.net/articles/3983
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

该文是浙江大学提出一种的新颖的通道注意力机制,它将通道注意力机制与DCT进行了桥面的结合,并在常规的通道注意力机制上进行了扩展得到了本文所提出的多谱通道注意力机制:FcaLayer。作者在图像分类、目标检测以及实例分割等任务上验证了所提方案的有效性:在ImageNet分类任务上,相比SENet50,所提方法可以取得1.8%的性能提升。
Abstract
注意力机制(尤其是通道注意力)在CV领域取得了极大的成功,然这些工作往往聚焦于如何设计有效的通道注意力机制
同时采用GAP(全局均值池化)作为预处理方法。本文从另一个角度出发:从频域角度分析通道注意力机制。基于频域分析,作者得出:GAP是频域特征分解的一种特例
。
基于前述分析,作者对通道注意力机制的预处理部分进行了扩展并提出了带多谱通道注意力的FcaNet,所提方法具有简单&有效性。在现有通道注意力机制的实现基础上,仅需更改一行code即可实现所提的注意力机制。
更进一步,在图像分类、目标检测以及实例分割任务上,相比其他注意力机制,所提方法取得了更好的性能。比如在ImageNet数据集上,所提方法比SE-ResNet50的Top1指标高1.8%,且两者具有相同的参数量与计算量。
上图给出了所提方法与ResNet、SE-ResNet在ImageNet数据集上的指标对比。本文的主要贡献包含以下几点:
- 证实GAP是DCT的一种特例,基于该分析对通道注意力机制在频域进行了扩展并提出了带多谱通道注意力的FcaNet;
- 通过探索不同数量频域成分的有效性提出了一种“two-step”准则选择频域成分;
- 通过实验证实了所提方法的有效性,在ImageNet与COCO数据集上均取得了优于SENet的性能;
- 所提方法简介有效,仅需在现有通道注意力机制的基础上修改一行code即可实现。
Method
接下来,我们将重新研究一下通道注意力的架构以及DCT频域分析;基于前述分析推导多谱通道注意力网络;与此同时,提出一种“two-step”准则选择频域成分;最后给出了关于有效性、复杂度的讨论与code实现。
Revisiting Channels Attention and DCT
我们先来看一下通道注意力与DCT的定义,然后在总结对比一下两者的属性。
Channel Attention
通道注意力机制已被广泛应用到CNN网络架构中,它采用一个可学习的网络预测每个通道的重要。其定义如下:
att=sigmoid(fc(gap(X)))att=sigmoid(fc(gap(X)))
$$
\tilde{X}_{:,i,:,:} = atti X{:,i,:,:}, s.t. i\in {0,1,\cdots, C-1}
$$
Discrete Cosine Transform
DCT的定义如下:
$$
fk = \sum{i=0}^{L-1} xi cos(\frac{\pi k}{L}(i + 0.5)), s.t. k \in {0,1,\cdots, L-1}
其中$f∈RL$表示DCT的频谱。2D−DCT的定义如下:其中$f∈RL$表示DCT的频谱。2D−DCT的定义如下:
f^{2d}{h,w} = \sum{i=0}^{H-1} \sum{j=0}^{W-1} x{i,j}^{2d}cos(\frac{\pi h}{H}(i + 0.5))cos(\frac{\pi w}{W}(j + 0.5))
s.t. h\in {0,1,\cdots, H-1}, w \in {0,1,\cdots, W-1}
$$
其中,$f^{2d}{h,w} $表示2D-DCT频谱。对应的2D-IDCT的定义如下:
$$
x{i,j}^{2d} = \sum{h=0}^{H-1} \sum{w=0}^{W-1} f^{2d}{h,w} cos(\frac{\pi h}{H}(i + 0.5))cos(\frac{\pi w}{W}(j + 0.5))
s.t. i\in {0,1,\cdots, H-1}, j \in {0,1,\cdots, W-1}
$$
注:在上述两个公式中常数项被移除掉了。
基于上述通道注意力与DCT的定义,我们可以总结得到以下两点关键属性:(1) 现有的通道注意力方案采用GAP作为预处理;(2) DCT可以视作输入与其cosine部分的加权。GAP可以视作输入的最低频信息,而在通道注意力中仅仅采用GAP是不够充分的。基于此,作者引入了本文的多谱通道注意力方案。
Multi-Spectral Channel Attention
在证实引出多谱通道注意力之前,作者首先给出了一个定理,如下所示。其中f2d0,0f0,02d表示D2-DCT的最低频成分。
上述定理意味着:通道注意力机制中可以引入其他频域成分。与此同时,作者也解释了为什么有必要引入其他频率成分。
为简单起见,我们采用B表示2D-DCT的基函数:
Bi,jh,w=cos(πhH(i+0.5))cos(πwW(j+0.5))Bh,wi,j=cos(πhH(i+0.5))cos(πwW(j+0.5))
那么,2D-DCT可以重写成如下形式:
自然地,我们可以看到:图像/特征可以表示为不同频率成分的线性组合。再来看通道注意力的公式:att=sigmoid(fc(gap(X)))att=sigmoid(fc(gap(X))),即通道注意力仅仅依赖于GAP结果。而X的信息却不仅仅由GAP构成:
$$
X = gap(X)HW B{0,0}^{i,j} + f{0,1}^{2d}B{0,1}^{i,j} + \cdots + f{H, W}^{2d} B_{H, W}^{i,j}
$$
从上述公式可以看到:仅有一小部分信息在通道注意力中得以应用,而其他频域成分则被忽略了。
Multi-Spectral Attention Module
基于上述分析,作者很自然的将GAP扩展为2D-DCT的更多频率成分的组合,即引入更多的信息解决通道注意力中的信息不充分问题。
首先,输入X沿通道维划分为多个部分[X0,X1,⋯,Xn−1][X0,X1,⋯,Xn−1];对于每个部分,计算其2D-DCT频率成分并作为通道注意力的预处理结果。此时有:
$$
Freq^i = 2DDCT^{u,v}(X^i) = \sum{h=0}^{H-1} \sum{w=0}^{W-1} X{:.h,w}^{i} B{h,w}^{u,v}
s.t. i\in {0,1,\cdots, n-1}
$$
将上述频域成分通过concat进行组合,
Freq=cat([Freq0,Freq1,⋯,Freqn−1])Freq=cat([Freq0,Freq1,⋯,Freqn−1])
真个多谱通道注意力机制与描述如下:
msatt=sigmoid(fc(Freq))msatt=sigmoid(fc(Freq))
下图给出了通道注意力与多谱通道注意力之间的网络架构对比示意图。
Criterion for choosing frequence components
从前述定义可以看到:2D-DCT有多个频率成分,那么如何选择合适的频率成分呢?作者提出一种“two-step”准则选择多谱注意力中的频率成分。
选择的主旨在于:首先确定每个频率成分的重要性,然后确定不同数量频率成分的影响性。首先,独立的确认每个通道的不同频率成分的结果,然后选择Top-k高性能频率成分。
最后,作者提供了本文所提多谱通道注意力的实现code,如下所示。可以看到:仅需在forward部分修改一行code即可。
Experiments
ImageNet
作者选用了四个广泛采用的CNN作为骨干网络,即ResNet34,ResNet50,ResNet101,ResNet152。采用了类似ResNet的数据增强与超参配置:输入分辨率为224×224224×224,SGD优化器,Batch=128,合计荀兰100epoch,cosine学习率。注:采用Apex混合精度训练工具。
COCO
作者选用了Faster RNN与Mask RCNN作为基准,并采用了MMDetection工具进行实现。SGD优化器,每个GPU的batch=2。训练12个epoch,学习率为0.01,在第8和11epoch时学习率衰减。
作者首先给出了不同频率成分下的通道注意力的性能对比,见下图。可以看到:(1) 多谱注意力以较大优势超越仅采用GAP的通道注意力;(2) 包含16个频率成分的注意力取得最佳性能。
下表给出了所提方法在ImageNet数据集上与其他方法的性能对比。可以看到:所提方案FcaNet取得了最佳的性能。在相同参数&计算量下,所提方法以较大优化超过SENet,分别高出1.20%、1.81%、2.02%、1.65%;与此同时,FcaNet取得了超过GSoPNet的性能,而GSopNet的计算量比FcaNet更高。
下图给出了COCO目标检测任务上的性能对比,可以看到:所提方法取得了更佳的性能。FcaNet以较大的性鞥呢优势超过了SENet;相比ECANet,FcaNet仍能以0.9-1.3%指标胜出。
下图给出了COCO实例分割任务上的性能对比,可以看到:所提方法以较大优势胜出。比如,FcaNet以0.5%AMP指标优于GCNet。
全文到此结束,更多消融实验分析建议查看原文。最后附上多谱通道注意力code。注:get_dct_weights仅用于初始化dct权值,而不会参与训练和测试。很明显,这里的多谱通道注意力是一种与特征宽高相关的通道注意力机制,这有可能导致其在尺寸可变任务(比如图像复原中的训练数据-测试数据的尺寸不一致)上的不适用性。
import math
import torch
import torch.nn as nn
def get_ld_dct(i, freq, L):
result = math.cos(math.pi * freq * (i + 0.5) / L)
if freq == 0:
return result
else:
return result * math.sqrt(2)
def get_dct_weights(width, height, channel, fidx_u, fidx_v):
dct_weights = torch.zeros(1, channel, width, height)
# split channel for multi-spectral attention
c_part = channel // len(fidx_u)
for i, (u_x, v_y) in enumerate(zip(fidx_u, fidx_v)):
for t_x in range(width):
for t_y in range(height):
val = get_ld_dct(t_x, u_x, width) * get_ld_dct(t_y, v_y, height)
dct_weights[:, i * c_part: (i+1) * c_part, t_x, t_y] = val
return dct_weights
class FcaLayer(nn.Module):
def __init__(self, channels, reduction=16):
super(FcaLayer, self).__init__()
self.register_buffer("precomputed_dct_weights", get_dct_weights(...))
self.fc = nn.Sequential(
nn.Linear(channels, channels//reduction, bias=False),
nn.ReLU(inplace=True),
nn.Linear(channels//reduction, channels, bias=False),
nn.Sigmoid()
)
def forward(self, x):
n,c,_,_ = x.size()
y = torch.sum(x * self.pre_computed_dct_weights, dim=[2,3])
y = self.fc(y).view(n,c,1,1)
return x * y.expand_as(x)
◎作者档案
Happy,一个爱“胡思乱想”的AI行者
欢迎大家联系极市小编(微信ID:fengcall19)加入极市原创作者行列
微信公众号: 极市平台(ID: extrememart )
每天推送最新CV干货
Recommend
-
52
我们在思考一个问题的时候,不能只是停留在表象,本文作者通过实践证明,一个问题如果要研究透彻,必须不断地思考、试错、反馈与迭代。那我们要如何像产品经理一样思考呢? 永远不要停留在表象,你以为自己提出的需求就是最后的结果么? 这段时间的产品实践让我越...
-
25
雷锋网 AI 科技评论按:近几天,一篇改进卷积网络的论文引发了不小的关注和讨论。简单来说,这篇论文对传统的卷积操作做了简单的通用改进,就同时获得了更低的计算能力消耗和更高的准确率。知名机器学习研究员、「GANs 之父」Ian Goodfell...
-
50
上海 - @nightSlient - 不考虑落户的难易程度,从孩子高考的角度出发,上海,北京,深圳,广州,西安,那里高考容易些?请广大 V 友给与分析一下!谢谢
-
8
将位置信息嵌入通道注意力!NUS 提出新机制,显著提升卷积特征表达|CVPR2021 4周前...
-
8
脑机接口应用新突破!浙大团队研发脑“反导系统”抑制癫痫 来源:新华网2021-04...
-
11
文章主题是“单线程模型下如何保证 UI 的流畅性”。该话题针对的是 Flutter 性能原理展开的,但是 dart 语言就是 js 的延伸,很多概念和机制都是一样的。具体不细聊。此外 js 也是单线程模型,在界面展示和 IO 等方面和 dart 类似。所以结合对比讲...
-
11
【OpenCV3】直方图、频域 2020年06月06日 Author:Guofei 文章归类: 0x25_CV 文章编号: 1012
-
6
...
-
10
频域是和时域相对的一个概念,是描述信号在频率方面特性时用到的一种坐标系,在电子学,控制系统工程和统计学中,频域图显示了在一个频率范围内每个给定频带内的信号量,频域表示还可以包括每个正弦曲线的相移的信息,以便能够重新组合频率分量以恢复原始时间信号。接下来...
-
5
Python图像处理:频域滤波降噪和图像增强 作者:Muhammad Ahmed 2023-03-09 15:25:49 图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK