我在本次比赛中采用三阶段训练方式。首先,使用2021年至2024年的全部数据进行训练。其次,仅使用2024年的数据或继续使用2021至2024年的数据,针对本次比赛的目标进行微调。最后,在第二阶段的数据基础上,加入2024年的未标记数据继续训练。第三阶段的训练显著提升了模型在公开排行榜(Public LB)和私有排行榜(Private LB)上的表现。
使用 tf_efficientnetv2_b0 和 tf_efficientnetv2_b3(来自 timm 库),输入为单通道频谱图(single‑channel spectrogram)。
我对未标记数据生成了伪标签,并将它们以 50% 的概率加入到已标记数据中进行训练。该方法灵感来源于 2023 年第七名方案,并参考了 GitHub 项目。实现细节如下:
def __add_noise(self, tgt_wav, add_wav, db):
tgt_rms = np.sqrt(np.mean(np.square(tgt_wav), axis=-1))
add_rms = np.sqrt(np.mean(np.square(add_wav), axis=-1))
noise_rms = tgt_rms / (10 ** (float(db) / 20))
new_wav = tgt_wav + add_wav * (noise_rms / (add_rms + 1e-6))
new_wav = np.clip(new_wav, np.min(new_wav) * 2, np.max(new_wav) * 2)
return new_wav
该策略在排行榜上提升了约 0.04 分。