网站首页 > 文章精选 正文
1. Squeeze-and-Excitation Network
SENet 是 Squeeze-and-Excitation Networks 的简称,拿到了 ImageNet2017 分类比赛冠军,其效果得到了认可,其提出的 SE 模块思想简单,易于实现,并且很容易可以加载到现有的网络模型框架中。SENet 主要是学习了 channel 之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果比较好。
通过上图可以理解他的实现过程,通过对卷积得到的 feature map 进行处理,得到一个和通道数一样的一维向量作为每个通道的评价分数,然后将该分数分别施加到对应的通道上,得到其结果,就在原有的基础上只添加了一个模块,下边我们用 pytorch 实现这个很简单的模块。
2. 代码
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)
3. 实验
虽然核心就是以上的内容,不过不能简单地结束,我们需要看一下以下几个点:
- 作为一个重要的 attention 机制的文章,这篇文章如何描述 attention,related work 如何组织?attention 机制当时已经有一定的研究和发展,也是集中于序列学习,image captioning, understanding in images 这些工作,也已经有很多出色的工作是探索了 attention 机制。senet 这篇文章主要探索了通过对通道间关系进行建模来提升模型的表达能力。related work 主要从更深的网络架构,架构搜索,注意力机制三个角度进行了梳理,确实非常全面。
- 如何解释 SE 模块?Sequeeze:对C×H×WC×H×W 进行 global average pooling,得到 1×1×C1×1×C 大小的特征图,这个特征图可以理解为具有全局感受野。Excitation :使用一个全连接神经网络,对 Sequeeze 之后的结果做一个非线性变换。特征重标定:使用 Excitation 得到的结果作为权重,乘到输入特征上。
- SE 模块如何加到分类网络,效果如何?分类网络现在一般都是成一个 block 一个 block,se 模块就可以加到一个 block 结束的位置,进行一个信息 refine。这里用了一些 STOA 的分类模型如:resnet50,resnext50,bn-inception 等网络。通过添加 SE 模块,能使模型提升 0.5-1.5%, 效果还可以,增加的计算量也可以忽略不计。在轻量级网络 MobileNet,ShuffleNet 上也进行了实验,可以提升的点更多一点大概在 1.5-2%。
- SE 模块如何加到目标检测网络,效果如何?主要还是将 SE 模块添加到 backbone 部分,优化学习到的内容。目标检测数据集使用的是 benchmark MSCOCO, 使用的 Faster R-CNN 作为目标检测器,使用 backbone 从 ResNet50 替换为 SE-ResNet50 以后带了了两个点的 AP 提升,确实有效果。
- 这篇文章的实验部分是如何设置的?这篇文章中也进行了消融实验,来证明 SE 模块的有效性,也说明了设置 reduction=16 的原因。squeeze 方式:仅仅比较了 max 和 avg,发现 avg 要好一点。excitation 方式:使用了 ReLU,Tanh,Sigmoid,发现 Sigmoid 好。stage: resnet50 有不同的阶段,通过实验发现,将 se 施加到所有的阶段效果最好。集成策略:将 se 放在残差单元的前部,后部还是平行于残差单元,最终发现,放到前部比较好。
- 如何查看每个通道学到的 attention 信息并证明其有效性?作者选取了 ImageNet 中的四个类别进行了一个实验,测试 backbone 最后一个 SE 层的内容,如下图所示:
可以看出这两个类激活出来的内容有一定的差距,起到了一定的作用。
4. Reference
论文地址:https://arxiv.org/abs/1709.01507
代码参考地址:https://github.com/moskomule/senet.pytorch
- 上一篇: 神经网络背后的数学原理:反向传播过程及公式推导
- 下一篇: 深度学习:正向传播、反向传播
猜你喜欢
- 2025-01-15 从0开始实现目标检测——基于YOLOv5
- 2025-01-15 【人工智能】简单理解CNN卷积神经网络并python实现(带源码)
- 2025-01-15 Richard Sutton 直言卷积反向传播已经落后,AI 突破要有新思路:持续反向传播
- 2025-01-15 深入理解机器学习中的最大熵原理与Softmax函数
- 2025-01-15 技术干货!LLM工程师必读量化指南,可视化揭秘大模型如何压缩
- 2025-01-15 神经网络中的全连接层是什么?
- 2025-01-15 揭秘PyTorch神器:巧妙使用torch.nn.Linear提升深度学习模型
- 2025-01-15 深度学习:正向传播、反向传播
- 2025-01-15 神经网络背后的数学原理:反向传播过程及公式推导
- 2025-01-15 ncnn+PPYOLOv2首次结合!全网最详细代码解读来了
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)