接上篇,我们的思路已经很清楚了,就是将U-Net改为1维处理ECG信号。可问题来了,数据怎么来?要知道,既然想用模型完成更高级的功能,那给出更为详尽的人工标注几乎是必然的。在这个任务里面,我们要给出的监督信号要包括各个片段中的信号类型以及它们精确的分界点。常用的MIT-BIH数据库只是给出了心拍的类型标记,而QT数据库中的信号虽然给出了心拍的边界参考,但大部分也是用某个算法来做的,真正人工标记的数据很少,况且,如果我们手头上有自己的数据,那怎么才能用到训练中呢?这里我提供了一种方式可以来自己做符合要求的数据。

首先介绍一个工具labelme。这个是计算机视觉领域用来制作带标签图像数据的工具之一,具体安装和使用方法可参考:https://blog.csdn.net/shwan_ma/article/details/77823281。总之,其作用就是,你可以通过操作鼠标,把图片中的目标物体用位置框框定以及标定类型,然后保存具体坐标位置和类别信息到一个json文件。

ECG本身是一个一维信号,似乎这里我们可以将信号保存成一张图像,然后按照图像标定信息,就像这样:

不过这里需要注意的有两点:

  1. 保存的ECG图像长度与该信号实际长度往往并不等同,例如一张长度为3000像素的图片保存了实际长度为1000采样点的信号,而labelme只会记录标定框在图片中的位置,如果不做额外处理是无法得到实际位置的;
  2. 虽然我们画了一个个矩形框,但由于ECG本质上是一维信号,所以真正有意义的是水平方向,也就是时间方向的位置是有意义的,垂直方向,也就是振幅方向,在知道水平方向的位置后可以直接得到精确的幅值。因此,在标记时我们只需要保证水平方向能够精准地分割信号就可以了。

对于第1点中的问题,也有解决办法。我们可以将一定长度的ECG片段的图片统一保存成相同分辨率的,没有白边的图片,这样,ECG的实际长度跟图片长度具有了固定的变换关系。例如,长度为3000像素的图片保存了实际长度为1000采样点的信号,labelme记录了某个点的水平位置为2700,则它在信号上的实际位置应为1000*(2700/3000)=900。可见经过一小步的换算,就可以解决问题。另外,labelme中似乎只能对矩形框的四个点分别地独立进行调整,这就容易导致一个问题:当我们在打标记时,往往需要微调,这样就容易使得原来的矩形变成不规则四边形,相对的两条边不平行。采用如下方式解决:设图片长度为Li,信号实际长度为Ls,labelme边界框四个点的水平位置坐标分别为xl1,xl2,xr1,xr2,在严格的矩形中xl1=xl2,xr1=xr2,但是由于微调导致上述关系不再严格成立,而又需要确定唯一的实际水平边界位置,进行如下换算:

其中,xl’ xr’ 为左右边界在信号上的实际位置。另外,在生成ECG片段的图像时,需要实现将心拍类型也标记上去,比如在上面的图中,在正常心拍上标记了一个小圆圈,表示正常,在早搏的心拍上标记了一个小方框,表示早搏。这些信息都是来自数据库的专家标记,这样方便我们在做标记时知道各个心拍的类型,并且准确标记它们的边界。其实说白了,以MIT-BIH数据库为例,专家们已经给出了各个心拍的类型,我们要提供的信息只是各个心拍的精确边界,以及把专家标注的心拍类型“复制”一下进行再标注,以备后用。

