一、赛题考官

本赛题由复旦大学附属中山医院和上海数创医疗科技有限公司联合命题。

竞赛地址:
http://ailab.aiwin.org.cn/competitions/64#learn_the_details-overview

二、赛题背景

心电图是临床最基础的一个检查项目,因为安全、便捷成为心脏病诊断的利器。每天都有大量的心电图诊断需求,但是全国范围内诊断心电图的专业医生数量不足,导致很多医院都面临专业心电图医生短缺的情况。

人工智能技术的出现,为改善医生人力资源不足的问题带来了全新的可能。由于心电图数据与诊断的标准化程度较高,相对较易于运用人工智能技术进行智能诊断算法的开发。

由于心电图可诊断的疾病类别特别丰富,目前,市面上出现较多的是针对某些特定类别的算法,尚没有看到能够按照临床诊断标准、在一定准确率标准下,提供类似医生的多标签多分类算法。本次赛事希望吸引更多优秀的算法人才,共同为心电图人工智能诊断算法的开发贡献力量。

三、赛题任务

针对临床标准12导联心电图数据的多标签多分类算法开展研发和竞技比拼。

选手需利用命题方提供的训练集数据,设计并实现模型和算法,能够对标准12导静息心电图进行智能诊断。需要识别的心电图包括12个类别:正常心电图、窦性心动过缓、窦性心动过速、窦性心律不齐、心房颤动、室性早搏、房性早搏、一度房室阻滞、完全性右束支阻滞、T波改变、ST改变、其它。

本赛题共分为两个关联任务:任务一为要求针对心电图输出二元(正常 v.s 异常)分类标签;任务二为针对给定的心电图输出上述12 项诊断分类的诊断结果标签。

四、数据介绍

心电数据的单位为mV,采样率为 500HZ,记录时长为 10 秒,存储格式为 MAT;文件中存储了 12 导联的电压信号(包含了I,II,III,aVR,aVL,aVF,V1,V2,V3,V4,V5 和 V6)

任务一的数据说明

数据将会分为参赛者可见标签的训练集,及不可见标签的测试集两大部分。数据均可下载。(请参见「参赛提交」——「下载」下的 2021A_T2_Task1_数据集,其包含了训练集和测试集)

其中训练数据提供 1600 条 MAT 格式心电数据及其对应诊断分类标签(“正常”或“异常”,csv 格式);测试数据提供 400 条 MAT格式心电数据。

五、数据预处理

本项目将mat数据转换为图片,尝试使用卷积神经网络来解决此问题。通过绘制波形可以看到,正常心电图与异常心电图在图像还是有明显差别的。这样使用卷积神经网络就有可能提取到不同的特征,从而实现分类。
正常

正常心电图

异常

异常心电图

使用下面代码将原始数据转换为图片。

# 解压代码和数据集
%cd /home/aistudio/
!tar xvf aiwin.tar.gz
!tar xvf 2021A_T2_Task1_数据集含训练集和测试集.tar.gz
%cd aiwin/
!mkdir dataset/train
!mkdir dataset/val
!python process.py
/home/aistudio/aiwin

运行结束后可以在dataset目录下看到train和val两个文件中包含图片数据。

!ls dataset/
train  trainreference.csv  val

六、训练

训练模型主要有以下几个要点:

1.模型采用ResNet50网络,并加载预训练数据。

2.由于图表数据可能包含细小的特征,所以图像尺寸放大到640x640。

3.添加了一些数据增强方法,增强模型学习特征的能力。

4.学习率采用Warmup+Decay的方法,学习率设置为0.001.

训练模型执行以下命令。

!python train.py
W1115 09:27:59.167901  1998 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W1115 09:27:59.173139  1998 device_context.cc:465] device: 0, cuDNN Version: 7.6.
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1436: UserWarning: Skip loading for fc.weight. fc.weight receives a shape [2048, 1000], but the expected shape is [2048, 2].
  warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1436: UserWarning: Skip loading for fc.bias. fc.bias receives a shape [1000], but the expected shape is [2].
  warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
2021-11-15 09:28:20 [INFO]	[TRAIN] epoch: 1, iter: 10/10000, loss: 0.7406, lr: 0.0000450000, batch_cost: 9.2992, reader_cost: 0.00000, ips: 3.4412 samples/sec | ETA 25:48:18
2021-11-15 09:28:36 [INFO]	[TRAIN] epoch: 1, iter: 20/10000, loss: 0.6941, lr: 0.0000950000, batch_cost: 24.9116, reader_cost: 0.00000, ips: 1.2845 samples/sec | ETA 69:03:37
2021-11-15 09:28:51 [INFO]	[TRAIN] epoch: 1, iter: 30/10000, loss: 0.6949, lr: 0.0001450000, batch_cost: 40.5031, reader_cost: 0.00000, ips: 0.7901 samples/sec | ETA 112:10:16
2021-11-15 09:29:07 [INFO]	[TRAIN] epoch: 1, iter: 40/10000, loss: 0.6943, lr: 0.0001950000, batch_cost: 56.1472, reader_cost: 0.00000, ips: 0.5699 samples/sec | ETA 155:20:25
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.75

七、预测与提交

训练结束后,在output目录下会保存一个best_model模型权重,预测程序会加载此权重对测试图片进行推理预测,同时生成answer.csv提交文件。

!python predict.py
W1115 09:32:55.909576  2394 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W1115 09:32:55.914799  2394 device_context.cc:465] device: 0, cuDNN Version: 7.6.
Save to answer.csv

最后下载answer.csv文件压缩后并提交,分数为76.54,可以说明卷积神经网络可以学习到心电图数据中的特征。

八、总结

本项目使用了一种非常规的方法来实现心电图数据的分类,与常规的机器学习方法不同。初步实验取得了76.54的分数,分数不高,但还是有可以继续优化提升的空间,比如可以选择其他模型进行训练,数据做进一步的处理与增强。同时也可以将本项目的模型最为一种辅助模型与机器学习的结果进行融合,来提高分数。本项目可能提供了一个新的思路来解决心电图分类的问题。

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