/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
摘要:心电图ECG是筛查心律失常最便捷无创手段,房性早搏、室性早搏、束支传导阻滞等异常波形形态细微,人工判读对医生经验要求高。传统CNN感受野受限,普通ViT全局注意力计算开销巨大。本文基于Pytorch搭建Swin‑Transformer全家桶心电图像分类工程,数据集2700余张MIT‑BIH转换得到的ECG图像,完成A房性早搏、L左束支传导阻滞、N正常心搏、R右束支传导阻滞、V室性早搏五类识别。项目支持Swin‑T/Swin‑S/Swin‑B一键切换,实现迁移学习、冻结微调、参数量FLOPs统计、全套多分类指标、混淆矩阵、多维度训练曲线、批量图片推理;附带可直接渲染Mermaid网络结构图。本文从临床背景、数据集、Swin‑Transformer原理拆解、网络结构、代码模块解析、训练策略、指标解读、运行流程、缺陷与后续优化方向完整展开。 
1 研究背景与临床意义
心血管疾病是全球高发病,心律失常是很多心脏疾病早期重要表现。MIT‑BIH心律失常数据库是国际公认权威心电数据库,记录多种真实临床心跳波形,包含正常心搏、房性早搏、室性早搏、左右束支传导阻滞等典型样本。
- A(Atrial premature beat,房性早搏):心房提前激动,属于室上性异常搏动;
- L(Left bundle branch block,左束支传导阻滞):心室内左束支传导发生阻滞;
- N(Normal beat,正常心搏):正常窦性心跳波形;
- R(Right bundle branch block,右束支传导阻滞):右束支传导阻滞;
- V(Premature ventricular contraction,室性早搏):心室提前搏动,属于高危心律失常,需要重点检出。
基层医疗机构心电医生资源紧张,动态Holter会产生海量心电片段,人工逐帧判读工作量巨大。AI辅助诊断可以完成初筛,优先标记高风险异常心电片段,减轻医生阅片负担。
卷积CNN擅长提取局部波形,但建模长距离心电节律依赖能力弱;原始ViT做全局自注意力,计算复杂度是图像尺寸平方,开销巨大。Swin‑Transformer使用分层移位窗口注意力W‑MSA与SW‑MSA,注意力计算限制在局部窗口,通过窗口偏移实现跨窗口信息交互,构建分层多尺度特征,兼顾局部QRS波细节与心跳节律全局依赖,同时降低计算量,非常适合ECG图像任务。
本数据集2700多张心电图像,是由一维心电信号转换得到二维可视化图片,属于中等规模医学数据集,利用ImageNet预训练权重迁移学习,配合冻结微调策略,缓解医学数据集样本量不足问题。整套工程包含训练脚本、工具库、批量推理脚本,可以横向对比Tiny/Small/Base三个版本的精度、参数量、推理速度差异。
2 数据集说明
数据集标签json定义:
{
"0": "A",
"1": "L",
"2": "N",
"3": "R",
"4": "V"
}
数据集采用ImageFolder标准目录组织格式:
data
├─train
│ ├─A
│ ├─L
│ ├─N
│ ├─R
│ └─V
└─val
├─A
├─L
└─……其余类别
数据预处理流水线
- 训练集:Resize(256) → RandomRotation(90)随机旋转 → CenterCrop(224) → ToTensor() → ImageNet标准化mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]
- 验证集:Resize(256) → CenterCrop(224) → ToTensor() → 同样标准化。
注意:本项目输入为一维心电信号转换后的RGB图像,心电波形有固定时序方向,实际工程中可关闭随机旋转,防止波形时序错乱;本实验保留旋转作为基线增强。心电图像灰度分布和自然图像存在域偏移,有条件可以使用心电领域预训练Swin权重进一步提升效果。
3 Swin‑Transformer网络架构与Mermaid结构图
Swin‑Transformer核心组件:Patch Partition分块、Swin‑Block(W‑MSA+SW‑MSA)、Patch Merging块合并下采样。
3.1 Swin‑Transformer整体文字结构
输入ECG图像 3×224×224
↓
Patch Partition:4×4分块 + Linear Embedding
↓
Stage1:Swin‑Block ×2 (W‑MSA + SW‑MSA)
↓
Patch Merging(下采样,分辨率减半,通道翻倍)
↓
Stage2:Swin‑Block ×2 (W‑MSA + SW‑MSA)
↓
Patch Merging(下采样)
↓
Stage3:Swin‑Block ×6 / ×8 / ×12(T/S/B版本层数不同)
↓
Patch Merging(下采样)
↓
Stage4:Swin‑Block ×2
↓
Global Average Pooling全局平均池化
↓
Head全连接层 → 输出5维:A / L / N / R / V
3.2 Swin‑Block内部子结构(一组连续两个Block)
输入Token序列
===== Block1 W‑MSA =====
LayerNorm
W‑MSA普通窗口多头自注意力
残差相加
LayerNorm
MLP前馈网络
残差相加
===== Block2 SW‑MSA =====
LayerNorm
SW‑MSA移位窗口多头自注意力(跨窗口交互)
残差相加
LayerNorm
MLP前馈网络
残差相加
输出送入Patch Merging
3.3 Mermaid绘图代码,复制Markdown直接渲染
flowchart TD
A["输入MIT‑BIH心电ECG图像 3×224×224"] –> B["Patch Partition<br/>4×4分块 + 线性嵌入"]
B –> C["Stage1 Swin‑Block×2<br/>W‑MSA + SW‑MSA"]
C –> D["Patch Merging<br/>分层下采样,通道翻倍"]
D –> E["Stage2 Swin‑Block×2<br/>W‑MSA + SW‑MSA"]
E –> F["Patch Merging<br/>分层下采样,通道翻倍"]
F –> G["Stage3 Swin‑Block(层数随T/S/B变化)"]
G –> H["Patch Merging<br/>分层下采样,通道翻倍"]
H –> I["Stage4 Swin‑Block×2"]
I –> J["GlobalAvgPool 全局平均池化"]
J –> K["Head全连接分类头<br/>输出5类:A房早,L左束支,N正常,R右束支,V室早"]
subgraph Swin‑Block单元
C1["LayerNorm"]
C2["W‑MSA普通窗口多头注意力"]
C3["残差Add"]
C4["LayerNorm"]
C5["MLP"]
C6["残差Add"]
C7["LayerNorm"]
C8["SW‑MSA移位窗口多头注意力"]
C9["残差Add"]
C10["LayerNorm"]
C11["MLP"]
C12["残差Add"]
C1 –> C2 –> C3 –> C4 –> C5 –> C6 –> C7 –> C8 –> C9 –> C10 –> C11 –> C12
end
3.4 Swin‑T / Swin‑S / Swin‑B版本对比
| Swin‑Tiny | t | 通道数最小,Stage3块数量少 | 最小 | 快速实验、算力有限、边缘端原型 |
| Swin‑Small | s | 中间规格,平衡精度速度 | 中等 | 心电任务推荐基线版本 |
| Swin‑Base | b | 通道、block数量更大,特征能力强 | 偏大 | 服务器离线实验,追求识别精度 |
本项目命令行参数–model t/s/b切换模型;加载官方ImageNet预训练权重,替换最后的head层输出维度为5,适配五类心电分类;开启–freeze_layers True冻结主干网络,仅训练head分类头,降低2700张心电数据集的过拟合风险。
4 项目核心代码模块解读
整套工程包含三份核心脚本:train.py训练脚本、utils.py工具库、predict.py批量推理脚本。
4.1 utils.py核心模块
心电临床任务重点指标:V室性早搏的召回率,室性早搏属于高危心律失常,需要尽可能检出,降低漏诊风险;混淆矩阵可以观察A/L/R之间容易发生的互相错分。
4.2 train.py训练脚本完整流程
- 执行train_one_epoch训练一轮;scheduler更新学习率;evaluate做验证;
- 每epoch全部指标保存到train_log_results.json;
- 对比验证集accuracy,保存最优best.pth;训练结束保存last.pth。
参考训练超参数
–model s
–pretrained True
–freeze_layers True
–batch‑size 16
–epochs 50
–optim AdamW
–lr 0.001
–lrf 0.0001
提示:Swin Transformer对学习率比较敏感,医学迁移训练建议使用较小学习率,避免破坏预训练学到的底层纹理特征。
4.3 predict.py批量推理脚本
运行命令示例:
python predict.py –model s –weights runs/weights/best.pth
5 多分类评价指标解读(A/L/N/R/V五类心电)
本任务为五分类,代码采用宏平均Macro‑Average,平等对待5类心电样本,不受各类样本数量不均衡干扰。
过拟合判断:训练集指标很高,验证集指标明显下滑;医学小数据集常见;缓解手段:开启冻结训练、控制epoch、权重衰减、合理数据增强。
6 完整项目运行流程
python train.py –model s –pretrained True –freeze_layers True –batch-size 16 –epochs 50 –optim AdamW –lr 0.001 –lrf 0.0001
- weights文件夹:best.pth、last.pth权重文件
- class_indices.json类别映射
- train_log_results.json完整训练日志
- loss_accuracy_curve.jpg、LR_decay.jpg、results.jpg指标曲线图
- trainSet Confusion Matrix.jpg、valSet Confusion Matrix.jpg混淆矩阵图片
基于 Swin‑Transformer 全家桶的 MIT‑BIH 心电五分类研究

