概要
目前网络上关于ECA注意力机制的代码多是基于pytorch实现的,这给习惯使用MATLAB的小伙伴增高了学习门槛,本期小淘采用MATLAB代码实现了ECA注意力机制,并将其融入经典的VGG16网络。在凯斯西储大学轴承数据上进行了验证。并在不同工况条件下进行了迁移学习。效果极好!
ECA(Efficient Channel Attention)注意力机制是SENET的改进版,它去除了原来SENET中的全连接层,换成了1*1的卷积核进行处理,使得模型参数变小,变得更加轻量级,因为ECA的作者认为卷积具有良好的跨通道信息捕捉能力,因此捕捉所有通道的信息是没必要的,因此取消了全连接层,换成了1*1的卷积。
在这里也浅谈一下自己关于对ECA机制的理解,以下理解仅代表个人看法(不对勿喷!)
之前的文章我曾经采用MATLAB语言实现过SE注意力机制,因为ECA是SE的改进,因此这里再提一下SE机制。
SE注意力机制首先通过全局平均池化来汇总每一个特征通道的信息,可以想象成是把整个图像的信息压缩成一个小的统计数据,然后,SE机制会对这些汇总后的信息先后输入一个全连接层+一个Relu线性激活层+一个全连接层+Sigmod函数,且两个全连接层的先后经过降维和升维,再配合Relu线性激活层与sigmod函数,既保证了训练参数的简化,增加了训练速度,还计算出了各个通道的重要度。SE机制的结果图如下:
-
SE机制的论文地址:https://arxiv.org/abs/1709.01507

ECA注意力机制与SE相同的地方在于,它也是首先通过了一个全局平均池化层,先将整个图像信息进行了压缩,而在之后,它是通过一个局部卷积来捕捉通道间的依赖关系,而不是全局操作,这样可以大大减少计算量,同时保留注意力机制的效果。最后,ECA根据计算得到的通道重要性调整特征,提升重要特征的权重,抑制不重要的特征,从而提高模型的整体性能。ECA机制的结果图如下:

ECA机制的论文下载链接:https://arxiv.org/pdf/1910.03151.pdf
理解了ECA机制,接下来就是编代码环节了,不得不说,这注意力机制用MATLAB编起来真的有很多坑!简直快给我干秃了。
ECA-VGG16模型介绍
VGGNet荣膺2014 年ImageNet 图像分类第2名的好成绩, 其中VGG16 是VGGNet 中分类性能最好的网络之一, 其网络结构如图所示。

本期推出的ECA-VGG16 模型结构,参考如下:

为形象表示,这里我画了一个结构图,高清的visio图一并放在附件了。

本期模型改进的参考文献来源:侯向宁,刘华春,侯宛贞.基于改进VGG16网络模型的花卉分类[J].计算机系统应用,2022,31(07):172-178.DOI:10.15888/j.cnki.csa.008582.
本期对VGG16 网络做了如下改进: 前5 段卷积的每个卷积层中均加入ECA 视觉注意力单元、BN 层和ReLU 激活函数. 其中ECA单元用于学习各通道的重要程度, 从而增强有用特征并抑制无用特征. BN 层 (batchnormalization) 的作用是加快网络的训练和收敛的速度, 防止梯度爆炸及梯度消失, 使模型会变得更加稳定; ReLU 激活函数能增强网络的非线性、防止梯度消失、减少过拟合并提高网络训练的速度. 为防止过拟合, 第6 段的两个FC 层后面均加入dropout. Softmax用于最终的分类, 由于采用的轴承数据集有10 种状态,因此最后的Output为10。
实验结果展示
先说实验结果:实验均是在900个样本进行训练,300个样本测试。
标准的VGG16,在工况0条件下,诊断准确率为:98.667%

融合ECA机制的VGG16,在工况0条件下,诊断准确率为:100%

将工况0的模型迁移到工况1时,只采用小样本(每种故障取20个样本)对全连接层微调,其他层进行冻结,训练速度大幅度提升,测试集(1000个样本)的诊断准确率为:99.9%

将工况0的模型迁移到工况2时,只采用小样本(每种故障取10个样本)对全连接层微调,其他层进行冻结,训练速度大幅度提升,测试集(1100个样本)的诊断准确率为:99.5%

将工况0的模型迁移到工况3时,只采用小样本(每种故障取10个样本)对全连接层微调,其他层进行冻结,训练速度大幅度提升,测试集(1100个样本)的诊断准确率为:99.6%

3.实验过程:基于ECA-VGG16模型,在不同工况下实现迁移学习的轴承故障诊断
实验步骤如下:
第一步:处理不同工况的西储大学数据。西储大学数据详情截图如下:

可以看到第二列的电机载荷分为0、1、2、3四种工况,这里只取故障直径为0.1778、0.3556、0.5334mm时的四种工况。对四种工况数据进行处理,处理方式如下:
采取部分重叠的采样方法即从原始信号中采集样本,相邻的采样样本之间存在部分重叠。将原始时域信号每2048个数据点组成一个样本,为了保证每个数据点都能采集到,相邻的样本点会有重叠的1048个数据点,滑动窗口的步长为1000。最终每个工况包含10种故障类型,每种类型包含120个样本。
第一步的代码整理截图如下,最后得到Working condition0.mat、Working condition1.mat、Working condition2.mat、Working condition3.mat,分别表示工况0、1、2、3。

第二步:将第一步数据转换为连续小波变换时频图:
将第一步得到的四种不同工况的数据进行同步提取小波变换,提取的图片放在了相应的“工况x连续小波变换视频图”文件夹内,然后再将图像进行一个压缩,之所以压缩,是为了后续训练模型节省时间,代码整理截图如下:

第三步:模型训练与不同工况下的迁移学习。
首先采用ECA-VGG16网络对工况0的数据进行训练与测试,选每组故障的前90个样本进行训练,后30个样本测试,准确率可达100%。
ECA-VGG16-TSNE降维前后分布图如下:

迁移学习:然后将工况0下将训练好的ECA-VGG16模型的基础单元模块和ECA模块进行冻结,并采用工况1、2、3的小样本数据(每种故障类型只取20组样本)对模型的全连接层进行微调,并采用剩下的1000个样本(每种故障类型100个)进行测试。
第三步的代码目录截图如下:

代码获取
或者点击下方阅读原文获取。
下方卡片关注后获取
636

被折叠的 条评论
为什么被折叠?



