该文是浙江大学提出一种的新颖的通道注意力机制,它将通道注意力机制与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))) att=sigmoid(fc(gap(X)))
X~:,i,:,:=attiX:,i,:,:,s.t.i∈{0,1,⋯,C−1}\tilde{X}_{:,i,:,:} = att_i X_{:,i,:,:}, s.t. i\in \{0,1,\cdots, C-1\}X~:,i,:,:​=atti​X:,i,:,:​,s.t.i∈{0,1,⋯,C−1}

Discrete Cosine Transform

DCT的定义如下:
fk=∑i=0L−1xicos(πkL(i+0.5)),s.t.k∈{0,1,⋯,L−1}f_k = \sum_{i=0}^{L-1} x_i cos(\frac{\pi k}{L}(i + 0.5)), s.t. k \in \{0,1,\cdots, L-1\} fk​=i=0∑L−1​xi​cos(Lπk​(i+0.5)),s.t.k∈{0,1,⋯,L−1}
其中f∈RLf\in R^Lf∈RL表示DCT的频谱。2D-DCT的定义如下:
fh,w2d=∑i=0H−1∑j=0W−1xi,j2dcos(πhH(i+0.5))cos(πwW(j+0.5))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)) fh,w2d​=i=0∑H−1​j=0∑W−1​xi,j2d​cos(Hπh​(i+0.5))cos(Wπw​(j+0.5))
s.t.h∈{0,1,⋯,H−1},w∈{0,1,⋯,W−1}s.t. h\in \{0,1,\cdots, H-1\}, w \in \{0,1,\cdots, W-1\} s.t.h∈{0,1,⋯,H−1},w∈{0,1,⋯,W−1}
其中,fh,w2df^{2d}_{h,w}fh,w2d​表示2D-DCT频谱。对应的2D-IDCT的定义如下:

xi,j2d=∑h=0H−1∑w=0W−1fh,w2dcos(πhH(i+0.5))cos(πwW(j+0.5))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)) xi,j2d​=h=0∑H−1​w=0∑W−1​fh,w2d​cos(Hπh​(i+0.5))cos(Wπw​(j+0.5))
s.t.i∈{0,1,⋯,H−1},j∈{0,1,⋯,W−1}s.t. i\in \{0,1,\cdots, H-1\}, j \in \{0,1,\cdots, W-1\} s.t.i∈{0,1,⋯,H−1},j∈{0,1,⋯,W−1}

注:在上述两个公式中常数项被移除掉了。

基于上述通道注意力与DCT的定义,我们可以总结得到以下两点关键属性:(1) 现有的通道注意力方案采用GAP作为预处理;(2) DCT可以视作输入与其cosine部分的加权。GAP可以视作输入的最低频信息,而在通道注意力中仅仅采用GAP是不够充分的。基于此,作者引入了本文的多谱通道注意力方案。

Multi-Spectral Channel Attention

在正式引出多谱通道注意力之前,作者首先给出了一个定理,如下所示。其中f0,02df_{0,0}^{2d}f0,02d​表示D2-DCT的最低频成分。

上述定理意味着:通道注意力机制中可以引入其他频域成分。与此同时,作者也解释了为什么有必要引入其他频率成分。

为简单起见,我们采用B表示2D-DCT的基函数:
Bh,wi,j=cos(πhH(i+0.5))cos(πwW(j+0.5))B_{h, w}^{i,j} = cos(\frac{\pi h}{H}(i + 0.5))cos(\frac{\pi w}{W}(j + 0.5)) Bh,wi,j​=cos(Hπh​(i+0.5))cos(Wπw​(j+0.5))
那么,2D-DCT可以重写成如下形式:

自然地,我们可以看到:图像/特征可以表示为不同频率成分的线性组合。再来看通道注意力的公式:att=sigmoid(fc(gap(X)))att = sigmoid(fc(gap(X)))att=sigmoid(fc(gap(X))),即通道注意力仅仅依赖于GAP结果。而X的信息却不仅仅由GAP构成:
X=gap(X)HWB0,0i,j+f0,12dB0,1i,j+⋯+fH−1,W−12dBH−1,W−1i,jX = gap(X)HW B_{0,0}^{i,j} + f_{0,1}^{2d}B_{0,1}^{i,j} + \cdots + f_{H-1, W-1}^{2d} B_{H-1, W-1}^{i,j} X=gap(X)HWB0,0i,j​+f0,12d​B0,1i,j​+⋯+fH−1,W−12d​BH−1,W−1i,j​
从上述公式可以看到:仅有一小部分信息在通道注意力中得以应用,而其他频域成分则被忽略了

Multi-Spectral Attention Module

基于上述分析,作者很自然的将GAP扩展为2D-DCT的更多频率成分的组合,即引入更多的信息解决通道注意力中的信息不充分问题。

首先,输入X沿通道维划分为多个部分[X0,X1,⋯,Xn−1][X^0,X^1,\cdots, X^{n-1}][X0,X1,⋯,Xn−1];对于每个部分,计算其2D-DCT频率成分并作为通道注意力的预处理结果。此时有:

Freqi=2DDCTu,v(Xi)=∑h=0H−1∑w=0W−1X:.h,wiBh,wu,vFreq^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} Freqi=2DDCTu,v(Xi)=h=0∑H−1​w=0∑W−1​X:.h,wi​Bh,wu,v​
s.t.i∈{0,1,⋯,n−1}s.t. i\in \{0,1,\cdots, n-1\} s.t.i∈{0,1,⋯,n−1}

