Skip to content

山东赛第三届数据应用创新创业大赛-心电图智能事件识别-亚军方案

Notifications You must be signed in to change notification settings

librauee/SD_ECG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

心电图智能事件识别 把杰泥牛逼打在公屏上-Writeup & Reproduce

  • A榜第2、B榜第2

环境配置

  • numpy==1.19.5
  • pandas==1.1.5
  • scipy==1.5.4
  • scikit-learn==0.24.2
  • torch==1.7.1+cu101
  • tqdm==4.62.3
  • iterative-stratification==0.1.7

数据预处理

方案1

  • 考虑到数据存在不同长度的问题,以多数类长度16001为基准长度,这里采用长度不足16001在末尾补零,长度超过16001的末尾截断的处理。
  • 另外考虑到读取csv速度慢,这里完成上述操作之后均转化为mat矩阵文件保存。

方案2

  • 使用重采样统一将心电信号变为长度6666,并以字典形式保存所有数据,方便快速读取【减少dataset的IO, 以空间换时间】。

算法模型

模型一、se_resnet34(方案基线模型)

把经典的神经网络模型resnet34中的二维卷积修改为一维卷积,并添加注意力模块SE,使用该注意力机制有助于提取通道之间相关性,增强模型性能。

模型二、se_resnet34_plus(核心模型)

在模型一的基础上添加maxpooling层,将maxpooling层的输出与原网络平均池化的输出拼接,再经过全连接层输出最终结果,提取最大值特征有助于识别心电图的异常。

模型三、se_resnet34_plus2

在模型二的基础上,在模型输入处并行四个大小不同的卷积核,以获取不同感受野的心电图特征,然后将其通过1x1卷积缩减通道数,再将他们拼接起来输出到下一层,模型输出端采用和模型二同样的思路,添加maxpooling层,有助于识别心电图的异常。

模型四、se_resnet34_plus3(单模最高分模型)

在模型三的基础上,在模型输出处添加一个head包含两个全连接层和hardSwish激活函数。

训练方法

  • 以评价指标f1-macro作为早停指标,训练得到总指标得分最高的单模型;
  • 以每个类别的f1得分作为保存模型的依据,一次同时保存18个在每个类别中的最佳模型。

模型融合

  • 多模型生成oof以及pred文件(我这里模型很多,把顺序迭代的部分模型都用于集成)
  • 使用贝叶斯调参搜索模型权重,最终加权融合

后处理

  • 根据oof进行阈值后处理(常规操作,百分位提升)
  • 根据标签分析进行互斥后处理(千分位提升)

代码运行

  • 安装上述环境
  • 把ecg_data以及label_and_example两个文件夹放到当前路径
  • 运行命令 sh infer.sh
  • 生成提交文件sub_final.csv即为最终提交文件
  • 【注】如需重新训练,请将命令中的所有train设置为1

运行要求

  • 训练最多需要约40G内存,12G显存
  • 推理最多需要约40G内存,4G显存

About

山东赛第三届数据应用创新创业大赛-心电图智能事件识别-亚军方案

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages