454. G2Net Gravitational Wave Detection | g2net-gravitational-wave-detection
我要感谢我的队友 @sakshamaggarwal、@darkravager、@callmeb 和 @mrigendraagrawal,以及组织者和 Kaggle 社区,感谢我们在这次比赛中获得的精彩体验。
感谢 @callmeb
train0 = train[train.target==0].reset_index(drop=True)
DET = None
for idx, (id, target, path) in tqdm(train0.iterrows(), total=len(train0)):
ts = np.load(path)
ts = ts_window(ts)
ts = ts_whiten(ts)
ts = torch.tensor(ts)
fs = torch.fft.fft(ts)
if DET == None:
DET = fs.abs()
else:
DET = (fs.abs() + idx * DET) / (idx+1)
WINDOW=signal.tukey(4096, 1/4)[None,:]
def ts_window(ts):
return ts * WINDOW
def ts_whiten(ts, lf=24, hf=364, order=4):
sos = signal.butter(order, [lf, hf], btype="bandpass", output="sos", fs=2048)
normalization = np.sqrt((hf - lf) / (2048 / 2))
return signal.sosfiltfilt(sos, ts) / normalization
ts = ts_window(ts)
ts = ts_whiten(ts)
ts = torch.fft.ifft(fs).real
fs = fs / DET
ts = torch.fft.ifft(fs).real
(你也可以在这里重用窗口)
使用了分层 5 折训练策略。我们有一些想法,这些想法对其原生方案有一点提升。具体方法如下:
注意:并行 关键字表示一种修改后的架构,我们在其中同时训练两个 CNN 骨干网络,并将它们的 GAP(全局平均池化)输出拼接,随后接两个全连接层。
我们训练了不同复杂度的骨干网络,这些网络可能使用特定方法或方法的组合。模型在图像尺寸和频率范围上也有所不同。