硕士课程可穿戴设备之第二次作业

虽然有三个例子,论文中展示的应该是第二个例子,但是找不到数据集,于是跑的第一个例子。


将该DNN模型应用于2017年生理信号挑战赛数据,跑通

配置环境

安装virtualenv

创建虚拟环境

  virtualenv -p python3.6 ecg_env 

激活虚拟环境

修改脚本

修改setup.sh 换清华园镜像,便于在虚拟环境中快速安装库

运行下载包库的脚本

保证训练集和验证集运行模型时的环境一致,这里使用tensorFlow.18。

下载数据集

论文实现的是数据集二,但是我无法找到数据集二。所以复现了他的第一个example。

从挑战赛官网AF Classification from a Short Single Lead ECG Recording: The PhysioNet/Computing in Cardiology Challenge 2017 v1.0.0,下载模型需要的数据集

执行训练代码前的准备工作

1.执行生成json的python代码,在cinc17文件夹下生成json

其中trian.join文件为该研究的训练集,des.join为验证集

2.然后在ecg文件夹下新建saved文件夹

3.根据报错修改相应代码(修改包的引用,和代码二进制的写入)

执行训练代码

解决所有因版本产生的问题,改变100epoch为25epoch(100轮太久,而且预计在25轮左右之后,对准确率的提升并不大),运行代码。

这里提前中断了,但并不是EarlyStoping自行停止,因为代码中给的patience是8,也就是8轮没有优化,才会停止。

 #train.py
 stopping = keras.callbacks.EarlyStopping(patience=8)

但是也能看出,接下来的训练,对正确率的影响已经很微小了,最后一轮的准确率有92%。

查看训练模型文件

模型验证

执行验证代码前的准备工作

1.\examples\cinc17\entry\prepare-entry.sh 修改脚本中的路径信息

2.\examples\cinc17\setup.sh 修改安装版本和安装来源

3.\examples\cinc17\entry\next.sh 修改 环境激活的语句和路径,保证可以持续验证

安装验证环境

运行setup.sh脚本

执行验证脚本

指定测试集中 表现最好的模型,生成文件夹,拷贝文件并开始执行文件,依次验证写入answer.txt。

sh prepare-entry.sh C:/Users/abc/saved/cinc17/1636036307-521/0.419-0.855-021-0.221-0.926.hdf5

集合级别的结果比较

准确率是0.92

论文阅读

摘要

ECG数据在临床诊断中很重要,但是在当时并没有一个端对端的深入学习的方法对数据进行进一步的拓展应用。于是团队用DNN神经网络,在 53,549 位病人数据上(12分类的 91,232 ECG数据)训练得到的模型,在各个分类的快速诊断F1的得分(要求训练模型在25s得出结果,论文中用到的一种评估模型好坏的指标)比专家还要高,要是应用在实际场景作为辅助,挺好。

内容

概念介绍

ECG

ECG每年产生的数据量也很大(神经网络缺的就是数据,这就有了与神经网络结合的可行性),对于诊断一些大病是很关键的,但是现在市面上的算法不太行。如果用算法把这么大批量的数据处理一下,那么新的ECG诊断标准一下就得到改善了,说不定还能用ECG诊断点其他的。

DNN

是由多个处理层组成的计算模型,每个层都能够学习越来越抽象的,与执行特定任务相关的输入数据的更高级别表示。DNN改善了各个领域的状况。DNN有着对那些没有怎么经过处理的、特征标注的数据(像ECG数据)识别有用特征的能力。进一步的,DNN在数据量越多,表现越好,这在ECG延年越来越多的趋势下,简直契合。

数据集

找专家标注。

评估表格

也点明了评估的方法,就是

  1. 一种是序列级别的,用模型在1.3s内预测的和专家的金标准做对比得到的评估结果。

  2. 一种是集合级别的,看整个集合的正确率对比。

各种疾病的评估结果,都挺好的。

应用

趋势

端对端的深度学习感觉是降维打击了,原本的ECG数据的利用要经过一些列操作(信号预处理,特征标记,信号处理之类的)最后去实现指定类型节律的识别分类。

端对端直接跳过这些,输入的就是原始数据,输出的就是诊断结果。(测一次便知道自己没得这种病 和 知道自己没得这些病)

和同行相比

虽然20年前,开始用DNN处理ECG相关数据了,但是碍于神经网络的层数和算力,不能大展拳脚。同行做的也都是一些对数据做处理然后得到特定类型识别的研究。

那作者团队的研究就是

  • 端对端的深度学习

  • 全新数据集

  • 可以直接使用不加处理原始数据(就只是指明了相应的标签)

发现

  • DNN训练出来的模型也会生成和最初和专家一样的错误,并且他们做出的错误都是“有据可依的”。

局限性

  • 输入的数据集都是单通道ECG信号,不是12-lead ECG信号,在那个数据集上好不好用不知道。

  • 可能会因为专家们的标注好坏影响数据集的好坏从而影响训练好坏,最后模型好坏。

  • 为了在数据集中获得足够多的稀有心律类别,我们在数据提取过程中将患有这些疾病的患者作为目标,所以测试集有偏向性,可能在这上面取得好成绩,在别的地方没这高分。

具体模型

架构

