Kaggle 大脑活动模式分类Top方案整理

↑↑↑关注后"星标"kaggle竞赛宝典
  kaggle竞赛宝典  作者:Coggle

竞赛总结:Kaggle 大脑活动模式分类!

  • 赛题名称:HMS - Harmful Brain Activity Classification
  • 赛题类型:EEG信号分类、时序信号分类
  • 赛题任务:对病人的癫痫发作和其他有害大脑活动模式进行分类

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification

unsetunset赛题背景unsetunset

通过开发一个模型,对从危重病房患者记录的脑电图(EEG)信号进行检测和分类,从而实现对癫痫发作和其他有害脑活动的准确识别。参赛者需要利用机器学习和深度学习等技术,针对医院患者的EEG数据进行训练,以提高脑电图模式分类的准确性。

过有效地识别脑电图中的异常模式,可以更快速、准确地进行神经重症监护、癫痫治疗以及药物研发。这一领域的进展可能使医生和脑科研究人员能够更早地检测到癫痫发作或其他脑损伤,为患者提供更快速、更准确的治疗,对神经科学和医学研究有着潜在的革命性影响。通过这个比赛,参与者有机会推动EEG信号处理领域的创新,为神经重症护理、癫痫治疗以及药物研发等领域的发展贡献力量。

unsetunset赛题任务unsetunset

比赛的目标是利用机器学习和深度学习技术,自动分析危重病患者记录的脑电图(EEG)信号。其主要任务是检测和分类EEG数据中的特定模式,包括癫痫发作(SZ)、广泛周期性放电(GPD)、局限性周期性放电(LPD)、局限性节律性三相电流活动(LRDA)、广泛节律性三相电流活动(GRDA)以及“其他”。

unsetunset评价方法unsetunset

提交的模型将根据预测概率与观察目标之间的Kullback-Leibler散度进行评估。Kullback-Leibler散度是一种衡量两个概率分布之间差异的度量。

对于测试集中的每个eeg_id,您需要为每个投票列预测一个概率。提交文件应包含标题,并采用以下格式:

eeg_id,seizure_vote,lpd_vote,gpd_vote,lrda_vote,grda_vote,other_vote
0,0.166,0.166,0.166,0.166,0.166,0.166
1,0.166,0.166,0.166,0.166,0.166,0.166
etc.

unsetunset赛题数据unsetunset

这是一个代码竞赛。测试集只提供了少量示例供下载。当评分您的提交时,测试文件夹将被替换为包含完整测试集的版本。

  • train.csv:训练集的元数据。专家标注员审查了50秒长的EEG样本以及匹配的涵盖相同时间窗口的10分钟窗口内的谱图,并标记了中央10秒。许多这些样本是重叠的,并已合并。train.csv提供了元数据,允许您提取标记人员注释的原始子集。

    • eeg_id - 整个EEG记录的唯一标识符。
    • eeg_sub_id - 适用于此行标签的特定50秒长子样本的ID。
    • eeg_label_offset_seconds - 合并的EEG开始和此子样本之间的时间。
    • spectrogram_id - 整个EEG记录的唯一标识符。
    • spectrogram_sub_id - 适用于此行标签的特定10分钟子样本的ID。
    • spectogram_label_offset_seconds - 合并的谱图开始和此子样本之间的时间。
    • label_id - 此标签集的ID。
    • patient_id - 捐赠数据的患者的ID。
    • expert_consensus - 共识标注者标签。仅为方便提供。
    • [seizure/lpd/gpd/lrda/grda/other]_vote - 给定脑活动类别的标注者投票计数。活动类别的全名如下:lpd:局限性周期性放电,gpd:广泛周期性放电,lrd:局限性节律性三相电流活动,grda:广泛节律性三相电流活动。这些模式的详细解释在此处提供。
  • test.csv:测试集的元数据。由于测试集中没有重叠的样本,因此训练元数据中的许多列不适用。

    • eeg_id
    • spectrogram_id
    • patient_id
  • sample_submission.csv

    • eeg_id
    • [seizure/lpd/gpd/lrda/grda/other]_vote - 目标列。您的预测必须是概率。请注意,测试样本的标注者数量在3到20之间。
  • train_eegs/ :一个或多个重叠样本的EEG数据。使用train.csv中的元数据选择特定的标注子集。列名是EEG导联的各个电极位置的名称,只有一个例外。EKG列用于记录来自心脏的心电图信号。所有EEG数据(包括训练和测试)都以每秒200个样本的频率收集。

  • test_eegs/  :确切的50秒EEG数据。

  • train_spectrograms/ :组装的EEG数据的谱图。使用train.csv中的元数据选择特定的标注子集。列名指示赫兹的频率和EEG电极的记录区域。后者简称为LL = 左侧横向; RL = 右侧横向; LP = 左侧经矢状; RP = 右侧经矢状。

  • test_spectrograms/  :使用确切的10分钟EEG数据组装的谱图。

  • example_figures/  :概览选项卡中使用的示例案例图像的较大版本。

