返回列表

4th place solution

600. HMS - Harmful Brain Activity Classification | hms-harmful-brain-activity-classification

开始: 2024-01-09 结束: 2024-04-08 临床决策支持 数据算法赛

摘要

首先要感谢Kaggle和哈佛医学院举办本次比赛,并感谢CCEMRC提供如此有趣的数据集。我还要感谢我们的团队成员,与优秀成员一起开发是一次非常棒的经历。

我们共集成了来自4位成员的8个1D和2D模型。在5939条 vote_sum>=10 的数据上,采用加权平均的交叉验证为 0.1983。最终集成时,我们使用单层 nn.Linear,并在全部数据上对模型进行过拟合训练。

代码

Yuji

2D模型

参照 Chris 的方法(参考:https://www.kaggle.com/code/cdeotte/how-to-make-spectrogram-from-eeg),我们从 EEG 生成频谱图,并将其作为 Swin Transformer V2 Large 的输入。先在全部数据上进行预训练,然后在干净数据(vote≥10)上进行微调。通过按时间顺序查看同一个 eeg_id 内的数据,并在标签切换时将它们视为不同样本,微调训练数据从 5939 扩展到 6366。通过标签和频谱图制作方式等一系列细微改进,单模型的交叉验证达到了 0.2318。(交叉验证针对 5939 条样本计算,若同一 eeg_id 有多条样本,则取第一条用于验证)

为增强多样性,我们创建了四个模型,频谱图生成参数不同,秒数分别为 10/30/40/50,以及是否与 Kaggle 频谱图拼接等。四个模型的集成交叉验证为 0.2135

集成

在比赛中期,我使用 Nelder‑Mead 方法进行集成,随后注意到权重的精度更高且不进行四舍五入时 LB 始终会提升。于是我决定在训练数据上稍微过拟合一下,训练了一个包含 360 个参数的全连接层,使用全部数据作为训练集和验证集(代码:nn.Linear(48, 6),48 = 8 个模型 × 6 个预测)。

探测结果显示,测试集中 Seizure、LRDA、GRDA 的比例高于干净的训练集,因此在训练前对这些类别进行上采样提升了 LB。使用 nn.Linear 的提交在公开榜单为 0.21,私有榜单为 0.27,而使用 Nelder‑Mead 的提交分别为 0.220.28

随着训练轮数(epoch)提升,LB 持续改善至约 3000 轮,这表明一种度量学习方法可能有效,例如为与训练样本相似的样本赋予相同标签。由于该想法在比赛最后阶段才提出,我们没有时间尝试。

tattaka

我构建了四个不同的模型。与 Yuji 的流程不同,这些模型仅在 vote>7 的数据上进行训练。EEG 在转换为频谱图之前会先使用 butter_bandpass_filter(min=0.5, max=30) 进行滤波。

模型

模型 a 架构

模型 b 架构

模型 c 架构

模型 d 架构

我使用了 tiny_vit_21m_384caformer_s18convnext_large 作为 2D 主干网络。

训练

  • 50 个 epoch
  • 学习率 1e‑4、5e‑4 或 2e‑4,逐步降至 0,使用 cosine_schedule
    • 在前 1/50 步进行 warmup
  • EMA (decay=0.998)
  • drop_path_rate = 0.2 或 0.3
  • 数据增强:
    • EEG 的 mixup
      • p=0.5, alpha=0.2
    • XYMasking (p = 0.5, num_masks_x = 8, num_masks_y = 8, mask_x_length = 1/16, mask_y_length = 1/16)
      • 在拼接 Kaggle 频谱图和 EEG 频谱图之前分别应用
    • EEG 与 Kaggle 频谱图的水平翻转
      • 在拼接前分别应用
    • EEG 与 Kaggle 频谱图的打乱
      • “FpX”、 “F”、 “T”、 “T”、 “O” 打乱而不破坏顺序。
      • 对 model_b 与 model_d 进行翻转
    • EEG 的随机中心裁剪
      • 推理时使用 EEG 的中间 30 或 40 秒,训练时使用随机 ±10 秒的裁剪

bilzard

概述

最初,我的方案是 1D 与 2D 模型的集成。但在团队合并后,意识到队友已经拥有强大的 2D 模型,我于是将重点转向 1D 模型(即直接处理原始 EEG 信号)。

基本思路

我们的 1D 建模思路有两点:

  1. 左右对称建模:在模型中保持对称,以便更好地检测侧向性(Laterality)。
  2. 通道质量因子(CQF):用于评估 EEG 通道的质量,识别质量不佳的通道。

1D 模型的详细方案见:https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492388

结果

我们在最终提交的 1D 模型的交叉验证分数如下。交叉验证使用 num_votes > 8 的样本计算。

v5_eeg_24ep_cutmix 0.2477

yu4u

我开发了一个 1D CNN 模型,主干网络大量参考了 @tatamikenn 的优秀实现。

预处理

  • 从原始 EEG 信号中提取 LL、RL、LP、RP 四个特征(4×4×10000)。
  • 应用带通滤波(0.5 Hz‑20 Hz)。
  • 随机裁剪 9600 个样本并下采样至 1/5(1920)。

模型

采用 1D 版本的 MobileNetV2 并加入通道混合器(channel mixer)。

1D CNN 结构

LL/RL/LP/RP 的特征先分别经过 1D 逆向残差块处理,然后通过通道混合器在四个方向之间交换信息,通道混合器使用卷积实现。

训练

  • 两阶段训练:前 32 个 epoch 使用全部数据,后 32 个 epoch 仅使用 vote_num > 7 的数据。
  • 优化器:AdamW,学习率 2e‑3 → 0,权重衰减 1e‑5,batch_size=96。
  • 数据增强:cutout、mixup(p=0.5,alpha=1.0),打乱 LL/RL/LP/RP,时间轴翻转。
同比赛其他方案