热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用卷积神经网络进行专家级别的心率不齐检测

使用卷积神经网络进行专家级别的心率不齐检测:Cardiologist-Level Arrhythmia Detection with Convolutional Neural Networks

摘要:

我们开发了一种能够检测多种心率不齐的算法(基于穿戴式心电图监测器采集的信号),该算法的性能超过了心脏病医师。我们构建了的数据集比前人大500倍。在此数据集上,我们训练了一个34层的卷积神经网络,其以心电图(ECG)序列为输入,输出类别(rhythm classes)。***心脏病专家对测试集的标记为 ground truth,在测试集上,我们将本文算法与6个心脏病医师进行了性能比较。本文的算法在召回率(灵敏度)和准确率(预测正确的比例)上都超过了心脏病医师。

1. 简介

本文的算法性能之所以好,主要有两个原因:1. 使用了深度卷积神经网络(CNN);2. 本文的数据集比前人的大两个数量级。

为了通过心电图检测心率不齐,算法必须能够识别不同类型的波,并且判断它们在时间上的复杂关系(discern the complex relationships between them over time)。这是困难的,因为不同的病人,心电图的波形不一样、噪声水平也不一样。

本文训练的 34 层 CNN 以任意长度的心电图信号为输入来检测心率不齐。图1展示了本文模型的流程。除了分类噪声和窦性心律,本文的网络还学习去分类和分割十二种心率不齐的类型(the network learns to clasify and segment twelve arrhythmia types present in the time-series)。模型在采样率为 200Hz 的心电图信号数据集上进行端到端的训练,心电图的每一秒都进行了标注,因此数据的标签是一个序列(a sequence of annotations for every second of the ECG as supervision)。

使用卷积神经网络进行专家级别的心率不齐检测

图1. 我们训练的卷积神经网络从可穿戴心脏监测器采集的 ECG 信号中正确检测出了 sinus rhythm (SINUS) 和 Atrial Fibrillation (AFIB)

我们构建的数据集的大小是前人的 500 倍。该领域,最常用的 MIT-BIH 数据集包括 47 位病人的心电图信号。在本文,我们从使用 Zio Patch 监测器的 30 万位病人中收集、标记了 3 万位病人的心电图作为本文的数据集。为了使数据集内的类别平衡,本文特意选择了一些已经出现了心率不齐的病人。

我们在测试集上,将本文算法与认证医师的预测结果进行了对比。三位专家级的心脏病医师对测试集的 336 个样本的标记作为 ground truth。本文的算法在召回率(灵敏度)和准确率(预测正确的比例)上都超过了心脏病医师。

2. 模型

2.1 问题陈述

通过心电图检测心率不齐是一个序列到序列的任务,其以心电图信号 X=[x1,...xk] 为输入,输出一个序列标签 r=[r1,...rn],这里的 rim 个不同类别(rhythm classes)中的一个。每一个输出标签对应输入的一个片段。整个输出结果覆盖了输入序列。

对于训练集中的单个样本,我们优化交叉熵:

L(X,r)=1ni=1nlog p(R=ri|X)

这里p()是概率值。

2.2 模型架构和训练

我们在本文的序列到序列任务中,使用卷积神经网络。模型总的架构如图 2 所示。网络以原始的心电图信号(时序)为输入,输出预测的标签序列。心电图的长度为 30 秒,采样率为 200 Hz,模型每秒输出一个新的预测值(model outputs a new prediction once every second)。本文的模型包含 33 个卷积层、1 个全连接层、1 个 softmax 层。

使用卷积神经网络进行专家级别的心率不齐检测

图2. 本文网络的架构。由于预**残差块,对第一层和最后一层进行了定制。总体上,本文的网络包含 33 个卷积层,后面跟一个全连接层和一个 softmax 层

为了使深度网络可训练,本文的模型使用了类似 ResNet 的架构:使用了 shortcut、BN。本文的网络包含16个残差块,每个残差块包含 2 个卷积层。所有的卷积层的 filter size 为 16,filter 数为 64k,这里 k 从 1 开始,每 4 个残差块增加1。每个残差块后都下采样一次(factor 为 2),因此原始的输入最后被下采样为原始大小的 28 分之一。当一个残差块进行下采样时,shortcut 也使用 max-pool 进行下采样。