unsetunset优胜方案unsetunset

第一名

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492560

第二名

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492254

  • 频谱模型:采用了X3D-l和EfficientNetB5两种不同的模型来提取频谱特征。对原始信号进行STFT变换预处理,并使用了数据增强技术和Mixup来提高模型的泛化能力。
  • EEG模型:将原始EEG信号视为图像,通过将其reshape为(bsx3x160x1000)的形式,然后使用EfficientNetB5模型来提取特征。同样使用了数据增强技术来提高模型的鲁棒性。
  • 联合模型:将频谱模型和EEG模型提取的特征进行拼接,并使用多种模型(包括带有MNE滤波器和Butter滤波器的EfficientNetB5模型,以及带有MNE滤波器的HgNetB5模型)进行集成。
  • 预处理:对信号进行0.5-20Hz的滤波,并进行+-1024的剪裁。
  • 训练:采用两阶段训练策略,其中第一阶段使用所有数据进行训练,第二阶段只使用投票数大于等于6的数据进行训练。使用了AdamW优化器和余弦学习率调度器,并使用了数据增强和交叉验证策略。
  • 集成:通过组合多个模型来提高性能,最终的集成模型包括了多个频谱模型、EEG模型和联合模型。

第四名https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492240

这个团队的解决方案非常丰富多样,包括了1D和2D模型的集成,以及对不同类型数据的处理和训练方法的探索。

  • Yuji: 开发了基于Swin Transformer v2 Large的2D模型,使用专家投票数大于等于10的数据进行训练和微调,通过一系列微小的调整达到了CV得分为0.2318,然后进行了四种不同参数设置的模型变体,将它们集成得到了CV得分为0.2135的结果。

  • tattaka: 开发了四种不同的模型,包括使用Tiny Vision Transformer 21M、Caformer S18和ConvNExt Large作为2D骨干网络的模型,这些模型在训练过程中采用了丰富的数据增强和深度学习技术,如mixup、XYMasking、hflip、随机裁剪等,最终取得了一定的成绩。

  • bilzard: 初始方案是1D和2D模型的集成,但在团队合并后,他将主要精力放在了1D模型的开发上,主要关注于保持模型的对称性以及使用Channel Quality Factor(CQF)评估EEG通道质量等方面。在最终的提交中,他的1D模型取得了不错的CV得分。

  • yu4u: 开发了基于MobileNetV2的1D CNN模型,通过对原始EEG信号进行预处理,提取LL、RL、LP和RP特征,并在模型中使用了cutout、mixup、shuffle等数据增强技术,最终在CV得分上取得了一定成绩。

第五名https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492652


第七名

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492281

基于使用2D原始EEG信号模型和2D EEG谱图模型。他们没有使用Kaggle提供的10分钟谱图,因为在实验中它们一直表现出较差的交叉验证分数。他们使用了18个双极信号差异来训练所有模型,并发现EKG信号没有提升性能。

  • 2D原始EEG:将每个(10000,)信号重新形状为(20, 500),使用步幅为20,然后vstack 18个信号以形成一个360x500的2D图像。他们训练了两种类型的模型,50秒和50/10秒模型。

  • 2D STFT谱图:使用cusignal为每个信号生成谱图,并将它们vstack以形成一个2D图像。参数被选择为最终图像形状为(512, 512)。他们尝试了其他分辨率,但发现这是最佳的。他们训练了4种类型的模型 - 50秒,50/10秒,50/30/10秒,30/10秒。

  • 2D多窗谱图:使用python代码生成EEG谱图,然后使用hstack,vstack和填充的组合创建(500, 372)图像。他们训练了两种类型的模型,50秒和50/10秒模型。

