目录
- 引言
- 2022-04-09 update
- 2022-02-02 update
- 2021-12-15 update
- CV注意力机制资源汇总
- Attention Mechanisms in Computer Vision: A Survey
- (NeurIPS 2021) Temporal-adaptive Covariance Pooling Networks for Video Recognition
- (CVPR 2018) Squeeze-and-Excitation Networks
- (CVPR 2019) SKNet (Selective Kernel Networks)
- (NIPS 2018 ) A^2-Nets: Double Attention Networks
- (ECCV 2018) PSANet: Point-wise Spatial Attention Network for Scene Parsing
- (BMVC 2018) BAM: Bottleneck Attention Module
- (ECCV 2018) CBAM: Convolutional Block Attention Module
- (CVPR 2018) Non-local Neural Networks
- (CVPR 2019) Dual Attention Network for Scene Segmentation
- 总结
- 相关资料
引言
- 许久没有看相关论文了,在这里先把之前整理过的相关论文,写一下,有其他新的再更新。
2022-04-09 update
2022-02-02 update
2021-12-15 update
CV注意力机制资源汇总
Attention Mechanisms in Computer Vision: A Survey
- 2021-11-15 PDF | 清华胡事民团队|中文介绍
- 论文首先将基于注意力的模型在计算机视觉领域中的发展历程大致归为了四个阶段:
- 将深度神经网络与注意力机制相结合,代表性方法为RAM
- 明确预测判别性输入特征,代表性方法为STN
- 隐性且自适应地预测潜在的关键特征,代表方法为SENet
- 自注意力机制
(NeurIPS 2021) Temporal-adaptive Covariance Pooling Networks for Video Recognition
(CVPR 2018) Squeeze-and-Excitation Networks
- [PDF] [code]
- SENet想必大家都很熟悉,胡杰团队用它在2017年最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军.
- 最喜欢这种大道至简的工作,思路很清楚,简洁,很容易理解,但是有效
- 所做任务:自然图像分类,场景分类,目标检测(较为通用)
- 结构块:
- 在ResNet和Inception中的应用:
- PyTorch代码实现(很简单):
from torch import nn
class SELayer(nn.Module):
def __init__(self, channel, reduction=16):
super(SELayer, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(channel, channel // reduction, bias=False),
nn.ReLU(inplace=True),
nn.Linear(channel // reduction, channel, bias=False),
nn.Sigmoid()
)
def forward(self, x):
b, c, _, _ = x.size()
y = self.avg_pool(x).view(b, c)
y = self.fc(y).view(b, c, 1, 1)
return x * y.expand_as(x)
(CVPR 2019) SKNet (Selective Kernel Networks)
- [PDF] [code]
- 这篇工作作者和上一篇SENet的胡杰,都是Momenta的,原来是一家人呢!比较相似,所以放在了一起。
- 所做任务:自然图像分类(CIFAR,ImageNet)
- 简单来说,就是在SENet基础之上,加了一个select操作,论文中介绍说,以下方法图主要有三部分构成(Split,Fuse, Select),而前两部分和SE的squeeze和excitation操作很相似,主要区别在于Select部分,通过一种通道间软注意力机制来选择不同空间scale的信息。
- 主要方法图:
(NIPS 2018 ) A^2-Nets: Double Attention Networks
(ECCV 2018) PSANet: Point-wise Spatial Attention Network for Scene Parsing
- [PDF] [code]
- 和上一篇A2Net很像,一个gather,一个collect, A2-Net是串行,PSANet是并行。
- 所做任务:语义分割(Cityspace、 ADE20K)
- 网络结构
- PSA Module
(BMVC 2018) BAM: Bottleneck Attention Module
- [PDF] [code]
- 这篇论文主要工作是探索了sptial和channel两个通道间的注意作用,思路清晰,文中具体讨论了spatial和channel的注意力机制的作用;同时还是SENet作了比较,效果还可以。
- 所做任务:自然图像分类(Cifar-10,100, ImageNet-1k),目标检测(COCO)
- 整体结构,如下,需要注意的是BAM Module主要放置在每个Bottleneck之后
- 具体细节:
- 自己整理公式版:
(ECCV 2018) CBAM: Convolutional Block Attention Module
- [PDF] [code]
- 这篇工作和BAM的是同一相关作者,效果更加好一些,该工作可以看做是SENet基础之上,添加了spatial的注意力机制;同时又和BAM类似,不同之处在于BAM同时计算spatial和channel之间的,CBAM先计算channel的,后计算spatial的类似于SENet.
- 还有一点,相比于BAM Module插在每一个Bottleneck之后,CBAM插入在每一个ResBlock之后。
- 文中也论证了channel attention放在spatial attention之前效果更好一些
- 所做任务: 自然图像分类(Cifar, ImageNet),目标检测(VOC, COCO)
- Channel Module和Spatial Attention Module
- 整体架构
- 自己整理公式版:
(CVPR 2018) Non-local Neural Networks
A position xi ’s response is computed by the weighted average of the features of all positions xj (only the highest weighted ones are shown here).
- 主要工作和上面几篇颇有相像之处,不过比较有趣的是本文讨论了下图中的和两个函数的不同结合方式,有Gaussian Function,Embedded Gaussian,Dot product和 Concatenation。这一点一般很有启发呦!
- 文中具体讨论了non-local模块的加入方式、位置,想深入了解的小伙伴,建议移步去论文。
- 所做任务: 视频分类(Kinetics,Charades), 语义分割(COCO)
- non-local block:
- 自己整理公式版:
(CVPR 2019) Dual Attention Network for Scene Segmentation
- [PDF] [code]
- 本篇工作怎么看怎么想,虽然可能你也想不到像那篇O(∩_∩)O哈哈~,是不是跃跃欲试,自己也能搞出一篇论文了^_^。
- 所做任务:场景分割(PASCAL Context,COCO, Cityspace)
- 整体结构:
- Position Attention 和 Channel Attention
- 自己整理公式版:
总结
- 以上相关的注意力机制,都有一个特点,就是进入注意力机制模块前后,shape不变,这一点也就决定了所有这种方法都比较通用,容易加入到自己的方法中去。
- 不过,就我跑过的实验来看,注意力机制有效的前提是任务的数据量要足够,要不然很有可能发挥不出应有的性能。
相关资料