深度学习_随记003_基于卷积的注意力机制

基于卷积的注意力机制综述

文章目录

  • [OUC AI Lab - 第六章基于卷积的注意力机制学习笔记](https://oucaigroup.feishu.cn/wiki/SptswYofyi8PhokQNVUcF3WunTz)
    • 1.学习内容:
      • 论文学习,并看视频:
      • 扩展学习(随时更新):
    • 2. 学习过程
    • 3. 前言:即插即用的深度学习专栏
      • 何为即插即用:
      • 跳连(我不太清楚这个词是什么意思):
      • 算法机制:
        • 局部建模(卷积)
        • 全局建模(注意力)
      • 注意力:局部+全局:
    • 4. SENet
      • 相关阅读
        • [Squeeze-and-Excitation Networks(挤压和激励网络)](https://blog.youkuaiyun.com/tjmtaotao/article/details/106457728)
        • [深度学习领域,你心目中 idea 最惊艳的论文是哪篇?](https://www.zhihu.com/question/440729199/answer/2811439377)
        • [SENet:Squeeze-and-Excitation Networks](https://www.gnn.club/?p=3157)
    • 5. Non-local Neural Networks
    • 6. CBAM - Convolutional Block Attention Module
    • 7. Dual Attention Network
    • 8.下次学习预告(学习完成后会在相应知识点附blog链接)
      • task1:
      • task2:
      • task3:
      • task4:
      • task5:
      • task6:

OUC AI Lab - 第六章基于卷积的注意力机制学习笔记

暂未完成,有待更新。

1.学习内容:

论文学习,并看视频:

扩展学习(随时更新):

  • (cvpr2019) Selective Kernel Networks
  • (cvpr2020) ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

2. 学习过程

这周老板让我们看一下上面的内容提点想法,我先开两倍速快速看了一遍视频,确实什么都不会总结了一些我不太了解的关键词(他直接提及这些关键词而没给任何提示,估计是默认看这个视频的人都有所了解了,但我确实还是深度学习的局外人。)。

下面是阅读期间做的速记(只需粗粗瞟一眼即可,毕竟下面的确实是“速记”)

好像现在的神经网络有点怪,一层的网络实际上是一个神经元,
他们之间是一个线性结构,没有相互之间的交流,缺乏图那样各个点之间的高度交互。

受限玻尔兹曼机RBM
自编码器 Autoencoder
最大似然的梯度下降求解
深度信念网络 DBN
一般玻尔兹曼机BM
随机神经网络和递归神经网络
dropout优化技术
正则化
DNN前馈神经网络
RNN
梯度消失
辅助损失函数
AlexNet
LSTM

fishmap
forward
channel
m2p
mrp
senet
非局部算子:
高斯函数
嵌入高斯
点积
拼接
VIT
1*1卷积
transform
attention
self attention
归一化方式

pointofix

www.gnn.club

四篇文章:

SEnet

非局部神经网络

FFN及其简化

CBAM模型,卷积模块的注意力机制。

特征建模和通道建模,
解耦
最大池化,平均池化
feature map

Dual  Attention Network (2019 cvpr)

 channel attention

上面的速记我大概会在下次更新时删除。

3. 前言:即插即用的深度学习专栏

这个学习专栏共有四个视频,分别讲了不同的网络或模型。

何为即插即用:

即插即用指的是他所提及的网络都有输入维度=输出维度的特征,能够做到
随时插入进一个模型中,也能随时从这个模型中拿出,就好像是一个独立的模块一样。

他这里提到插入方式有:串行,并行,组合等。

跳连(我不太清楚这个词是什么意思):

在这里他提到了highway network,resnet,densenet,unet,DLA等名词,稍加讲解了一下,
但因为笔者本人没看过这几篇文章,所以也不是很清楚他到底在说什么,包括“跳连”这个名词。

算法机制:

视频讲述者提到,算法其实是为了处理数据,我们可以理解为讲述者做出了如下定义:

在此处之后所提及的“算法”一词,特指用于处理数据的算法。

阅读我之前blog的同学应该知道下面两个部分是什么意思。

局部建模(卷积)
全局建模(注意力)

注意力:局部+全局:

这里枚举了极多论文,后续有可能的话我会一一补充。
有点意思的是前文所附链接的up主在2025/08/26上传了四个视频,分别对应这部分的四篇论文,
然后我根据视频里的说明找了一下(这说明是转载而不是剽窃),发现这四个视频都转载自B站up主DeepFinder,视频中的水印也有他的博客图神经网络公社,
博客是要比视频更新的更快的(截止08/29,视频论文04篇,博客论文11篇),博客论文里有的也附上了论文地址(当然也只是部分,大部分链接为空,我找到了公开的网址也会附上。),
最后还有一个坏消息,即插即用专栏最后更新的blog时间在2025/07/20,而视频本来维持在每周一更,但是最近一次更新到现在已经有11天了(08/19最近一次更新),这意味着作者很有可能会鸽

4. SENet

笔者速刷了一遍该视频,没有得到什么收获,于是又细细品味了一遍blog,如下:
SENet:Squeeze-and-Excitation Networks

值得一提的是,SENet本身是2017年被提出来的模型,还获得了当年ImageNet大规模视觉识别挑战赛(ILSVRC)的图像分类任务冠军,这也是最后一届ILSVRC,甚至可以说SENet终结了这个比赛(当然真实原因远不止如此)
该工作后来在CVPR2018上发表,经过拓展和修改后又被 TPAMI(IEEE Transactions on Pattern Analysis and Machine Intelligence)接受,是名副其实的“双 CCF A”论文,含金量想必不用我多说,刚进来就拜读大佬文章,瑟瑟发抖

回归正题:

论文关键词: CNN, SE block, channel attention, image recognition

那些官话我们就不讲了,我们的目的只有学习这个网络的结构和使用,论文正文实际上相当简短(加上参考文献才堪堪13页,这在TPAMI中普遍 13 到 18 页的论文中确实算简短的),但非常令人遗憾的是,即使这篇论文精简优雅,在尝试阅读他时,我仍然完全无法理解我读到了些什么。

所以我选择了多查资料,寻找一些相关内容进行阅读,

相关阅读

Squeeze-and-Excitation Networks(挤压和激励网络)

实际上我觉得这个中文”挤压和激励网络“翻译得很糟糕,但是没办法,我也不会翻emmm,回归正题,我们先来看一下这篇文章都写了些什么:

摘要
提出了一种新的网络架构单元,称为Squeeze-and-Excitation(SE)块,通过显式建模通道间的相互依赖性,自适应地重新校准特征响应,显著提升卷积神经网络(CNNs)的性能。

阅读笔记
很显然的,摘要对于我们来说看了等于没看,继续往下:
文章内容主要是翻译了一下原论文的部分章节,比起人机翻译要好上不少,后续我们还会借助ai翻译再来一遍。
对于新手来说直接阅读本文还是太暴毙了一些,第一遍读完之后我才意识到这点。

深度学习领域,你心目中 idea 最惊艳的论文是哪篇?

原文很简短,我虽然看不懂但也大致了解了一些,但是也因为自身了解不够所以还是一知百分之一解,大致就是本来CNN没有人在处理C这个维度的时候有卓越成效,但是SE块搞了一个很简单泛用性很强的操作用在上面,大致分为
squeeze、excitation和scale三步。很遗憾我没有搞懂这三步究竟在做些什么。

SENet:Squeeze-and-Excitation Networks

这就是那位up主的原博客了,我们来看一下他在博客中都讲了些什么:

在这里插入图片描述
这幅图是论文中的原图,很好的展示了SE块的工作机理。 (虽然我没看懂)


研究背景 卷积神经网络(CNN)中通道关系建模不足
研究目的 提出轻量级模块显式建模通道间依赖关系
研究方法 设计Squeeze-and-Excitation(SE)模块:全局信息压缩+通道自适应重校准
研究对象 ImageNet等图像分类数据集
研究结论 SE模块显著提升模型性能(ImageNet上top-5误差降低25%)且计算代价极小
创新点 1. 通道注意力机制 2. 即插即用设计 3. 仅增加0.5%计算量
注:SE模块通过特征重标定实现通道自适应,后续发展为计算机视觉基础模块之一。

这上面的内容其实算是blog内容的总结,但很遗憾因为太精简了所以我也没怎么看明白,但创新点这一栏特别吸引我的注意,一是因为这玩意从开始做科研就一直听别人说,导师说,师兄说,同学说,网络说,那么到底什么是创新点,论文一定要在内容中出现这里就是我的创新点之类的东西吗?

但此处的创新点就很有意思,
1.通道注意力机制,虽然我看不懂什么是通道注意力机制,但是很明显的,这并非一个“构思极为巧妙的设计”,我并不觉得SE块会是第一个着力于这方面的研究,稍微一查,果然如此:

  • Network in Network (NiN, 2014):该工作提出了使用微型的多层感知机(MLP)来代替传统的线性卷积核,以更好地整合通道间的信息。这可以看作是在局部上进行跨通道交互的早期尝试,虽然其目的不完全是注意力,但思想有相通之处。
  • Spatial Transformer Networks (STN, 2015):STN学习对输入特征图进行空间变换(如缩放、旋转),可以理解为一种空间维度上的注意力机制。它证明了“学习到的动态调整”机制的有效性,为后续注意力机制的研究铺平了道路,尽管它关注的是“在哪里(Where)”而不是“是什么(What Channel)”。
  • 其他研究工作:一些更早期的研究工作尝试使用门控机制、线性变换等方式来调制特征响应,这些都可以视为通道注意力的雏形。但它们通常不是端到端可训练的轻量级模块,或者没有在大型数据集上展现出普遍而显著的提升。

以上是AI给我的答复,或许他并不那么令人满意,但是我们可以发现,尽管有人做过通道注意力机制相关的研究,但是大多数都石沉大海,亦或者仅有思路,而实现效果难以令人满意,那么为什么通道注意力机制会是SE块的创新点?因为他做出了卓越的成绩,计算机本质上还是工科,这篇双CCF A论文更是将工科特征体现的淋漓尽致(可能这跟作者在公司而非高校进行研究有关?),这篇论文不仅提出了这个方法,还将这个方法加以应用,在实践中取得了卓越的成绩,或许这才是他的创新点,有多新或许并不重要,与之前的研究相比,你有多强,你就有多新。

2.即插即用设计,这点更是毫无道理,难道随便一个输入输出相同的网络都是创新?这个点能被博客作者列入创新完全是因为SE块不仅是即插即用的,还是一旦使用就能极大提高网络性能的,根本原因仍然是他的强,而非他的新。

3.仅增加0.5%计算量,相信大家已经看出来了,其实创新点并不是“增加0.5%计算量”,而是在极大程度地提高了网络性能的同时,仅增加0.5%计算量。

综上,我们可以发现,做科研难以找到一个领域的创新点,其实是指你的论文没有在该领域实现技术上的巨大进步,像SE块,他没有复杂的工作,只是庞大神经网络中的一个即插即用的小模块,却依然能够得到双CCF A的桂冠,实现技术上的突破,这是为什么?

虽然SE块的成功有一定的深度学习领域不可解释性存在(你不知道修改哪一处网络结构才能使得他更加高效,就像ReLU提出之前没有人能理解激活函数怎么可能是x=max(0,x)一样),但是很显然的,这也意味着该领域没有一般意义上的专家,知识的积累有的时候反而会成为束缚,虽然大部分人终其一生也都处于知识积累阶段,远远达不到束缚的标准。但无所谓,其乐无穷。

疑问点
仅增加0.5%计算量,这是怎么计算得出的?后来我看到这句:“该方法以极小计算代价(仅增0.5%参数量)”,有点明白了,合着是增加了0.5%参数量。

我们来看一下博客中的pytorch代码:

import torch
import torch.nn as nn
import torch.nn.functional as F

class SEBlock(nn.Module):
    def __init__(self, in_channels, reduction_ratio=16):
        """
        SE Block 实现
        Args:
            in_channels: 输入特征图的通道数
            reduction_ratio: 压缩比例(用于中间层通道数)
        """
        super(SEBlock, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)  # 全局平均池化 (Squeeze)

        # Excitation 部分:两层全连接层 + 激活函数
        self.fc = nn.Sequential(
            nn.Linear(in_channels, in_channels // reduction_ratio, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(in_channels // reduction_ratio, in_channels, bias=False),
            nn.Sigmoid()  # 输出通道权重 [0, 1]
        )

    def forward(self, x):
        b, c, _, _ = x.shape  # batch_size, channels, height, width

        # Squeeze: 全局平均池化得到通道描述符
        y = self.avg_pool(x).view(b, c)  # shape: [b, c]

        # Excitation: 生成通道权重
        y = self.fc(y).view(b, c, 1, 1)  # shape: [b, c, 1, 1]

        # 特征图重标定(通道乘法)
        return x * y.expand_as(x)

# ------------------- 用法示例 -------------------
if __name__ == "__main__":
    # 1. 初始化SE Block(输入通道数为256,压缩比例16)
    se_block = SEBlock(in_channels=256, reduction_ratio=16)

    # 2. 模拟输入数据(batch_size=4, 通道=256, 特征图尺寸=56x56)
    dummy_input = torch.randn(4, 256, 56, 56)

    # 3. 前向传播
    output = se_block(dummy_input)

    print(f"输入形状: {dummy_input.shape}")
    print(f"输出形状: {output.shape}")  # 应与输入形状一致

还有博客原文:

  • Squeeze 操作
    通过 nn.AdaptiveAvgPool2d(1) 将每个通道的全局空间信息压缩为一个标量。
  • Excitation 操作
    两层全连接层:
    第一层降维(reduction_ratio 控制压缩比例,默认16)。
    第二层恢复原始通道数,并通过 Sigmoid 输出权重值(0~1)。
  • 特征重标定
    将通道权重与原始特征图逐通道相乘(x * y),实现自适应校准。

待以后实力高强了之后我会回来解析这段代码。

5. Non-local Neural Networks

6. CBAM - Convolutional Block Attention Module

7. Dual Attention Network

8.下次学习预告(学习完成后会在相应知识点附blog链接)

task1:

task2:

task3:

task4:

task5:

task6:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值