最终提交是这三种数据的加权混合,权重分别为0.2,0.65和0.15。

第八名

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492482

  1. 特征输入:考虑到标注者看到的是2D频谱图和2D波形图,团队决定将这些特征以及1D原始波形数据输入到模型中。
  2. 训练策略:他们使用投票数为10或更多的数据(即专家标注者的意见)训练了三个单独的模型。每个模型设计用于处理不同类型的输入数据:2D频谱图、2D波形图和1D原始波形数据。
  3. 伪标签:他们使用三个单一模型对投票数少于10的数据进行了伪标记,并使用专家意见数据和伪标记数据的组合训练了一个超级模型。
  4. 性能:单一模型取得了令人瞩目的性能,CV得分为0.246,公共LB得分为0.243,私有LB得分为0.290。
  5. 细节:团队关注了各种细节,包括使用MNE库预处理原始波形数据,使用所有可用的训练数据行,在数据加载器中创建频谱图,应用数据增强,针对每个模型单独调整超参数等。

第九名

ishikei部分:

  • 他们使用了加权集成的2D模型,CV得分(vote_num>=10)为0.2023。
  • 进行了信号预处理,创建了多种通道的波形,最多可达50个通道,其中包括纵向/横向双极脑电图和原始波形。
  • 开发了双编码器(raw-eeg, eeg-spec)和三重编码器(raw-eeg, eeg-spec, kaggle-spec)模型。
  • 使用了EfficientNetV2_S、EfficientNetV2_M和ResNet34D作为骨干网络,并应用对比损失和辅助损失。
  • 训练过程采用了5折StratifiedGroupKFold,进行了投票数筛选,伪标签和模型微调等操作。
  • 通过L-BFGS-B高效地对150个模型的oof预测进行混合,以获得最终的集成权重。

sqrt4kaido部分:

  • 使用了2阶段pipeline,第1阶段是vote_num >= 4,第2阶段是vote_num >= 10。
  • 进行信号预处理,包括60Hz陷波滤波和0.4Hz高通滤波,并采用数据增强技术如垂直翻转、乘以-1、基于波形的mixup和通道交换。
  • 创建了具有4个编码器的模型,包括1D LSTM、1D WaveNet、2D Spectrogram和Kaggle Spectrogram。
  • 损失函数采用了KL散度损失和对比损失。
  • 集成过程中,将来自每个编码器的模型结合起来,采用了5折和10折交叉验证,并利用了不同通道数和不同模型的权重。

2g部分:

  • 该部分主要集中在1D模型上,使用了各种特征、特征提取器、数据增强和骨干网络以提高集成模型的多样性。
  • 使用了与ishikei和sqrt4kaido部分相似的pipeline,包括了两个阶段的训练、信号预处理和数据增强。
  • 创建了具有不同特征提取器的模型,如Wavenet和DilatedInception Wavenet,并采用了EfficientNet_b0_ns或EfficientNet_v2进行最终预测。
  • 训练过程中进行了垂直翻转、cutout、时间偏移等数据增强操作。

第十名

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492207

这个解决方案的关键在于使用更多信息的图像作为输入,这可以生成一个很好的单一模型,达到了LB 0.23和PB 0.29的分数。

  • 使用19个原始输入(差分特征)而不是4个(LL、LP、RL、RP),这个想法来源于Chris的分享。
  • 将中心10秒的部分作为图像的一部分。
  • 将原始EEG数据添加为图像的一部分。
  • 使用Adan优化器。
  • 使用efficientvit_b2和mixnet_xl作为timm的backbone。efficientvit比efficientnet好得多,从0.237到0.23的CV分数。
  • 使用torchaudio进行stft和mel提取器,但是最好的单一模型仍然来自于使用scipy.spectrogram,不确定为什么比torchaudio.stft好。
  • 对每个EEG ID进行精确的EEG偏移训练。
  • 对所有EEG子ID进行评估,并对每个EEG ID进行归一化处理(每个EEG ID的总权重为1)。
  • 用权重为60的votes >= 10的数据进行训练。第一阶段训练很好,第二阶段只有votes >= 10的数据似乎可以稍微提高LB和PB,因为它降低了癫痫预测率,但没有足够的时间验证(可能会影响CV)并且没有用于最终集成。

