基于Swin Transformer的MIT-BIH心电信号分类系统:创新设计与优异性能
项目概述
这是一个基于深度学习的心电信号(ECG)自动分类系统,专门用于MIT-BIH心律失常数据库的心拍分类任务。项目实现了从数据预处理、模型训练到可视化推理的完整流程,为心律失常的自动诊断提供了高效的技术解决方案。

数据集背景
MIT-BIH心律失常数据库是国际上最权威的心电信号基准数据库之一,包含了从长期Holter记录中提取的48条半小时双通道心电图记录。本项目将该数据集应用于五类心拍分类任务:
- A:房性早搏
- L:左束支传导阻滞
- N:正常心拍
- R:右束支传导阻滞
- V :室性早搏

数据集划分:训练集1917个样本,验证集820个样本,覆盖5个类别,确保了模型训练的充分性和评估的可靠性。


核心创新点
1. 先进的视觉Transformer架构
项目创新性地采用Swin Transformer作为主干网络,取代了传统的CNN架构。Swin Transformer通过层次化的窗口注意力机制,能够捕捉心电信号中的长程依赖关系,特别适合处理心电图这类具有时序局部特征和全局结构的数据。
python
# 模型构建代码(utils.py)
def create_model(num, weights):
net = m.swin_t(weights=weights) # 使用Swin Transformer Tiny
net.head = nn.Linear(net.head.in_features, num) # 自定义分类头
return net
优势:
- 更强的特征表示能力,适合复杂的ECG模式识别
- 可解释性更强,注意力机制可可视化特征重要性
- 参数效率更高,在较小数据集上表现优异
2. 全面的评估指标体系
项目超越了传统仅关注准确率的评估方式,实现了多维度的性能评估:
python
# 混淆矩阵计算各类指标(utils.py)
def summary(self): # 计算各项指标
dict['accuracy'] = acc
dict['mean precision'] = p / self.num_classes
dict['mean recall'] = r / self.num_classes
dict['mean specificity'] = s / self.num_classes
dict['mean f1 score'] = f / self.num_classes
return dict
评估指标包括:
- 每个类别的精确率(Precision)、召回率(Recall)、特异度(Specificity)、F1分数
- 宏观平均的各项指标
- ROC曲线和AUC面积
- PR曲线(精确率-召回率曲线)







3. 创新的损失函数设计
采用Focal Loss替代标准交叉熵损失,有效解决类别不平衡问题:
python
class FocalLoss(nn.Module):
def __init__(self, alpha=0.25, gamma=2.0, reduction='mean'):
super(FocalLoss, self).__init__()
self.alpha = alpha
self.gamma = gamma
self.reduction = reduction
def forward(self, inputs, targets):
ce_loss = F.cross_entropy(inputs, targets, reduction='none')
pt = torch.exp(-ce_loss)
focal_loss = self.alpha * (1-pt)**self.gamma * ce_loss
优势:
- 自动调整困难样本的权重
- 改善少数类别的学习效果
- 提高模型在类别不平衡数据上的泛化能力

4. 完善的训练监控与可视化
项目实现了端到端的训练监控系统:
- 实时训练指标跟踪:每个epoch记录所有评估指标
- 学习率动态调整:余弦退火学习率调度
- 训练过程可视化:损失曲线、准确率曲线、学习率衰减曲线
- 数据集分布分析:训练集和验证集的类别分布直方图
- 混淆矩阵可视化 :训练集和验证集的详细分类性能


5. 用户友好的推理界面
基于PyQt5开发了图形化推理系统:
python
# GUI界面设计(infer_QT.py)
class MainWindow(QMainWindow):
def __init__(self, model, class_indices_path):
super().__init__()
self.model = ImageClassifier(model, class_indices_path)
# 包含图像显示、结果展示、概率输出等功能
功能特点:
- 支持多种图像格式(PNG, JPG, JPEG, BMP)
- 显示前3个最可能的预测类别及其置信度
- 实时状态反馈和错误处理
- 现代化UI设计,操作直观简单

训练结果分析
根据提供的训练日志(train_log_results.json),模型在30个epoch的训练中表现出色:


性能表现
- 最终验证集准确率:95.61%
- 最佳验证集准确率:95.61%(epoch 29)
- 各类别平均性能 :
- 平均精确率:95.22%
- 平均召回率:94.87%
- 平均特异度:98.91%
- 平均F1分数:95.02%
训练动态
- 快速收敛:模型在epoch 5时验证准确率已达到91.22%
- 稳定提升:从epoch 5到epoch 29,准确率从91.22%稳步提升至95.61%
- 无过拟合:训练和验证性能同步提升,表明模型具有良好的泛化能力
各类别详细表现
- L类(左束支传导阻滞):表现最优,召回率达100%
- R类(右束支传导阻滞):精确率和F1分数接近100%
- A类(房性早搏):相对最具挑战性,但仍有91.47%的召回率
- N类(正常心拍) 和 V类(室性早搏):均表现出色,各项指标超过95%
技术架构优势
1. 模块化设计
2. 可配置性
通过argparse支持丰富的训练参数配置:
python
parser.add_argument("--pretrained", default=True, type=bool) # 预训练权重
parser.add_argument("--batch-size", default=16, type=int) # 批次大小
parser.add_argument("--epochs", default=30, type=int) # 训练轮数
parser.add_argument("--optim", default='Adam', type=str) # 优化器选择
parser.add_argument('--lr', default=0.0001, type=float) # 初始学习率
3. 实验可复现性
- 自动保存所有训练配置和结果
- 生成详细的训练日志(JSON格式)
- 保存最佳和最终模型权重
- 可视化结果自动导出
4. 计算效率
- 总参数量:约1885.6万
- 可训练参数量:约2752.3万
- FLOPs:约2.98亿
- 支持GPU加速训练
应用价值
- 临床辅助诊断:为医生提供快速、准确的心律失常初筛工具
- 远程医疗:可集成到移动医疗设备中,实现实时心电监测
- 医学研究:为心律失常研究提供可复现的基准模型
- 教育工具:帮助医学生理解心电图分类原理
总结
本项目成功地将前沿的视觉Transformer技术应用于心电图分类任务,通过创新的模型设计、全面的评估体系和用户友好的界面,构建了一个高效、准确、可靠的心电信号自动分类系统。在MIT-BIH数据库上的优异表现验证了该方法的有效性,为心律失常的自动诊断提供了有力的技术支撑。
项目亮点总结:
- ✅ 采用先进的Swin Transformer架构
- ✅ 实现多维度的综合性能评估
- ✅ 解决类别不平衡的Focal Loss设计
- ✅ 完整的训练监控和可视化系统
- ✅ 用户友好的图形化推理界面
- ✅ 在MIT-BIH数据库上达到95.61%的准确率
这个项目不仅展示了深度学习在医疗图像分析中的强大能力,也为类似的时间序列分类任务提供了可借鉴的技术框架和实施范例。
下载地址:基于Swin Transformer与多模态融合的MIT-BIH心电智能诊断系统:从ECG分类到临床可解释性部署,已经训练好