深度学习实战篇之 ( 十八) -- Pytorch之SeNet

2022-06-01 20:18:26 浏览数 (1)

科普知识

注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。上述机制通常被称为注意力机制。人类视网膜不同的部位具有不同程度的信息处理能力,即敏锐度(Acuity),只有视网膜中央凹部位具有最强的敏锐度。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后集中关注它。例如,人们在阅读时,通常只有少量要被读取的词会被关注和处理。综上,注意力机制主要有两个方面:决定需要关注输入的哪部分;分配有限的信息处理资源给重要的部分。

前言

上期理论篇文章我们学习了SeNet网络,其核心思想在于对输入的特征在通道维度上进行自适应增强(权重适配),同时由于其架构简单可以独立于任何架构之外,因此可以很容易的嵌入到大多数卷积神经网络实现特征增强的目的。

数据集介绍

1

本次实验数据集我们依旧采用之前的RAFDB人脸表情数据集(7类:愉快,悲伤,厌恶,平和,惊讶,恐惧,愤怒),数据集分布及其样本展示如下:

网络架构

2

SeNet架构较为简单,我们主要看与ResNet网络融合的案例,从层级上来分析,分别是:全局平均池化-->全连接层-->Relu激活函数-->全连接层-->Sigmoid压缩范围到0-1之间。

维度分析:输入维度:[B,C,H,W]

1.全局平均池化层:输入:[B,C,H,W],输出:[B,C]。备注:全局平均池化层的作用在于将特征图[H,w]转变成-->[1,1]的维度。

2.全连接层:输入:[B,C],输出:[B,C/r]

3.ReLU层: 输入:[B,C/r],输出:[B,C/r]

4.全连接层:输入:[B,C/r],输出:[B,C]

5.Sigmoid: 输入:[B,C],输出:[B,C]

代码实践

3

本次代码采用Pytorch框架(version 1.7),基础骨干网络采用ResNet18架构,我们对该网络中的四个残差块分别设计SeNet模块。由于之前对TensorFlow框架已经学习过一点时间,转换到另一框架对大家来说应该不是什么难题,本着一法通万法的原则,之后的实战篇文章我们都采用Pytorch实现,而且不再对其基础网络设计方法,数据集处理方法等进行分享学习了,直接上代码,让大家体验快感。

1.ResNet18四层残差块:

2. SeNet块设计:

3. 嵌入到四个残差块中:

训练情况

4

这里截取训练过程中的一些结果展示,本次训练显卡为:1080Ti(显存11G)相对较小,批数量bachsize为8。

代码托管至码云:https://gitee.com/fengyuxiexie/pytorch_-se-net

The End

本期分享就到这里啦,实战篇我们重在分享代码实现细节,大家如果在学习过程中有疑问或者建议,可随时后台私聊小编哦。

编辑:玥怡居士 | 审核:小圈圈居士

0 人点赞