【ARXIV2105】Beyond Self-attention: External Attention using Two Linear Layers for Visual Tasks

论文:https://arxiv.org/abs/2105.02358

代码:https://github.com/MenghaoGuo/EANet

B站视频:https://www.bilibili.com/video/BV1ug411M7kL

大部分内容来自论文作者 国孟昊 的B站视频,讲解的非常细致,强烈推荐

典型的 self-attention 计算方法如下图所示。 Q Q Q K K K 相乘,使用 softmax 归一化,然一和 V V V相乘,然后得到输出的特征,这个大家应该都相当熟悉了。

在实际应用中,因为要计算query 和 key 之间的相似度,因此复杂度会比较高。因此,研究人员提出了一系列改进方法。

第一类是子空间方法。 如下图所示,研究人员发现,当 query 落在车上时, 得到的结果中车的响应比较强(第1行);当query落在人上时,行人的响应比较强(第2行);落在道路上时,道路上的响应就比较强(第3行)。因此,可以把像素点聚为一些代表性的点,在代表性的点上计算相似性。典型的方法是 EMANet (ICCV 2019),OCRNet(ECCV2020)。 还有一类方法是进行矩阵分解来降低计算复杂度, 典型的方法是 Performer。

在这个工作中,作者提出使用两个记忆模块计算 attention,具体为建立一个共享空间 M M M,把输入特征 F F F 映射到 M M M,再恢复,如下图所示:

实现时是通过两个线性层来替代的,具体如下:

A = Norm ( F M k T ) ,     F o u t = A M v A=\textrm{Norm}(FM^T_k), ~~~ F_{out}=AM_v A=Norm(FMkT),   Fout=AMv

算法的伪代码如下图所示。其实中的关注一步就是双归一化,先使用 Softmax 归一化,然后再使用 l1_norm 归一化。作者也说,这个双归一化是相当关键的,相对于只使用 Softmax 归一化,能够显著提升性能。

在PASCAL VOC 数据集上的语义分割结果如下表所示,可以看出,使用双归一化可以显著提升性能。 作者也表示,external attention 非常依赖这种双归一化方式,但作者也指出,归一化的方法和安排次序,仍然是相当值得关注的问题。

通过查看作者的源代码,可以看出,两个归一化所处理的维度不一样,softmax 是作用在 n 上,l1_norm是作用在 k 上。其实我不是特别清楚这么设计的原因,如果有网友比较清楚可以随时交流。

x = x.view(b, c, h*w)   # b, c, n 
attn = self.linear0(x) # b, k, n
attn = F.softmax(attn, dim=-1) # b, k, n
attn = attn / (1e-9 + attn.sum(dim=1, keepdim=True)) # b, k, n
x = self.linear1(attn) # b, c, n
x = x.view(b, c, h, w)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值