然而,关于数据方面最大的问题是,人工标记耗时巨大,而且需要有专业经验的人来标记才能尽量准确。在MIT-BIH数据库众多的心律不齐类型中,个人认为早搏是最明显的,可能不需要太多医学上的经验就可以进行边界标记;另外人工标注实在是太耗费时间了,我选择了MIT-BIH中119这条信号,主要包含了正常和PVC心拍,抽时间标记了很长时间,才得到了600条有效数据,真心枯燥!!!不过咬咬牙还是免费分享给大家,以下的实验都是围绕这些数据展开。原始文件可在(链接:

https://pan.baidu.com/s/1wL59jTiCq5D9dgskC-xA6Q 提取码:1yh2)下载,解压即可。不要求别的了,请大家多多点赞和github给星吧。。。。。。。

这一部分的代码分别由开源项目中的几个代码文件完成,运行时要注意先后顺序:

  1. generate_files_for_manualLabel.m:用于生成用于人工标记的图像。其中调用了自定义函数rdecg,用于读取信号文件和对心拍的标注信息;
  2. data_preproc.py:用于人工标记后的文件(就像上面下载的文件那样,解压后可得119_MASK文件夹)整理。运行前先在同目录下新建一个文件夹119_SEG。注意,由于代码中包含了对文件的删除,因此在原始人工标记后的文件119_MASK中仅能运行一次。建议运行前先将原始文件备份!!!若遇到错误可重新恢复并重新执行。
  3. generate_labels.py:用于生成训练时的标签,将labelme生成的json文件中的信息转换为.npy文件存储。运行前先在同目录下新建一个文件夹119_LABEL。
  4. generate_train_val.py: 生成训练集和验证集。前面说了,我这里提供了自己标注的600个样本,选择其中500个做训练,100个做验证,分开保存。运行前新建文件夹train_sigs, train_labels, val_sigs, val_labels,分别保存训练集信号,标签,验证集信号,标签。

当然想省劲直接开始训练U-Net的,可以直接下载我提供的文件(链接:https://pan.baidu.com/s/1U8gyDi8X7N_aUoKO2MiRDQ 提取码:kecc),解压可得相应文件夹。

下篇是模型及其训练事宜。

github开源地址:https://github.com/Aiwiscal/ECG_UNet

喜欢请给star哦~~~

U-Net新玩法——ECG精准语义分割(2)相关推荐

  1. U-Net新玩法——ECG精准语义分割 (1)

    熟悉ECG算法处理的同学都知道,在这个领域,做的最多的就是分类,可以基于心拍,也可以基于片段.两种方法各有优劣,这个我在之前的博客:Andrew Y. Ng式ResNet在MIT-BIH上的Inter ...

  2. U-Net新玩法——ECG精准语义分割(3)

    上篇已经准备好了数据,这篇就是开始训练模型.目标很明确,我们要搭建一个1维形式的U-Net,使其能够处理1维ECG.代码实现参考了https://github.com/divamgupta/image ...

  3. 精准测试新玩法の基于犯罪心理学挖掘代码风险

    精准测试新玩法の基于犯罪心理学挖掘代码风险 前言 犯罪心理学还能用于挖掘代码风险? 挖掘出来的东西是什么? 挖掘出来的东东长什么样子? 挖掘出来能用来做什么? 具体怎么样挖掘呢? 这是本文的主要探讨的 ...

  4. 实时风格迁移,移动端运行,人脸特效又有了新玩法

    视学算法报道 转载自:机器之心 编辑:维度 人脸风格迁移出现新玩法!捷克理工大学联合 Snap 公司创建了一个用于视频中人脸风格实时迁移的框架,既不需要大型数据集和冗长训练周期,更能够在移动端运行. ...

  5. 专家周 | 电商牛人的新玩法,寺库如何做奢侈品电商?视频社交电商如何运作的?...

    本周大咖分享会第三期,邀请了寺库产品总监周志华先生和呼朋科技创世人李毅秋先生两位嘉宾.他们都有着任职于国内外知名企业丰富的职业经历,对电商怀着着自己独特的见解和感悟.8月2日,PMCAFF将携手脉脉与 ...

  6. 数据与智能武装营销飞轮,网易探索C2B时代营销新玩法

    新科技.新商业.新模式,电商行业历经多年的发展,已经不止于单一的线上交易模式了.在新技术大量应用于电商,催生新商业模式.新交互体验的环境下,电商竞争日趋激烈,新玩法层出不穷.如何借助数据与AI技术,找 ...

  7. 2021年国庆节假期三亚游客离岛免税购物热情高涨、偏爱高端酒店与景点新玩法...

    三亚2021年10月9日 /美通社/ -- 暑期国内局部疫情反复对三亚旅游市场带来较强冲击,2021年国庆节假期三亚迎来传统旺季的出行高峰,三亚市旅游推广局结合大数据平台与旅游统计数据,通过分析研究发 ...

  8. 诊断2018微商:从乱象到赋能,世界微商大会发明的新玩法为您指路

    在很多人眼中,微商似乎就是微信朋友圈刷广告卖东西的.但实际上,这只是4年前最原始的玩法.4年后的2018年,微商早已演化前进,真正的含义是微电商. "微商,是赋能·创新·创业,今天的微商和当 ...

  9. 丰巢互动媒体的新玩法,智能柜焕新“皮肤”了解一下

    最近一段时间总看到关于丰巢互动媒体的新闻,本着职业精神,我也仔细观察了一下丰巢互动媒体的广告动态,不得不说,这种依托丰巢智能柜业务形态衍生出的多种新型媒体形式太符合当下的流行趋势了.不论是公司楼下还是 ...

最新文章

  1. 无法启动outlook “外出时的助理程序”
  2. VMware虚拟机中VMnet0上的网桥当前未运行
  3. android自定义绘制二叉树,安卓数据结构04-二叉树
  4. 几种SQL取日期部分的方法
  5. 大幅广告显示隐藏效果
  6. springmvc+mybatis多数据源配置,AOP注解动态切换数据源
  7. oracle 10g 高级复制,Oracle9i和Oracle10g之间构建高级复制环境的测试用例
  8. 【Nowcoder - 5670 C Easy】2020牛客暑期多校训练营(第五场)【生成函数、组合数学】
  9. blp模型 上读下写_谁能简单解释一下经济学中的BLP模型?
  10. java钝化_黑马day14 监听器之javaBean对象的活化和钝化
  11. 计算机对化工的影响PPT,化工计算机应用ppt课件.ppt
  12. phhphphphphphphp转自 细雪之舞 专注DEV
  13. sam卡和sim卡区别_什么是PSAM卡、SAM卡、SIM卡
  14. 安科瑞电瓶车智能充电桩ACX可10路充电 安科瑞 戈静怡
  15. 《全局异常捕获》劝劝潘子吧,别再用trycatch来处理异常了
  16. 电商分销APP开发功能模块
  17. 利用ztree开发带有滑动条的地图图层列表
  18. Conmi的正确答案——各版本的CH340的区别
  19. C#求1000以内的完数
  20. 微信支付查询订单java_微信支付java版本之查询订单

热门文章

  1. 为ubuntu 18.04添加蓝牙驱动
  2. 51单片机通过sp485ee和电脑通讯
  3. 前端使用node.js连接sql.server数据库教程
  4. Rasa系列教程(一) -- 系统及各组件介绍
  5. ida 字符串查找_IDA的常见操作
  6. hadoop3 EC测试
  7. 西门子定位器的气动连接
  8. 电子政务项目建设方案编写指南
  9. pandas总结与思维导图
  10. 建筑八大员考试武汉材料员考试建筑工程材料管理的强化措施