类似残差网络,网络的输入是时间序列的原始ECG数据,每1.28秒输出对应的label预测。34层网络,包含16个残差块,每块两个卷积层,再加一层全连接层和softmax。随机初始化权重,Adam优化,默认变量,初始学习率0.001, 验证集Loss不下降时*0.1,手动调学习率使得最快收敛。最后选择验证集上最低错误率的模型。

实验结果

数据集设置了两种类型的训练。

  1. 序列层级的 sequence是每256个输入样本(大约每1.3s)进行一次算法预测,并以相同的间隔与ground truth进行比较。

  2. 集合层级的 set是用30秒记录的结果进行比较。 sequence级别的度量有助于捕获心律失常的持续时间,例如记录中心律失常的发生和偏移,而set级别的度量只关注心律类别的存在。

结果图表

双边置信区间(AUC scores) 2值阈值

PR曲线

显示了三种典型类别中模型和专家的PR曲线,可以看到模型达到甚至超过了所有心律类别的心脏病专家平均水平。

敏感性特异性表

多类别 DNN的灵敏度超过了所有心律类别的平均心脏病专家的灵敏度。

混淆矩阵

表现出DNN预测结果和心脏病专家结果相似的模式。

结论

数据集大,端对端DNN,满足这两条可以尝试直接训练,无需多道预处理的原始数据。数据驱动

参考内容

论文阅读

自己的英语和科研水平不足以支撑自己读完整篇论文和抓住重点,于是从其他博主的论文笔记中来学习如何吃透一篇论文。

论文阅读笔记(4-1)---基于深度神经网络的动态心电图心律不齐检测与分类_打着灯笼摸黑的博客-CSDN博客

 ##研究贡献
 - 这项研究证明了端到端的DNN方法是可以用来提高ECG解释算法的准确性。
 - 近来的研究表明随着可用数据的增加,算法的性能也会提高。我们的研究保证为端到端深度学习方法提供足够大的数据集。
 - 这项研究为自动心电图诊断提供了一个新的模式。标准的自动心电图解释通常由信号预处理,特征提取,特征选择和分类及部分组成。而DNN可以接受原始ECG数据,并直接输出诊断概率。有了足够多的训练数据,以这种房室使用DNN就有可能以数据驱动的房室学习所有手工特征或者尚未识别的特征,从而改进预测性能。
 - 研究方法的独特之处在于,以端到端的方式使用34层网络来同时输出不同节奏诊断的概率。数据集比大多数数据集大出几个数据级,并且与其他DNN方法相比,没有对ECG数据进行实质性预处理。
 - 研究中得出的重要发现是,DNN似乎可以概括心脏病专家的错误分类,正如模型和心脏病专家在混淆矩阵中的相似性所证明的那样。手动检查不一致之处后发现,DNN的错误分类总体看来非常合理。

Cardiologist-Level Arrhythmia Detection with Convolutional Neural Networks2017_sunyao_123的博客-CSDN博客

 ##架构的总结
 为了能够训练,采用和残差网络相似的短链接。神经网络层与层之间的短连接,通过使信息在非常深的网络间很好传递,来优化训练。在数据输入网络之前,使用鲁棒性正则化策略进行正则化。网络包含16个残差模块,每个残差模块包括2个卷积层。所有的卷积层滤波器大小为16,个数为64k,k从1开始,每4个残差网络递增1。每个交替的残差网络对输入下采样一半,因此,原始的数据被下采样了2的8次方 。当一个残差网络下采样输入时,相对应的短路经也使用Max Pooling下采样它们的输入,采样因子相同。在每个卷积层之前都加了BN层,和一个修正线性单元,采用pre-activation block design。由于这个pre-activation block结构,网络的第一层和最后一层是特殊的。我们还在卷积层之间和非线性单元之后增加了Dropout。最后的全连接层和softmax激活对每个时间step产生14个类的分布。

Nature Medicine文章Cardiologist-level arrhythmia detection and classifcation细节记录_wendell 的博客-CSDN博客

什么是端到端的训练或学习?shuijinghua的博客-CSDN博客端到端训练

什么是召回率??井察的博客-CSDN博客召回率

代码复现

整体思路

#房颤 (qq.com) --出自微信公众号:杏林里的码农

通过搜索技能找到这篇文章,跟着一步一步走,可还是在作者没有提及到的地方翻车了。

  • 环境版本配置不一致,以至于最后无法验证

  • 项目路径问题,导致脚本运行失败

环境配置

虚拟机共享文件夹 VMware Tools安装Mr.zhou-CSDN博客安装vmtools

linux git clone相关问题 github 推送出现“git@github.com: Permission denied (publickey). fatal: 无法读取远程仓库。请确认您有正确的访问权限并且仓库存在。” 问题_fatal: 无法读取远程仓库。 请确认您有正确的访问权限并且仓库存在。-CSDN博客

conda 新建虚拟环境 Anaconda-用conda创建python虚拟环境 - 知乎 (zhihu.com)

自己尝试过用linux去复现这个项目,一方面由于操作不太熟练,另一方面找到了在Windows上成功复现的参考文档,于是此念头作罢。

大多问题在杏林里的码农的文章中可以得到解决,可还是有一些微小的bug,需要继续配置环境,如下

'str' object has no attribute ‘decode‘成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘_一个处女座的程序猿-CSDN博客

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值