第十名解决方案:好的输入图像可以生成好的单一模型(开源单一模型,LB233 PB287)
作者: gezi | 排名: 第10名 | 发布日期: 2024-04-09
以下是快速分享,后续可能会修改。
1. 将更多信息作为图像输入可以获得更好的单一模型,LB 为 0.23,PB 为 0.29。
关键技巧
- 使用 19 个原始输入(不同特征)的 'banana' 数据,而不是 4 个(LL、LP、RL、RP),感谢 Chris 的精彩分享。
- 将中间 10 秒的部分添加到图像中(思路来源于 https://www.kaggle.com/code/rafaelzimmermann1/no-ensemble-new-spectrograms-label-refine)。
- 将原始 EEG 数据作为图像的一部分加入。
- 使用 Adan 优化器。
- 使用 efficientvit_b2 和 mixnet_xl 作为 timm 主干网络。efficientvit 明显优于 efficientnet,CV 从 0.237 提升到 0.23。
- 使用 torchaudio 进行 STFT 和梅尔提取,但我最好的单一模型仍然使用 scipy.spectrogram,效果更好,原因不明。
- 对每个 EEG ID 使用精确的 EEG 偏移进行训练(优先随机 EEG 子 ID 与高票数)。
- 对所有 EEG 子 ID 进行评估,并对每个 EEG_ID 进行归一化(每个 EEG_ID 总权重为 1)。
我的 EEG 子 ID 处理策略比 Chris 的更复杂,但现在确认该策略效果更差,您可以参考 https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/492631。
- 使用投票数 ≥10 的数据进行训练,权重为 60。
阶段 1 训练即可,阶段 2 仅使用投票数 ≥10 的数据似乎能略微提升 LB 和 PB,因为它降低了癫痫预测率,但没有足够时间验证(可能损伤 CV),且未用于最终集成。
由于投票数 ≥10 和 <10 的数据分布不同,我为这两类数据集分别使用了不同的线性头,这一做法在 CV、LB 和 PB 上都有小幅提升。例如,单个 efficientvit_b1 模型的 PB 从 0.2967 提升至 0.29525。
- 最终使用 20 个模型进行集成,实际上我的模型多样性不高,集成仅将最佳单一模型的 PB 从 2896 提升至 2866。我加入了一个仅使用 Kaggle 谱图的弱模型。
有趣的是,与简单平均相比,使用 Optuna 生成模型权重只能略微提升 CV(如从 0.206 到 0.2058),但在 LB 和 PB 上加权结果更好。
- 推理笔记本:5 折 + 1 完整数据的单一模型,LB 0.2337,PB 0.287。
查看 Notebook