返回列表

6th place solution

450. SETI Breakthrough Listen - E.T. Signal Search | seti-breakthrough-listen

开始: 2021-05-10 结束: 2021-08-18 物理与天文 数据算法赛
第6名方案

第6名方案

作者:James Howard
发布时间:2021-08-19

感谢主办方,这次比赛非常有趣!

我明天就要结婚了,所以我甚至不确定在重置后是否还会重新参加比赛。不过,在我去参加单身派对前的上周末,我想着先训练一些模型看看效果如何。结果发现它们表现得相当不错!

我的一个模型承担了几乎所有的重任,仅凭它就能让我排在第8位,所以我将重点介绍这个模型。

这是一个 EfficientNet-B7,我以 1024 * 1024 的分辨率使用混合精度进行训练(并在 1280 * 1280 分辨率下进行测试)。

我确信我的模型之所以如此有效,是因为我觉得需要构建输入数据,以便模型能够识别出现的“针”(信号)是处于过渡期(在“on”或“off”目标之间)还是在一个片段“内部”——这两者有着根本不同的意义。此外,你不能把所有的“on”放在一起,把所有的“off”放在一起,因为那样数据的时间就不对齐了,像这里红线这样的持续存在的信号……

SETI signal

……会到处跳动,无法在整个过程中被“追踪”。

因此,我使用了一个非常简单的解决方案,即添加一个输入通道,根据该时间段是“on”还是“off”将其设为 1 或 0,见倒数第二行代码:

x = np.load(npy_path).astype(np.float32)
time, spec = x.shape[1:]
_x = np.zeros((spec, time * 6, 2))
_x[:, :, 0] = np.vstack(x).transpose()
for i_channel in range(len(x)):
    _x[:, i_channel*time:(i_channel+1)*time, 1] = 1 if (i_channel % 2 == 1) else 0
x = _x

我认为这将允许第一层中的卷积核出现“过渡性”针检测器和“非过渡性”针检测器,这显然具有巨大的相关性。

这也意味着如果我进行激进的 RandomResizedCropping(我确实这么做了),模型仍然可以“知道”它是 On 还是 Off 信号,而不管它在图像中的位置如何。

其他要点:

  • 和其他人一样,Mixup 非常重要
  • HFlip(水平翻转),VFlip(垂直翻转)。
  • AdamW,OneCycle (5e-5 -> 1e-8),梯度裁剪

我没有真正尝试其他任何东西,因为我只有时间训练 3 个不同的模型!甚至没有时间测试 TTA;我的最终模型在比赛结束前几个小时才完成,而且我的提交次数用完了。这里面有个教训……

同比赛其他方案