深度学习中的 Attention 机制总结与代码实现
查无此人☞
这个作者很懒,什么都没留下…
展开
-
Pyramid Squeeze Attention
地址:import numpy as npimport torchfrom torch import nnfrom torch.nn import initclass PSA(nn.Module): def __init__(self, channel=512,reduction=4,S=4): super().__init__() self.S=S self.convs=[] for i in range(S):..原创 2021-11-22 20:12:14 · 1544 阅读 · 0 评论 -
ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks---CVPR2020
这是CVPR2020的一篇文章。地址:如上图所示,SE实现通道注意力是使用两个全连接层,而ECA是需要一个的卷积。作者这么做的原因一方面是认为计算所有通道两两之间的注意力是没有必要的,另一方面是用两个全连接层确实引入了太多的参数和计算量。因此作者进行了AvgPool之后,只是使用了一个感受野为k的一维卷积(相当于只计算与相邻k个通道的注意力),这样做就大大的减少的参数和计算量。(i.e.相当于SE是一个global的注意力,而ECA是一个local的注意力)import numpy as npi.原创 2021-11-22 19:28:11 · 1118 阅读 · 0 评论 -
SKAttention:Selective Kernel Networks---CVPR2019
这是CVPR2019的一篇文章,致敬了SENet的思想。在传统的CNN中每一个卷积层都是用相同大小的卷积核,限制了模型的表达能力;而Inception这种“更宽”的模型结构也验证了,用多个不同的卷积核进行学习确实可以提升模型的表达能力。作者借鉴了SENet的思想,通过动态计算每个卷积核得到通道的权重,动态的将各个卷积核的结果进行融合。个人认为,之所以所这篇文章也能够称之为lightweight,是因为对不同kernel的特征进行通道注意力的时候是参数共享的(i.e. 因为在做Attention之前,首先将原创 2021-11-22 18:16:41 · 4353 阅读 · 0 评论 -
通道注意力:Squeeze-and-Excitation(SE) Attention
这是CVPR2018的一篇文章,同样非常具有影响力,目前引用量7k+。本文是做通道注意力的,因其简单的结构和有效性,将通道注意力掀起了一波小高潮。大道至简,这篇文章的思想可以说非常简单,首先将spatial维度进行AdaptiveAvgPool,然后通过两个FC学习到通道注意力,并用Sigmoid进行归一化得到Channel Attention Map,最后将Channel Attention Map与原特征相乘,就得到了加权后的特征。原创 2021-11-22 17:43:49 · 5556 阅读 · 0 评论 -
BAM: Bottleneck Attention Module---BMCV2018
Brief introduction:这是CBAM同作者同时期的工作,工作与CBAM非常相似,也是双重Attention,不同的是CBAM是将两个attention的结果串联;而BAM是直接将两个attention矩阵进行相加。Channel Attention方面,与SE的结构基本一样。Spatial Attention方面,还是在通道维度进行pool,然后用了两次3x3的空洞卷积,最后将用一次1x1的卷积得到Spatial Attention的矩阵。最后Channel Attention和Spat原创 2021-11-22 17:41:43 · 1556 阅读 · 0 评论 -
CBAM: Convolutional Block Attention Module
import numpy as npimport torchfrom torch import nnfrom torch.nn import initclass ChannelAttention(nn.Module): def __init__(self,channel,reduction=16): super().__init__() self.maxpool=nn.AdaptiveMaxPool2d(1) self.avgpool=nn.原创 2021-11-22 17:23:29 · 539 阅读 · 0 评论