返回列表

20th place solution (how I spent lots of time on things that didn't work)

524. G2Net Detecting Continuous Gravitational Waves | g2net-detecting-continuous-gravitational-waves

开始: 2022-10-04 结束: 2023-01-03 物理与天文 数据算法赛
第20名方案(我如何在无效的事情上花费了大量时间)

第20名方案(我如何在无效的事情上花费了大量时间)

作者:Jonathan McKinney | 比赛排名:第20名

感谢组织者和这场有趣的基于物理的竞赛。

我对 @junkoda@shunrcn 发布的解决方案(目前为止)的创造力(和简洁性)印象深刻,我相信后面还会有更多精彩内容。

同样感谢 Kaggle 社区成为如此伟大的竞争对手。

解决方案:

训练

  • 使用 pyfstat 生成 2 万个带有基于测试数据间隙的信号。
  • 真实数据与假数据的比例与测试集中相同(假数据的标准差大致恒定)。
  • 所有真实类型的数据均通过从测试数据中采样生成(例如开始时间、持续时间、随时间变化的标准差)。
  • 将高斯随机复数噪声添加到复数信号中,并将直接实数噪声添加到幅度中。
  • 忽略 h0,仅根据信号与噪声的总功率以归一化方式将信号添加到噪声中。信号功率从 360x360 下肉眼勉强可见降低到 10 倍以下。
  • 约 20 万个训练样本,Adam 优化器,余弦调度器,batch size = 32*4。

训练与测试

  • 将时间数据填充至 5760,将数据进行分箱以使其均匀分布。
  • 通过从测试数据中移除所有线性或其他斑点噪声来清洗数据(非常有效且快速)。
  • 用周围的噪声水平填充所有数据的间隙。
  • 计算绝对值以及 H1 乘以 L1 的复共轭(相当于 FFT 空间中的互校正)。
  • 通过 np.mean(类似于 avgpool)降维至 360x360 以帮助降低噪声。
  • 归一化。

模型

  • tf_efficientnet_b5_ns,20-30 轮,5 折交叉验证。
  • 无数据增强。
  • Mixup(这是避免过拟合所必需的,其他人也是这样看的吗?)
  • 对各种种子进行 TTA(测试时增强)以填充间隙之间的噪声(担心模型会对噪声簇过拟合)。
  • 融合了最佳单模型、该最佳模型的 15 个 5 折 TTA 以及大内核模型。
  • 令人欣慰的是,CV 分数与公开分数非常吻合。

我错误地认为没有帮助的事情

  • 按时间点归一化。我太快地否定了它,认为信号的强度会变化,这会让事情变得更难。我那样想完全错了。感谢 @ren4yu

失败或没有帮助的事情:

  • 将其视为功率分数的回归问题(没有帮助)。
  • replknet 大内核模型(没有帮助)。
  • 更大的图像尺寸,360x720 和 360x1440(没有帮助)。
  • 去噪 VAE,给定噪声+信号,以信号为目标(完全无法学习,即使在低分辨率下)。
  • Stable Diffusion(他们训练的 VAE 在我们的噪声水平下完全失效)。
  • resnet18(对我来说完全不起作用)。
  • mixnet_m(表现还可以)。
  • mixnet_l(表现还可以)。
  • convmixer_768_32(表现还可以,但很慢)。
  • vit_base_patch16_224 和 vit_relpos_small_patch16_224(本以为 ViT 会识别补丁序列,但对我来说完全失败了,可能是使用上有 bug)。
  • large_kernel (链接) 但去掉了不需要的 avgpool。尝试了各种内核大小,没什么真正有帮助。模型还行,但比 efficientnet 弱。
  • 分别对假数据和真实数据进行训练(结果稍微差一点)。
  • 添加噪声作为增强(没有帮助)。
  • 类似 BH-BH 案例和其他比赛中使用的 BiLSTM + Conv 方法(isft -> sft 并不完美,即使匹配 pyfstat sft,肉眼可见的信号也很容易在 isft 过程中丢失,因此时间序列方法可能会失败,所以放弃了)。
  • 正如 @vslaykovsky 所说,下载真实数据以查找与真实测试数据匹配的片段。我
同比赛其他方案