✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1格拉姆角场编码与保留时序相关性针对一维振动信号转二维图像时容易丢失时序依赖的问题采用格拉姆角场GAF编码。首先将信号归一化到[-1,1]区间然后计算每两点之间的三角函数值生成GASF角度和场或GADF角度差场。GAF图像保留了信号的时间顺序且对噪声不敏感。在此基础上提出一种自适应分段策略将长信号分段后分别编码再拼接避免图像过大。在电机轴承故障数据集上GAF图像在ResNet18上的分类准确率达到98.2%比直接使用FFT谱图高出5.6%。2高效通道注意力与轻量化残差网络为了在嵌入式设备上运行设计了一种极轻量化的残差网络其中的通道注意力模块采用高效通道注意力ECA避免降维仅使用一维卷积学习通道权重。同时使用深度可分离卷积替换标准卷积参数量减少70%。网络深度仅为6层输入GAF图像大小为64x64。在CWRU数据集上该轻量化模型准确率达到97.9%参数量0.28M在树莓派上推理耗时8ms。3自蒸馏训练与模型压缩为了进一步提升轻量模型的性能采用自蒸馏策略。在训练时为同一输入生成多个不同分辨率的GAF图像原图、下采样图、裁剪图分别输入教师分支同结构但深度稍大和学生分支使用KL散度使得学生输出接近教师输出。训练完成后只部署学生模型。自蒸馏使准确率从94.1%提升到97.9%接近大模型。该方法已应用于电机生产线在线检测每分钟处理1200个轴承样本。import torch import torch.nn as nn import torch.nn.functional as F import numpy as np def gasf_transform(signal, image_size64): # signal: 1D numpy array from pyts.image import GramianAngularField gasf GramianAngularField(image_sizeimage_size, methodsummation) return gasf.fit_transform(signal.reshape(1, -1)).squeeze() class ECA(nn.Module): def __init__(self, channels, k_size3): super().__init__() self.conv nn.Conv1d(1, 1, kernel_sizek_size, paddingk_size//2, biasFalse) def forward(self, x): # x: [B, C, H, W] y x.mean(dim(2,3), keepdimTrue) y self.conv(y.squeeze(-1).transpose(1,2)).transpose(1,2).unsqueeze(-1) return x * torch.sigmoid(y) class DepthwiseSeparableConv(nn.Module): def __init__(self, in_c, out_c): super().__init__() self.depthwise nn.Conv2d(in_c, in_c, 3, padding1, groupsin_c) self.pointwise nn.Conv2d(in_c, out_c, 1) def forward(self, x): return self.pointwise(F.relu(self.depthwise(x))) class LightResNet(nn.Module): def __init__(self, num_classes10): super().__init__() self.conv1 DepthwiseSeparableConv(1, 32) self.eca1 ECA(32) self.conv2 DepthwiseSeparableConv(32, 64) self.eca2 ECA(64) self.conv3 DepthwiseSeparableConv(64, 128) self.gap nn.AdaptiveAvgPool2d(1) self.fc nn.Linear(128, num_classes) def forward(self, x): x self.conv1(x); x self.eca1(x); x F.max_pool2d(x, 2) x self.conv2(x); x self.eca2(x); x F.max_pool2d(x, 2) x self.conv3(x); x self.gap(x).flatten(1) return self.fc(x) def self_distillation_loss(student_logits, teacher_logits, T3.0): return F.kl_div(F.log_softmax(student_logits/T, dim1), F.softmax(teacher_logits/T, dim1), reductionbatchmean) * (T*T)如有问题可以直接沟通