2022年8月5日,首届江苏气象AI算法挑战赛历时3个月的初赛、复赛后在南京迎来总决赛。总决赛以现场答辩会的形式进行,最终,来自中国科学技术大学、厦门大学、南京大学、中国气象科学研究院、南京信息工程大学、华夏云象科技(重庆)有限公司等高校、企业、部门的三支联合团队摘得金银铜奖。日前阿里在天池发布了总决赛视频录屏回放,包括了六支进入总决赛队伍的精彩路演,各支队伍分别从数据前期处理,模型设计,预测结果等方面做了介绍,满满的干货。感兴趣的直接去看视频吧,文末为回放链接。
另外附上自己的全流程参赛代码(不含任何比赛数据集):
由于技术水平和时间有限,使用的是公众号bugsuse 气象汇开源的SmaAt-Unet
模型源代码,在此表示感谢。SmaAt-Unet
模型是由 Trebing 等提出的降水短临预报模型,模型基于原始UNet模型做了一定的修改,原始UNet模型效果较好,但是模型参数较多,对机器要求较高。
简化模型是解决过拟合问题的常规操作,但普通简化的一个可能的缺点是模型可能太简单而无法学习所需的任务。为了在不牺牲大量性能的情况下减少参数数量,许多新的架构中使用了深度可分离卷积 (DSC)。
DSC 将常规卷积操作分成两个独立的操作:深度卷积和点卷积。与非分离卷积相比,这导致更少的数学运算和更少的参数,对硬件要求降低同时也能达到复杂模型近似的效果。改进的模型同时将普通卷积替换为了注意力机制模块,以放大重要特征(针对此次比赛也就是强回波区,强降水,大风等重要特征)并抑制相应图像尺度上不重要的特征。这也是选择该模型参加此次强天气比赛的另一方面原因。
因为从气象来说雷达回波,降水,风速彼此之间有强相关,彼此之间互相影响,互相可以反应对方的信息、状态,所以将以上三种数据作为三种特征一起输入模型,让模型学习其中的关系(但是根据总决赛获奖团队的解决方案来看模型和针对评测指标设计专门的损失函数来说更重要)。因此,首先将雷达回波,降水数据,风速数据依据每次天气过程头20张一起读取,组成(60,480,560)的输入数据,然后再与该次天气过程的后20张目标数据进行对比,计算损失函数。
本次模型使用的损失函数为 MAE+MSE 混合损失函数。受限于GPU显存大小,设置batchsize = 10(此处需要显存31G,太高,如果显卡不行的话可以调小batchsize以及将输入图片改为(256,256)),num_epochs = 500(模型训练速度较慢,训练一轮需要140分钟,因为时间原因,在规定时间结束前只训练了137轮)。
该代码主要修改了数据加载部分、三种观测多源数据作为三个通道一起读入模型训练和对应生成预测结果部分代码。经过复赛第二阶段20多天线上测试最终成绩在20-25名之间。
本次比赛数据天气过程样本和数据本身分离,即天气过程样本信息单独以csv文件存储,csv中一行为一次天气过程。而对应的图片数据统一存储在对应的Train文件夹Precip、Radar、Wind目录下:
天气过程样本信息(Train.csv TestA.csv)和数据(Train)目录
因此分别读入csv和图片数据路径,导入训练数据
依次读入雷达回波,风速,降水数据,一起输入模型训练,代码中没有使用官方提供的读入图片和写图片代码,直接使用的Image.open
和 cv2.imwrite
:
在初赛提交的代码 project/code/main.ipynb
中上半部分为具体训练代码,依据官方代码规范放入相应的训练数据即可训练。
在初赛提交的代码 project/code/main.ipynb
中下半部分为具体预测代码,因为训练和预测原数据存放略有差异,因此两部分代码使用了不一样的dataset代码。放入数据后在Windows系统运行B榜测试集产出预测结果需要大概8分钟。
初赛B榜测试集产出预测结果
复赛阶段更接近于业务化运行场景也更加公平。参赛者将运行环境、代码、训练好的模型通过docker打包直接在主办方提供的机器上运行,数据由赛题方以数据流形式线上提供,每天自动运行选手部署的模型,跑出选手模型的预测结果,产出并公布每日成绩。
根据官方提供的docker镜像制作教程一步步操作即可,其中最关键的是编写Dockerfile文件内容,需写清楚需要的第三方包的具体版本,复赛docker有关代码都放在后面docker文件夹中。
复赛预测代码编写的关键是拿到赛题方以数据流形式线上提供的图片数据。赛题方很贴心的在“容器镜像”部分做了详细的讲解,并在论坛部分上传了复赛流评测框架demo示例。
最开始我也看了半天,不知道程序如何获取数据,后来看到示例代码中是将流评测图片写到了本地submit目录,直接按照在本地读取submit中的数据即可,不需要任何往外操作。
最后将示例代码函数post_process中数据路径修改为自己模型预测图片放置路径,即可将预测结果返回给赛题方。
以上是参与本次比赛的简单记录,第一次参加AI比赛,收获很多,因水平有限,文章中错误、不当之处还请谅解。
代码链接:https://pan.baidu.com/s/1fsOoiKfKCjKccJ7Nl5OlMg 提取码:kz6r
参考资料