科普知识
注意力机制(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
本期分享就到这里啦,实战篇我们重在分享代码实现细节,大家如果在学习过程中有疑问或者建议,可随时后台私聊小编哦。
编辑:玥怡居士 | 审核:小圈圈居士