Team BNR:第12名解决方案——探索各类定制架构
Team BNR:第12名解决方案——探索各类定制架构
首先,感谢 Kaggle 和 HBS 团队举办如此有趣的比赛,以及我的队友 @benbla、@romainhardy。正是大家的共同努力让我们获得了金牌。祝 @romainhardy 在多次险些单人金牌后成功晋升为 Master。
我们的解决方案主要包括 五种不同的模态,我会尽量详细地介绍每一个。每一个模型都采用了两阶段的自定义流程(使用伪标签和噪声标签)。基于信号的数据总是很有趣,因为可以尝试 1D、2D 甚至 3D 网络 :)
1. 预处理 / 数据划分
我们的划分在整场比赛中保持一致,使用基于 patient_id 和标签的 5 折 GroupStratifiedKFold。
我们的预处理流程分为以下几个部分:
- 1D 模型:我们使用了 Banana montage 的差分计算 → 其它 montage(如横向或平均 montage)对我们没有效果。同样,我们也无法有效利用平均 EEG 信号序列和 ECG 数据。
- 2D 模型:我们这里有两种不同方法。对于 Romain 的频谱图模型,我们选择了 4 种公开的 montage。另外,为每个 Banana 配对输出频谱图给我们带来了不错的提升(LB/CV 0.03)。
- 带通滤波器:下限在 0.5 至 1 之间,上限在 20 至 35 之间。
- 训练划分:我们在比赛开始后的第一个月就已经确定了训练划分,也就是说我们一直都在使用阶段 2(≥10 票)进行训练和验证。后来,在预训练阶段我们使用了噪声标签。
2. 数据增强 / 测试时增强(TTA)
数据增强在 CV/LB 上给了我们近 0.1 的提升。我们对所有模型常用的增强包括:
- MixUp
- Cutmix
- 随机裁剪(20/30/40 秒)
- 随机翻转(通道层)
- 随机符号翻转(通道层)
- 随机遮挡(通道层)
使用偏移级别的 TTA 我们获得了额外的 0.01 提升。我们不再对中间 N 个样本生成预测,而是将序列的起始点改为(±)偏移,范围从 -2400 到 +2400。
3. 模型架构
3.1 1D 可学习前端 + EfficientNet
- 使用 1D 卷积作为特征提取器
- 起始层类似于我发布的 EEGNet 架构(链接)
- 使用 EfficientNet 作为主干网络
- 最佳单模型得分:CV 0.246 | LB 0.25
3.2 2D 可学习前端 + EfficientNet
- 使用 2D 卷积作为特征提取器,结果这是我们最强大的模型。
- 使用多个并行的 conv2D 块并创建 3 通道输入。
- 使用 EfficientNet B0 / v2s 作为主干网络。
- 最佳单模型得分:0.235 CV | LB 0.24x
3.3 基于 1D ResNet 的 EEGNet + Transformer 块
- 与我在比赛初期共享的 EEGNet 基线相似。
- 在 4 个 ResNet 块之后,时间维度变短时,我们在输出上应用基于 Transformer 的残差网络。
- 使用带 GRU 的线性注意力 Transformer。
- 最佳单模型得分:0.269 CV | LB 0.26
3.4 CWT + EfficientNet
- 使用可训练的连续小波变换(CWT)作为特征提取器。
- 使用基于 EfficientNet 的模型作为主干网络。
- 最佳单模型得分:0.26 CV | LB 0.26
3.5 基于频谱图的模型
- 如上所述,我们使用了两个不同版本的频谱图。最重要的主干网络是不同版本的 EfficientNet 以及 SwinTransformer。
- 公开 LB 上频谱图的得分约为 0.29/0.30。但我们在比赛初期就达到了这个瓶颈,随后无法显著提升表现。也许我们的瓶颈在于没有增大图像尺寸,导致图像中信息不足。添加 Kaggle 频谱图、其他分辨率或其他时间段的切片并未提升模型性能。
- 我们尝试将原始 EEG 信号作为 3 通道 RGB 图像使用,但同样表现不佳。我们还尝试切分时间维度,但这也没有改善模型。
4. 集成与伪标签
我们最终的集成包含这些模型,得分约为 0.215 CV 和 0.23 LB。我们的获奖模型使用全数据训练的模型,使用 3 个不同的随机种子,集成权重与 5 折得分保持一致。
- 我们尝试了不同的堆叠技术,也尝试使用人工神经网络,但效果不佳。最终我们使用了 爬山法(hill climbing):
- 我们希望避免在训练数据上过度拟合。
- 我们可以快速识别模型之间的多样性,而不需要投入大量时间。
- 每次爬山法在 CV 上的提升都会带来排行榜的提升。
- 我们能够根据 5 折得分推导出全数据训练模型的权重。
- 由于特定的度量标准,集成方法受到限制。爬山法是一种简单而有效的方法,能够持续优化我们的集成。
伪标签步骤
- 使用当前的最高集成对噪声数据进行伪标签。
- 训练分两阶段:以 50% 的概率使用伪标签代替噪声标签。
还要感谢 @cdeotte 在比赛中的大量分享,这鼓励我在比赛中发布多个基线。并且感谢我的队友们,尽管有时区差异,我们仍通过电话保持联系,共同取得了很大进展。