600. HMS - Harmful Brain Activity Classification | hms-harmful-brain-activity-classification
首先,我们要向工作人员和分享了宝贵信息与知识的 Kaggle 选手表示衷心的感谢。我们非常荣幸地宣布,在本次比赛中获得金牌后,团队中有四位成员已获得 Kaggle 竞赛 Master 称号。
我们(日本团队 Occccn、ktokunaga)与爱尔兰团队(Aindriú、RehanAhmed、Rishubh Khurana)在合并截止日期前完成了合并。日本团队准备了一个使用频谱图像的二维模型,以及一个结合频谱图像和原始 EEG 数据的 2D‑1D 组合模型。爱尔兰团队准备了一个一维模型,同样还有一个 2D‑1D 组合模型。根据 Aindriú 的建议,我们采用几何平均来合并预测结果。
在本方案中,我们将仅关注日本团队的解决方案。
我们采用两阶段学习策略:首先在标签数小于 10 的数据上进行训练,随后在标签数 ≥10 的数据上进一步训练。第一轮训练后,我们将小于 10 标签数据的原始标签替换为模型的预测标签,作为第二轮训练的伪标签。使用伪标签确认了 LB 分数的提升。
正如在讨论区中提到的,我们推测下图中的训练数据集 3 对应于 train.csv 中标签数 ≥10 的数据。进一步检查发现,train.csv 中标签数 ≥10 的数据中 “Other” 标签的比例高于训练数据集 3。我们假设 train.csv 中 ≥10 标签的 “Other” 数据可能是由于经验不足的医生标注不准确。假设测试数据集 4 对应于 Kaggle 的测试数据集,则这些标注不准确的数据不会出现在测试集中。因此,使用 train.csv 中 ≥10 标签的数据进行训练会导致模型对 “Other” 标签的预期比例高于实际测试数据集中的比例。
因此,我们决定在第二阶段学习时不使用部分 ≥10 标签的 “Other” 数据。另一种方法是,依据 Aindriú 的建议,在合并集成模型的预测后,对 “Other” 预测值进行 1.1 次方的后处理,以提升 LB 分数。
# 后处理代码示例
pred[:,5] = pred[:,5]**1.1
pred = pred/pred.sum(axis=1,keepdims=True)
实验表明,使用 CWT(小波变换)生成的频谱图比使用 STFT 的更为有效。参照 Chris 的优秀 Notebook,我们采用差分并将变换方法改为 CWT。通过在频率尺度方向转换为 64 维图像,获得了 50 秒长的频谱图,尺寸为 (64, 10000, 4)。我们将前 20 秒、中间 10 秒和后 10 秒分别调整为 (64, 512, 4),然后堆叠形成 (768, 512, 1) 的图像。这与 Kaggle 提供的 10 分钟频谱图相连,形成 (512, 1024, 1) 的形状,随后复制为 (512, 1024, 3) 以便用于 EfficientNet 等图像模型。
LL Spec = ( CWT(Fp1 - F7) + CWT(F7 - T3) + CWT(T3 - T5) + CWT(T5 - O1) ) / 4
LP Spec = ( CWT(Fp1 - F3) + CWT(F3 - C3) + CWT(C3 - P3) + CWT(P3 - O1) ) / 4
RP Spec = ( CWT(Fp2 - F4) + CWT(F4 - C4) + CWT(C4 - P4) + CWT(P4 - O2) ) / 4
RL Spec = ( CWT(Fp2 - F8) + CWT(F8 - T4) + CWT(T4 - T6) + CWT(T6 - O2) ) / 4
最佳的单模型公开 LB 分数为 0.264(私密为 0.313),使用的是 mexh 小波、EfficientNet‑b2 模型以及上述伪标签。此外,为了集成,我们还创建了使用 cmor 小波、EfficientNet‑b0 等的模型。
我们创建了将频谱图图像与原始 EEG 结合的模型。基本思路是将原始 EEG 视为 2D 图像,因此使用 1D CNN 将原始 EEG 转换为 2D 图像。转换方法如下:
我们将该 1D CNN 特征与 CWT 频谱图(中间 10 秒)拼接,得到组合模型的特征。
最佳的单模型公开 LB 分数为 0.266(私密为 0.331),使用的是 mexh 小波、cmor 小波、EfficientNet‑b0 模型以及上述伪标签。为了集成,我们还创建了各种模型(EfficientNet‑b0/b2、仅使用 mexh 等)。
架构概览