在每一个卷积层之前,我们使用pre-activation(BN + ReLU)。由于使用了预**,网络的第一层和最后一层变得不一样。我们也在卷积层的**函数之后使用了 Dropout(Dropout between the convolutional layers and after the non-linearity)。最后的全连接层、softmax **对每一个时间步产生一个 14 类的概率分布。

我们从头开始训练了网络,卷积层的参数初始化方式如 ResNet v1。使用默认参数的 Adam 优化器,当验证集上的 loss 停止下降就将学习速率除以 10。将训练过程中在验证集上最好的模型保存下来用于测试。

3. 数据

3.1 训练

我们从 29163 位病人收集、标记的 64121 个心电图信号构成了本文的数据集。心电图信号的采样频率为 200 Hz。训练集的每一个记录的长度都是 30 秒,并且可能包含多个 rhythm 类。每一个记录都被“三个心脏病专家组成的委员会”进行了标记:专家标记了信号中异常的段,并将其标记为 14 个 rhythm 类别中的一个。

30 秒记录的标签制作使用了一个基于 web 的心电图标记工具(专门用来标记心电图)。制作标签的都是国际认证的专家。标签采用了 offset 的方式。从而将输入心电图信号完全分割。为了提高不同标记人员标签的一致性,对每一个 rhythm 变化使用特定的规则(To improve labeling consistency among different annotators, specific rules were devised regarding each rhythm transition)。

我们将数据集分为一个训练集和验证集。训练集包含数据集 90% 的数据。数据集的划分过程中,训练、验证、测试集中的病人不重叠。

3.2 测试

我们收集了 328 个病人的 336 个心电图记录作为测试集。对于测试集,每一个记录的 ground truth 标记由三位心脏病专家组成的委员会商议产生:每个顶尖专家负责测试集不同的分割(意思应该是负责不同的种类的标签)。顶尖专家对每一个记录进行组讨论、产生一个一致的标签(意思是,综合各位专家的意见,为每一个记录产生一个合理的标签)。对于测试集中的每一个记录,我们也额外收集 6 个专家的独立标记(这6个专家不在委员会里)。委员会产生的 ground truth 用于对于模型和心脏病医师的性能。

3.3 Rhythm类

本文的算法识别 12 类心率不齐、窦性心率不齐、噪声 总计 14 类。心率失常有很多特征。附录中的表 2 展示了我们要分类的 14 类心电图。当“心电图采集设备从皮肤上脱离” 或 “心电图中的基线噪声使得隐含的 rhythm 的识别变得不可能时” 就给记录打上噪声标签。

单次心跳中心电图波形 以及 心脏的活动模式随时间的变化 决定了隐含的 rhythm(underlying rhythm)。在某些情况下,不同 rhythm 之间的区别可能是微小的,但对于治疗来说是非常重要的。例如,Mobitz I(Wenckebach) 和 Mobitz II(这里称为 AVB TYPE2)很难区分。Wenckebach 被认为是良性的;Mobitz II 被认为是恶性的,需要立即的关注。

附录中的表 2 也展示了 [训练、验证集]、[测试集] 中每一个 rhythm 类别病人的数量。

4. 结果

4.1 评价指标

我们使用了两个指标来衡量模式的准确度(将专家委员会的标记作为 ground truth)。

序列级别的准确度(F1):
Sequence Level Accuracy (F1): 我们用预测值与 ground truth 序列标签之间的平均重合度来衡量模型性能。对于每个记录,一个模型被要求 要在约 1 秒内给出预测(原文为: For every record, a model is required to make a prediction approximately once per second (every 256 samples))。这些预测被用来和 ground truth 标记进行比较。

集合级别的准确度(F1):
Set Level Accuracy (F1): 不再将每一个记录的标签看做一个序列,我们将每个 30 秒记录出现的异常作为该记录的 ground truth(去掉重复)。与序列级别的准确度不同,集合级别的准确度不考虑记录内 心率异常出现的时间。我们用 预测类别 和 ground truth 的 F1 Score 衡量模型的性能。

在 序列、集合两个级别的评价指标中,我们单独为每一个类别计算了 F1 score。我们然后使用类别加权平均来计算 总的 F1 score(和 准确率、召回率)。

4.2 模型 与 心脏病专家 的性能对比

使用卷积神经网络进行专家级别的心率不齐检测

