2021AIWIN-心电图智能诊断竞赛任务一Baseline

2023-10-11 04:10

本文主要是介绍2021AIWIN-心电图智能诊断竞赛任务一Baseline,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、赛题考官

本赛题由复旦大学附属中山医院和上海数创医疗科技有限公司联合命题。

竞赛地址:
http://ailab.aiwin.org.cn/competitions/64#learn_the_details-overview

数据集下载地址:
http://ailab.aiwin.org.cn/competitions/64#participate-get_starting_kit

本文章代码下载地址:
https://gitee.com/txyugood/aiwin.git

二、赛题背景

心电图是临床最基础的一个检查项目,因为安全、便捷成为心脏病诊断的利器。每天都有大量的心电图诊断需求,但是全国范围内诊断心电图的专业医生数量不足,导致很多医院都面临专业心电图医生短缺的情况。

人工智能技术的出现,为改善医生人力资源不足的问题带来了全新的可能。由于心电图数据与诊断的标准化程度较高,相对较易于运用人工智能技术进行智能诊断算法的开发。

由于心电图可诊断的疾病类别特别丰富,目前,市面上出现较多的是针对某些特定类别的算法,尚没有看到能够按照临床诊断标准、在一定准确率标准下,提供类似医生的多标签多分类算法。本次赛事希望吸引更多优秀的算法人才,共同为心电图人工智能诊断算法的开发贡献力量。

三、赛题任务

针对临床标准12导联心电图数据的多标签多分类算法开展研发和竞技比拼。

选手需利用命题方提供的训练集数据,设计并实现模型和算法,能够对标准12导静息心电图进行智能诊断。需要识别的心电图包括12个类别:正常心电图、窦性心动过缓、窦性心动过速、窦性心律不齐、心房颤动、室性早搏、房性早搏、一度房室阻滞、完全性右束支阻滞、T波改变、ST改变、其它。

本赛题共分为两个关联任务:任务一为要求针对心电图输出二元(正常 v.s 异常)分类标签;任务二为针对给定的心电图输出上述12 项诊断分类的诊断结果标签。

四、数据介绍

心电数据的单位为mV,采样率为 500HZ,记录时长为 10 秒,存储格式为 MAT;文件中存储了 12 导联的电压信号(包含了I,II,III,aVR,aVL,aVF,V1,V2,V3,V4,V5 和 V6)

任务一的数据说明

数据将会分为参赛者可见标签的训练集,及不可见标签的测试集两大部分。数据均可下载。(请参见「参赛提交」——「下载」下的 2021A_T2_Task1_数据集,其包含了训练集和测试集)

其中训练数据提供 1600 条 MAT 格式心电数据及其对应诊断分类标签(“正常”或“异常”,csv 格式);测试数据提供 400 条 MAT格式心电数据。

五、数据预处理

本项目将mat数据转换为图片,尝试使用卷积神经网络来解决此问题。通过绘制波形可以看到,正常心电图与异常心电图在图像还是有明显差别的。这样使用卷积神经网络就有可能提取到不同的特征,从而实现分类。
正常

正常心电图

异常

异常心电图

使用下面代码将原始数据转换为图片。
注意修改代码中的路径。

tar xvf 2021A_T2_Task1_数据集含训练集和测试集.tar.gz
cd aiwin/
mkdir dataset/train
mkdir dataset/val
python process.py

运行结束后可以在dataset目录下看到train和val两个文件中包含图片数据。

ls dataset/
train  trainreference.csv  val

六、训练

运行环境:

python 3.7

paddlepaddle 2.1.2

训练模型主要有以下几个要点:

1.模型采用ResNet50网络,并加载预训练数据。

2.由于图表数据可能包含细小的特征,所以图像尺寸放大到640x640。

3.添加了一些数据增强方法,增强模型学习特征的能力。

4.学习率采用Warmup+Decay的方法,学习率设置为0.001.

训练模型执行以下命令。

python train.py
W1115 09:27:59.167901  1998 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W1115 09:27:59.173139  1998 device_context.cc:465] device: 0, cuDNN Version: 7.6.
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1436: UserWarning: Skip loading for fc.weight. fc.weight receives a shape [2048, 1000], but the expected shape is [2048, 2].warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dygraph/layers.py:1436: UserWarning: Skip loading for fc.bias. fc.bias receives a shape [1000], but the expected shape is [2].warnings.warn(("Skip loading for {}. ".format(key) + str(err)))
2021-11-15 09:28:20 [INFO]	[TRAIN] epoch: 1, iter: 10/10000, loss: 0.7406, lr: 0.0000450000, batch_cost: 9.2992, reader_cost: 0.00000, ips: 3.4412 samples/sec | ETA 25:48:18
2021-11-15 09:28:36 [INFO]	[TRAIN] epoch: 1, iter: 20/10000, loss: 0.6941, lr: 0.0000950000, batch_cost: 24.9116, reader_cost: 0.00000, ips: 1.2845 samples/sec | ETA 69:03:37
2021-11-15 09:28:51 [INFO]	[TRAIN] epoch: 1, iter: 30/10000, loss: 0.6949, lr: 0.0001450000, batch_cost: 40.5031, reader_cost: 0.00000, ips: 0.7901 samples/sec | ETA 112:10:16
2021-11-15 09:29:07 [INFO]	[TRAIN] epoch: 1, iter: 40/10000, loss: 0.6943, lr: 0.0001950000, batch_cost: 56.1472, reader_cost: 0.00000, ips: 0.5699 samples/sec | ETA 155:20:25
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 1.0
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.0
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:15 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:16 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.0
2021-11-15 09:29:17 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.25
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:18 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:19 [INFO]	[EVAL] epoch: 1 accuracy: 0.75
2021-11-15 09:29:19 [INFO]	[EVAL] epoch: 1 accuracy: 0.5
2021-11-15 09:29:19 [INFO]	[EVAL] epoch: 1 avg accuracy: 0.512499988079071
2021-11-15 09:29:27 [INFO]	[TRAIN] epoch: 2, iter: 50/10000, loss: 0.6943, lr: 0.0002450000, batch_cost: 38.6916, reader_cost: 0.00000, ips: 0.8271 samples/sec | ETA 106:56:21

七、预测与提交

训练结束后,在output目录下会保存一个best_model模型权重,预测程序会加载此权重对测试图片进行推理预测,同时生成answer.csv提交文件。

python predict.py
W1115 09:32:55.909576  2394 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W1115 09:32:55.914799  2394 device_context.cc:465] device: 0, cuDNN Version: 7.6.
Save to answer.csv

最后下载answer.csv文件压缩后并提交,分数为76.54,可以说明卷积神经网络可以学习到心电图数据中的特征。

八、总结

本项目使用了一种非常规的方法来实现心电图数据的分类,与常规的机器学习方法不同。初步实验取得了76.54的分数,分数不高,但还是有可以继续优化提升的空间,比如可以选择其他模型进行训练,数据做进一步的处理与增强。同时也可以将本项目的模型最为一种辅助模型与机器学习的结果进行融合,来提高分数。本项目可能提供了一个新的思路来解决心电图分类的问题。

这篇关于2021AIWIN-心电图智能诊断竞赛任务一Baseline的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185419

相关文章

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2