Giter Club home page Giter Club logo

hefei_ecg_top1's Introduction

“合肥高新杯”心电人机智能大赛——心电异常事件预测冠军解决方案

赛题地址

https://tianchi.aliyun.com/competition/entrance/231754/introduction

开源baseline

感谢比赛期间JavisPeng开源的优质baseline

比赛分数

赛题回顾

  • 问题描述:依据心电图机8导联的数据和年龄、性别特征,预测心电异常事件
  • 比赛数据:32142条初赛数据和20036条复赛数据(初赛数据有重复,初复赛标签分布差异大)
  • 评价指标:MicroF1

数据分析

  • 标签相关性:计算公式为两标签交集数量除以两标签并集数量,0表示完全互斥。该相关性也可视为一种“特征”。

  • 不同导联节拍一致:尖峰位置一致。

  • 不同导联十分相似:将不同导联画在同一坐标轴上,可看出相似性。如何构建模型以利用这种相似性最为关键的思路。

模型构建

针对多导联心电图分类任务,我创新地提出一种网络结构,将其称之为ECGNet: Multi-scale ResNet for Multi-lead ECG Data。该模型是本次比赛的致胜关键。(细节可见PPT)

模型融合

模型融合阶段效果提升,我认为主要有两点原因:

  1. 充分利用初赛和复赛的数据
  2. “隐含”地利用了不同标签的相关性

不足之处:

  1. 模型缺乏多样性
  2. 没有用到传统特征和树模型

此外,植物提出的嫁接学习也是种很有意思的思路。

效果评估

线下对20类标签用单模型评估效果,反正比我自己判断的(仅限电轴偏转方向)好得多。

经验总结

  • 充分利用提供的数据很重要,尤其分布差异很大时。
  • 多去思考多去尝试。

在处理多导联心电图数据时:

  • 对不同导联应用相同的卷积核,能在减小参数量的同时,很好地提升模型的效果。
  • 采用多尺度网络能捕捉不同尺度的特征,较好地提升模型的效果。
  • 网络初期可以采用较大的卷积核,后期可以采用较小的卷积核。
  • BN-ReLU-Conv要优于Conv-BN-ReLU。
  • Squeeze-and-excitation结构也能提升模型的效果。
  • 传统特征也很重要。

失败尝试

以下是一些失败的尝试(不代表这些方法真的不行,也许是我的打开方式有问题):

  • 傅里叶变换
  • 小波变换
  • 频谱图
  • DenseNet
  • EfficientNet
  • Attention
  • LSTM
  • 滑动窗口
  • 去噪
  • 特征工程

总之还是要多思考多去尝试吧,没有什么事能一帆风顺的。

赛后感想

本次比赛收获颇丰,除了实质性奖励以外,还锻炼了我赛题思考、数据分析、模型构建、论文阅读、编程实现以及答辩的能力,且与其他选手交流了一些有趣的思路。
客观上来看,本次比赛有很大的运气成分的,自己还有很多不足。总之,继续努力,再接再厉吧。
单人参赛好累啊,还有复现阶段需要抓紧时间,我差点没在期限内整出来。

PS

很多细节我没有详细介绍,有兴趣地可以看PPT或答辩视频。

答辩视频

https://tianchi.aliyun.com/course/video?liveId=41127

hefei_ecg_top1's People

Contributors

zhengqi98 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

hefei_ecg_top1's Issues

数据能上传吗

现在已经不能下载数据了,能不能分享一份数据学习下。

关于ppt中block3第一个残差结构的问题

作者你好,我在用tf复现你的模型效果,看你ppt的模型图里面,有几个疑问
第一 发现关于block3的第一个残差结构有点疑问
图中 x3,和block2一样,重复3遍,但是它的上半部分残差结构 stride是2,主干道连续卷积3次,但这个尺寸怎么和旁边shoutcut只卷积一次的相加?尺寸对不上。只能是主干道卷积一次,或者shoutcut也卷积3次,或者stride为1,才可以。
连续用1维卷积stride2 计算3遍,
尺寸从 (310,256)->(155, 256)->(78, 256)->(39, 256)
只计算一次 尺寸是 (310,256)->(155, 256)
第二 第二个block你模型图里面x4,但是代码图里面只make_layer 2次?
第三 输入是不是(8,5000)?而不是图中的(5000,8),因为在 tf 下面,如果是输入为(5000,8),且按照第一个conv2d图中参数,便无法计算,必须是(8,5000)才可以得到 (8,2476,32)的输出,但这个输出的宽 高和图中的(2476,8,32) 宽高是反的。这个反的一直到reshape成(310,256),才和你一致。tf和pytorch的channel输入是反的,但是宽高是匹配的,所以你的实际输入也应该是(8,5000,1)吧

reshape (?, 8, 5000, 1)
lay1 (?, 8, 2476, 32)
lay2 (?, 8, 310, 32)
n_block2 (?, 8, 310, 32)
Reshape (?, 310, 256)
n_block2 (?, 8, 310, 32)
Reshape (?, 310, 256)
n_block2 (?, 8, 310, 32)
Reshape (?, 310, 256)

截屏2020-02-2922 01 56

关于输入以及卷积核尺寸的问题

您好,我看ppt里描述的,输入是(5000,8),请问这个8是作为通道8,还是高、宽8呢?前者的话,就是bn * 8 * 5000 * 1,后者的话就是bn * 1* 5000 * 8。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.