最后,集成了20个模型。实际上,我的模型差异不大,集成仅将最佳单一模型从PB 2896提高到2866。我添加了一个使用Kaggle spec的弱模型。有趣的一点是,与使用简单的均值相比,使用optuna生成模型权重只能稍微提高CV,例如从0.206到0.2058,但在线LB和PB显示加权结果更好。

第十一名

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492301

  • P-SHA团队:他们采用了多种光谱图转换方法,如STFT、MFCC、LFCC和RMS,并将它们与Timm Backbone或GRU结合起来训练。此外,他们还通过1D CNN对原始EEG数据进行了处理,并将其与Timm Backbone结合起来进行训练。他们还使用了mixup和其他数据增强技术,以及针对各种光谱图的个体学习成果来计算训练损失。
  • TR团队:他们使用了连续小波变换(CWT)或MelSpectrogram等特征提取方法,并采用了maxvit_tiny、swinv2_base和convnextv2_base等不同的Timm Backbone。他们还采用了时间增强和左右翻转等数据增强技术。他们还使用了两阶段训练策略,其中第一阶段使用所有数据进行训练,第二阶段只使用总投票数大于等于8的数据进行训练。
  • Stacking模型:T88团队采用了2D-CNN堆叠模型,输入为单一模型的oof数据。他们训练了9个单一模型,并将它们与2D-CNN堆叠模型结合起来。他们使用了优化器进行模型优化,并采用了不同的超参数和CV策略来减少过拟合。

第十四名

https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/493093

  • 学习策略:采用了两阶段的学习策略,首先在标签少于10个的数据上进行训练,然后在标签大于等于10个的数据上进行进一步的训练。在第一轮训练后,用模型预测的标签替换标签少于10个的数据的原始标签,将其视为伪标签进行第二轮训练。使用伪标签确认了在LB得分上的提高。
  • 关于测试数据集:经过进一步研究,发现标签大于等于10的数据集中含有比Training Dataset3更多的“其他”标签。为了避免模型在训练过程中过度适应“其他”标签,决定在第二阶段的学习中不使用部分带有“其他”标签的数据。此外,应用了后处理步骤来调整“其他”标签的预测值,这进一步提高了LB得分。
  • 2D模型:采用了CWT变换来处理频谱图像,并使用了EfficientNet等模型。通过将不同脑区域之间的EEG信号进行差分,并进行1D CNN处理,将原始EEG数据转换为2D图像。该模型在单个模型中取得了较好的LB得分。
  • 2D / 1D组合模型:创建了将频谱图像与原始EEG数据结合起来的模型。通过将原始EEG数据转换为2D图像,并与CWT频谱图像进行组合,得到了较好的LB得分。


相关推荐

  • 又水了一篇顶会!不知道博士咋毕业的,来看看我咋水的。
  • 多篇顶会一作却申博失败?斯坦福博士生亲述:AI领域太卷
  • 总结!大模型微调(Tuning)的常见方法
  • 为什么连程序员大佬有时也看不懂自己写的代码?
  • 金三银四!分享度小满的前端面经,考Vue考的比较多~
  • GPT自动投简历,一周斩获三offer,开源分享!
  • 性能为王,微服务架构中的多级缓存设计
  • 分层设计:Service 层真的需要实现接口吗?
  • 手动部署jar包,太low!动态上传热部署真爽!
  • TypeScript很麻烦,不想使用!
  • AI 入门:AI 提示词如何入门?这篇就够了!(含提示词)
  • 那有啥大佬,都是草台班子
  • Spring Boot集成Https快速入门Demo
  • 我用这10招,能减少了80%的BUG
  • 浅谈几款XML文档解析工具以及优缺点
  • 全国知识图谱与语义计算大会和知识图谱国际联合会议联办(CCKS-IJCKG 2024)征稿通知
  • 多篇顶会一作却申博失败?斯坦福博士生亲述:AI领域太卷
  • [开源]一款基于Go语言开发的Web版运维资源管理系统,简版的CMDB
  • 再不面试来不及了!!
  • 移动、电信流量卡很香但我都注销了