将上述频域成分通过concat进行组合,
Freq=cat([Freq0,Freq1,⋯,Freqn−1])Freq = cat([Freq^0, Freq^1, \cdots, Freq^{n-1}]) Freq=cat([Freq0,Freq1,⋯,Freqn−1])
真个多谱通道注意力机制与描述如下:
msatt=sigmoid(fc(Freq))ms_att = sigmoid(fc(Freq)) msa​tt=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\times 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 nndef get_ld_dct(i, freq, L):result = math.cos(math.pi * freq * (i + 0.5) / L)if freq == 0:return resultelse: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 attentionc_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] = valreturn dct_weightsclass 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)加入极市原创作者行列

通道注意力新突破!从频域角度出发,浙大提出FcaNet:仅需修改一行代码,简洁又高效相关推荐

  1. 【论文解读】FcaNet:频率通道注意力网络论文解读

    导读 改一行代码就能涨点,这么好的事情,还不赶紧来看看,用不同的频率分量来做注意力,确实有效果! 论文:https://arxiv.org/abs/2012.11879 1.介绍 注意力机制有很多种方 ...

  2. 刚刚!频域通道注意力网络FcaNet开源了!

    去年12月底,来自浙江大学李玺老师组的一篇文章,从频域思考注意力机制,提出了频域注意力方法FcaNet. 该方法简单有效,在现有通道注意力机制中,只需改变计算中的一行代码即可实现. 所提出的方法在图像 ...

  3. 浙大 | FcaNet:频域通道注意力机制(keras实现)

    FcaNet: Frequency Channel Attention Networks  paper:http://arxiv.org/abs/2012.11879 code:https://git ...

  4. COCO新记录:60.6AP!微软提出采用注意力机制进行检测头统一的Dynamic Head

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 极市导读 本文提出一种新颖的动态头框架,它采用注意力机制将不同的目标检测头进行统一.COCO数据集上实 ...

  5. 旷视提出AutoML新方法,在ImageNet取得新突破 | 技术头条

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 来源 | 旷视研究院 近日,来自旷视研究院的郭梓超.张祥雨.穆皓远.孙剑等人发表一篇新论文"Sing ...

  6. 何恺明等人提TensorMask框架:比肩Mask R-CNN,4D张量预测新突破

    整理 | 刘畅.Jane 责编 | Jane 出品 | AI科技大本营(id:rgznai100) 看到今天要给大家介绍的论文,也许现在大家已经非常熟悉 Ross Girshic.Piotr Doll ...

  7. CVPR 2020 Oral | 人脸识别Loss新突破: 旷视提出Circle Loss,革新深度特征学习范式...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 来源:旷视研究院@微信公众号 旷视研究院提出用于深度特征学习的Circle Los ...

  8. 为何要从用户角度出发来思考问题

    一切从用户思维开始 课程:一切从用户思维开始 作者:L先生 出版社: 阅读日期: 书摘/笔记: 批注/感悟: 信息接收漏斗 我们人的大脑底层结构导致了我们接收信息会产生偏差,比如我们接收到的信息,很晦 ...

  9. 智能IP先锋:从园区网络智能变革,到数字化转型新突破

    数字化转型已经成为社会经济共同探讨.关注和推动的时代命题.而在宏观的数字化转型视野之下,每一项新技术.新解决方案.新商业模式,都需要有一部分企业去率先探索,勇做先锋.这些先锋的合力最终会推开一扇大门, ...

最新文章

  1. java OpenCv Mat 类的基本操作(3)
  2. 经典背包问题 01背包+完全背包+多重背包
  3. 20169207《Linux内核原理与分析》第五周作业
  4. 浮点卷积winograd算法
  5. 短期目标[Till 2011-08-05]
  6. javaScript ie8 不支持 new Date(2017-07);只支持new Date(2017/07/01)
  7. TCP与UDP的区别(未完成,待补充)
  8. 好久没弄数学了,一本书上出现了,应该是指代了什么意思,问下.
  9. (6)微信UI自动化-搜索指定联系人(C#)
  10. 智慧工厂管理系统全面提升智能化水平
  11. 主板检测卡c5_计算机主板检测卡检测显示C5是哪的問題?
  12. How do I find the FC ID (WWN) of a scsi device/LUN on Red Hat Enterprise Linux?
  13. 复杂问题的知识问答技术介绍
  14. AJAX中的利用POST传送数据
  15. php ean13,php生成EAN_13标准条形码实例_php实例
  16. 【Linux-MYSQL】数据库的使用
  17. 科学计算线性方程组的几个实例
  18. MMA-Mathematica定义函数
  19. 使用Ajax自动获取QQ头像昵称
  20. python初中数学建模培训_初中生数学建模培养

热门文章

  1. Codis集群的搭建与使用
  2. CentOS 6.3 升级软件 gcc等,并安装部署DNN环境 (未完成,不完整)
  3. java 爬虫 百度新闻_基于HttpClient实现网络爬虫~以百度新闻为例
  4. asp按钮跳转页面代码_PHP header常用URL地址跳转的几种方法
  5. 各种测序基础知识汇总
  6. 第13天学习Java的笔记(类定义)
  7. 如何判断离散数组 是递增趋势_期货交易中,如何通过交易周期判断趋势,做到顺势而为?...
  8. 算法 | 数据结构与算法(代码版)
  9. html预览不出效果是怎么回事,为何HTML文件直接双击打不开 要用浏览器才能打开 之前双击还能打开显示效果的...
  10. python简介pdf_PDFMiner首页、文档和下载 - Python PDF 解析器 - OSCHINA - 中文开源技术交流社区...