华为云杯-粤港澳大湾区强降水临近预测比赛小结

比赛背景

  1. 根据近年的雷达回波格点数据共同建立的标准雷达数据集为基础划分了训练集和测试集,希望参赛者综合运用计算机视觉、机器学习、深度学习等技术,实现根据过去2个小时内的雷达回波图像数据预测未来2小时的雷达回波图像变化,并提交未来30分钟、60分钟、90分钟和120分钟的雷达回波 图像数据。
  2. 团队rank:初赛:25 ,因前几名有开小号被封号顺位进决赛
    比赛官网地址
    竞赛主页

赛题分析

  1. 本次比赛跟18年的全球气象AI挑战赛性质类似,都是预测未来的雷达回波图像,但本次比赛挑战时间更长的序列图,难度更大,且从多次提交的反馈情况来看计算评分的hss函数给强回波和误分类的情况权重非常高,且本次比赛的从计算方式的角度较之18年的比赛更像一个多类语义分割比赛,而非传统的回归预测。
  2. 18年挑战赛top解决方案分析:首先18年挑战赛的数据集十分劣质,样本极度不平衡,大多数样本是现实中无降水的过程,所以这样直接导致很多选手直接套用施行健的几个模型训练,评分很低(比赛主页交流区中可以看到)而top5的解决方案中有两个是基于光流法,这是因为预测时效很短,而光流法在0.5h的效果并不一定比DL模型差,所以KNN+光流也能取得很好的效果,但不适用于本次赛题(18年的top5佑佑先锋本次比赛得分很低),而top1的解决方案很有参考意义分类型训练(但本人尝试后效果不好下文论述),以及multi-head-attention的ConvLSTM+GDL的第四名。

比赛历程

  • 基于Unet的baseline
    参考追风比赛的top解决方案unet可能会在比赛中效果不错,由于其简单轻量所以选择它作为baseline模型,这时我还没意识到语义分割的问题,仍然当做回归任务来处理,数据集取样采用官方的建议,使用前2 h间隔12 min取10张图作为input,预测未来2 h的4张图,loss函数采用MSE+MAE,baseline的得分为0.15左右,之后采用BMSE+BMAE进行微调调到0.17左右,接着我使用带SE-Attention的Unet看看能否有所提高,但诡异的是评分反而下降。

  • 多模型尝试
    (1)接着我们对不同模型进行了尝试,首先我本人复现了predrnn++模型,但于tf版本的官方开源有所差别,我采用了施行健17年轨迹GRU里的encoder-decoder结构(官方tf和torch的开源都没法在不同层间进行上下采样),使用三层的ED结构,分别用两套卷积层对M state和Hidden state进行上下采样节约计算开销,并且我混用了ST-LSTM和casualLSTM底层用了ST-LSTM+GHU,并分别尝试了采样层加激活函数和不加激活函数两种版本,但诡异的是不加激活函数的模型分数可以到0.18而加了激活函数的只有0.13这个我始终没有搞懂为什么。

    (2)而队友复现predrnn+selfattention也未达到0.18,之后队友魔改了MIM模型(官方版本)我本人尝试了带scheduled sampling版本的和不带的差别不大,原因可能是decoder部分timestep只有4,如果输出更长也许效果会很明显,这里的输出也有两种版本由于时间有限未尝试,就是decoder部分每一层的Hidden进行stack操作和直接对最后一层直接1*1卷积两种方式,据说用3D卷积效果会更好?我未进行尝试。MIM的分在0.17左右比predrnn++效果要差一点,模型均用BMSE+BMAE损失函数,之后我又尝试了ConvGRU+BMSE+GDL分数也在0.178左右比MIM要好一点。
    (3)模型集成后效果反而很差,这个我当初十分困惑,我将unet+mim+predrnn++简单的进行平均融合,分数反而更低,可能的原因如下,模型之间的差异很小(但训练的过程中每个模型的训练集和验证集都是随机划分的,应该也是有差异的)这种bagging的方式效果不明显,此外评分方式只计算区间(分类)小的浮动对评分计算方式来说影响不大,其只关心分类正确而非样本的间的距离,如果采用单个最优模型k-flod验证是否会更好呢?但这样计算开销会非常大。

  • 数据清洗与特征工程
    (1)与此同时我们进行了数据eda和清洗工作,发现样本序列均值大概在24dbz左右呈现正态分布,比起18年的数据集要均匀很多,但样本中有许多全黑的缺测图和不同仰角混用拼图,队友采用计算滑动序列标准差的方式选择大于3西格玛的样本判定为有问题的图片来填充数据集,我本人直接采用剔除明显含有劣质图片的样本来训练(大概2000个左右)***但效果不显著***比赛后才发现测试集中的忘处理了,队友在后续提交的作品中也进行了填充也有小幅度的分数提高,我本人尝试用rover光流对提交作品进行填充,但算法有点问题最后告败。在eda的时候我尝试进行样本的特征构造如均值,方差,回波强度加强与减弱幅度等,用lightgbm预测测试集的样本分布发现样本分布与训练集分布大体相似。
    (2)之后参考18年冠军的分类型训练,我先用kmean对样本进行聚类,但分出来的很诡异,索性直接分成弱和强的两个模型用单模最高的predrnn++去训练,结果直接爆炸,当时也困惑了很久,我猜原因是,样本数量太少只有两万个,我按24dbz均值去分正好对半,但这样很可能分分钟过拟合,导致预测的时候gg?但这只是猜测具体原因仍不太清楚。

  • 多类语义分割
    接着尝试了predrnn+unet对任务进行多类语义分割,使用魔改后带权重的交叉熵损失函数一度把分拉倒top,事实证明这确实是个语义分割比赛,接着我尝试了multi-label的dice损失函数和iou损失函数来解决样本类别不均匀,但又让人疑惑的是分数又下降了,真是百思不得其解,我试过单独训练,fine-tune效果都下降但降的不是很多,然后我将unet接到convgru上训练后发现预测图全是一小块一小块的马赛克,队友将unet接到MIM上后也出现了同样的情况,这个到现在也不清楚是什么情况。后来我又尝试了先ranger后sgd训练效果反而下降,使用sgd+余弦退火效果也不明显。

比赛总结和讨论

(1)本次比赛主要还是以多分类的语义分割为主,单模做回归预测估计通过调参最高能到0.20。
(2)经过思考后,我发现可能在切割样本的时候还可以有所提升,官方的建议是一个40张图的序列作为一个样本前20预测后20中的4张,但通过数据eda发现整个训练集中的过程大多是平稳的,即很少出现强烈的回波生消,这样我们就不需要更多的信息(非平稳)(使用全部前20张的信息)来预测,可能只需要5张连续的图(平稳)来作为input,这样一个样本通过滑动窗可以切出4个样本,可以大幅度的扩充数据集避免过拟合,但本人未经过尝试有些遗憾,此外这也可能解释了MIM效果不好的原因,一方面decoder输出短导致空间state的效果下降,另一方面的可能是针对非平稳过程的MIM在处理平稳的回波时效果不显著,反而增加了模型的复杂度降低了泛化能力。当然这都是我猜的,没办法从公式上论证。
(3)可以尝试更多的语义分割比赛的trick和模型,比如加入focal loss使用predrnn+deeplabv3或者其他sota模型,在训练中使用snapshot ensemble策略也许能提高一些,但我很困惑前面超过0.25分的不知道用了什么方法涨点的,简单的调参感觉很难冲到这么高,希望比赛结束后好好学习一下。
(4)最后时间限制未尝试Transformer模型,如果时间容许Transformer应该会有不错的表现

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章