图3. 测试集上的评估结果,本文模型的平均序列 F1 score 和 平均集合 F1 score 都超过了心脏病专家。

我们在测试集上评估了心脏病专家诊断的性能。回顾一下,测试集中每个记录有一个 ground truth(由3位心脏病专家组成的委员会产生) 和 独立标签(由委员会之外独立的 6 个心脏病专家产生)。为了评估心脏病专家在每一类上的性能,我们分别计算了 6 个心脏病专家的 F1 score,然后取平均值。

使用卷积神经网络进行专家级别的心率不齐检测

表 1 展示了心脏病专家、模型在不同 rhythm 类别上的性能。在绝大数 rhythm 上,本文模型的性能超过了心脏病专家。尤其注意的是:在 AV Block 心律不齐集(包括 Mobitz I (Wenckebach)、Mobitz II (AVB Type2)、complete heart block (CHB))上超过了人类专家。Mobitz II 和 CHB 是恶性的,而 Wenckebach 被认为是良性的,因此能够将恶性和良性分开是非常有用的。

表 1 也比较了总精度、总召回率、总 F1。心脏病专家的总分被定义为了各位独立的心脏病专家的得分的均值。模型的平均精度、平均召回率都超过了心脏病专家。

5. 分析

模型同时在序列、集合上的 F1 指标的平均值超过了人类心脏病专家。图 4 展示了测试集上模型预测值的混淆矩阵。很多心律不齐与窦性心律混淆。我们认为这是由于有时模棱两可的发病位置和心电图中发病位置的模棱两可。

使用卷积神经网络进行专家级别的心率不齐检测

图4. 模型在测试集上预测值的混淆矩阵。很多诊断错误都可以理解。比如,AVB Type2 和 Wenckebach 的混淆,因为两者通常在 ECG 信号中非常相似。

模型的大部分错误诊断是可以理解的。例如,Wenckebach 和 AVB Type2 的混淆是讲得通的,因为这两个rhythm波形非常相似。同样地,Supraventricular Tachycardia (SVT)、Atrial Fibrillation (AFIB) 经常和 Atrial Flutter (AFL) 混淆,这也是可以理解的,因为它们都是心室型心率不齐。我们也注意到 Idioventricular Rhythm (IVR) 有时也被误判为 Ventricular Tachycardia (VT),这也是有道理的,因为两者只在心率上有区别(心率都接近100次/分钟),很难区别。

最常见的混淆是 Ectopic Atrial Rhythm (EAR) 和 sinus rhythm 的混淆。主要区别是一个不规则的 P 波。因为差别很微小,所以很难去检测,尤其是当 P 波有一个小的幅值 或者 当信号中包含噪声时。

6. 相关的工作

7. 结论

本文提出的模型能够根据心电图信号 检测多种类型的心律不齐,并且性能超过了人类心脏病专家诊断的性能。模型性能如此高的关键是:大数据集、深度卷积神经网络(将心电图序列信号映射为心率不齐标记序列)

关于临床研究,未来可以研究 更多种类的心率不齐的诊断 及 其它形式的心脏病的诊断。有的使用单个 ECG 传感器不行,需要使用多个 ECG 传感器。

每年有超 3 亿的 ECG 数据被采集,基于ECG高精度的诊断可以节省临床医生和心脏病专家相当大的时间,并减少误诊。此外,我们希望 “本文的技术” 及 “低成本的心电图设备” 能够使得心脏病的诊断及检测更广泛。

附录

使用卷积神经网络进行专家级别的心率不齐检测


推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • https:www.bilibili.comvideoav43996494?p61补充说明(修正前面代码存在问题):#先验框筛选defchoose_anchor_boxes(sel ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • MVC中的自定义控件
    怎么样创建自定义控 ... [详细]
  • 2022.4.2学习成果
    Flink中的编程模型4.1编程模型在Flink,编程模型的抽象层级主要分为以下4种,越往下抽象度越低,编程越复杂,灵活度越高。这里先不一一介绍,后续会做详细说明。这4层中,一般用 ... [详细]
  • Linux内核那些事之连接跟踪
    “本文分析了Linux内核连接跟踪的关键实现”连接跟踪(也叫会话管理)是状态防火墙关键核心,也是很多网元设备必不可少的一部分。各厂商的实 ... [详细]
author-avatar
尹琢抵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有