https://github.com/librauee/sd_ecg
山东赛第三届数据应用创新创业大赛-心电图智能事件识别-亚军方案
https://github.com/librauee/sd_ecg
Last synced: 4 months ago
JSON representation
山东赛第三届数据应用创新创业大赛-心电图智能事件识别-亚军方案
- Host: GitHub
- URL: https://github.com/librauee/sd_ecg
- Owner: librauee
- Created: 2022-01-23T12:26:45.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-04-27T09:38:56.000Z (about 4 years ago)
- Last Synced: 2025-04-23T07:35:14.007Z (about 1 year ago)
- Language: Python
- Homepage: http://data.sd.gov.cn/cmpt/cmptDetail.html?id=53
- Size: 26.4 KB
- Stars: 15
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 心电图智能事件识别 把杰泥牛逼打在公屏上-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显存