600. HMS - Harmful Brain Activity Classification | hms-harmful-brain-activity-classification
首先要感谢Kaggle和哈佛医学院举办本次比赛,并感谢CCEMRC提供如此有趣的数据集。我还要感谢我们的团队成员,与优秀成员一起开发是一次非常棒的经历。
我们共集成了来自4位成员的8个1D和2D模型。在5939条 vote_sum>=10 的数据上,采用加权平均的交叉验证为 0.1983。最终集成时,我们使用单层 nn.Linear,并在全部数据上对模型进行过拟合训练。
参照 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.22 与 0.28。
随着训练轮数(epoch)提升,LB 持续改善至约 3000 轮,这表明一种度量学习方法可能有效,例如为与训练样本相似的样本赋予相同标签。由于该想法在比赛最后阶段才提出,我们没有时间尝试。
我构建了四个不同的模型。与 Yuji 的流程不同,这些模型仅在 vote>7 的数据上进行训练。EEG 在转换为频谱图之前会先使用 butter_bandpass_filter(min=0.5, max=30) 进行滤波。




我使用了 tiny_vit_21m_384、caformer_s18、convnext_large 作为 2D 主干网络。
最初,我的方案是 1D 与 2D 模型的集成。但在团队合并后,意识到队友已经拥有强大的 2D 模型,我于是将重点转向 1D 模型(即直接处理原始 EEG 信号)。
我们的 1D 建模思路有两点:
1D 模型的详细方案见:https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492388
我们在最终提交的 1D 模型的交叉验证分数如下。交叉验证使用 num_votes > 8 的样本计算。
v5_eeg_24ep_cutmix 0.2477
我开发了一个 1D CNN 模型,主干网络大量参考了 @tatamikenn 的优秀实现。
采用 1D 版本的 MobileNetV2 并加入通道混合器(channel mixer)。

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