基于图像超分辨率的降水预测实现

转眼间离硕士毕业已经有了一个多月了,真的是只有当自己随口喊出一声康哥,无人回应的时候,才发觉自己已经毕业了。

三年前自己心血来潮写了本科毕设的帖子,不成想广受欢迎,这也给了我继续写硕士毕设的动力。这儿先说点欠打的话哈,很多人说觉得硕士毕设写起来好难,但私认为真心不难吧,我是根据平常做的项目来写的,实验数据确实早就有了。后面我就是花了一个月左右的时间就写好了吧,时间没记错就是3月初我的初稿就搞定了,后面除了降重也没改动什么。所以,也是很轻松的度过了最后的时光。我的论文成绩是4优1良吧,没有拿优毕确实有点小遗憾哈哈哈哈哈哈哈。不过最后也拿了个优秀毕业生,倒也算是个满意的结尾吧!!


回归正题,我将会从以下几个方面简要介绍下我的文章。

1. 前言

2. 解决问题

3. 模型实现方案

4. 实验部分展示

5. 小结

1. 前言

气象预报是指在某一段时间内对气候气象变化做出的估计和记录,而气象数据是以矩阵数值形式输出的信息。矩阵内某一块区域的坐标点分布越密集,表明该区域气象预报的精细化程度越高,气象精细化预报数据则可以提供某一区域内更丰富的气象预测信息。本论文设计的精细化预报主要是研究在空间维度上的超分辨率预报,是将低分辨率(低精度)的气象观测数据在空间维度上降尺度生成高分辨率(高精度)的气象预测信息,期望将气象预报精度从省市(低精度)级别提升到乡镇(高精度)级别。效果如下图所示:

 

其中左图是LR低分辨率图片,右图是HR高分辨率图片。

在气象领域内实现精细化预报采用的方法是降尺度技术。传统的降尺度技术是采用插值算法或者统计模型来实现的,生成图像上每个像素点的值是构建其周围几个像素点的距离关系,或者是从特定分布的低分辨率和高分辨率降水数据中学习计算得到。但是,基于此类方法映射成的高分辨率图像不能很好地保留原始图像的细节。同时,发现气象观测数据是一种空间结构性信息,容易受到不同气象要素的影响。针对气象空间精细化预报领域存在的一些问题,本文展开深入研究。

2. 解决问题

2.1 制作气象预测领域内的标准数据集

本文主要研究降水领域内的精细化预测,所以制作了全国8个区域内的降水数据集。另外,在做降水预测任务时,本文还考虑到了其他气象要素对降水预测的影响,使用了卷积神经网络的方法来融合各种气象要素,如温度、湿度、地形,从而得到标准的气象数据集。融合过程如下图所示:

这也是本文的一个创新点,制作的8个区域内的标准数据集符合相应地区内的降水分布,有利于提高降尺度模型的性能表现。

2.2 消除了生成图片内可能出现的棋盘状条纹噪音

目前常见的降尺度算法内主要包括两个结构:特征提取层和上采样层,本文发现:上采样层内采用不同的上采样操作可能会在生成的高分辨率图片内引入一系列噪音如棋盘状条纹。做了多组对比实验后,本文确定了合适的上采样操作方法,最终消除了生成图片内出现的噪音。大概如下图所示:

 其中左图是包含棋盘状条纹图片,右图是不包含棋盘状条纹正常图片

2.3 提出了空间降尺度模型算法

本文提出了两种空间降尺度模型,第一种RDBLap(Residual Dense Block Laplacian Pyramid Network)模型在拉普拉斯网络中融入了RDN残差学习机制,有效地提高了模型特征提取的表现。模型结构图如下所示:

关于此模型结构的详细信息可以参考该文章

另外,本文受到了GAN(Generative Adversarial Nets)对抗神经网络的启发,提出了PreGAN深度学习超分辨率的时间降尺度模型。该算法核心思想是分别训练一个生成器和鉴别器网络,目的是使鉴别网络难以把生成器生成的高分辨率预测图片和标签图片区分开来,最终可以修复更多高纹理处的局部图像。模型结构图如下所示:

关于此模型结构的详细信息可以参考该文章

以上提出的两种空间降尺度模型算法也是本文的另一创新点。

3. 模型实现方案

在RDBLap模型的基础上,本文继续使用PreGAN空间降尺度模型来修复更多高纹理处的局部图像。而PreGAN模型主要包括两个结构:generator生成器和discriminator鉴别器网络,该模型的核心思想是使得生成器生成的高分辨率图片和真实高分辨率图片难以被鉴别器区分开来。下面详细介绍生成器和鉴别器这两个内部结构。

3.1 Generator生成器结构

在该结构中,将给定的低分辨率输入图像映射生成特定尺寸大小的高分辨率图像 。生成器具有2个5x5 Conv(Convolution)层和5个连续的残差密集块RRDB(Residual in Residual Dense Block)结构。注意,RRDB残差密集块能够有效地避免模型过深导致出现的性能退化问题。同时,RRDB残差块是作为生成器的基本结构,包含了2个DenseBlock密集块,如下图所示。

其中,每个密集块包含4个3x3的Conv卷积层,1个1x1的Conv卷积层和4个ReLU激活函数。特别地,本文使用1x1的Conv层来减小RRDB输出数据的尺寸,从而降低生成器训练时的运算量。

与SRGAN对抗神经网络中的基本块相比,RRDB使用密集残差学习策略,可以提高提取特征的表示能力。特别是,我们观察到,当基于对抗神经网络的超分辨率模型复杂度更大时,BN归一化层的使用很容易会给生成的高分辨率图像中带来令人不快的伪像。 因此,本文删除了生成器中的所有BN归一化层,同时将pixelsuffle方法用作模型的上采样操作。最终,本文可以得到由生成器(G)生成的高分辨率预报图像。

3.2 Discriminator鉴别器结构

鉴别网络具有1个5x5 Conv层、5个连续的Disblock块、2个Dense网络层。其中:Disblock块是作为鉴别器的基本结构,每个Disblock块包含1个3 3的Conv卷积层,1个ReLU激活函数和1个BN归一层。该网络是一个二分类模型,目的是使鉴别网络难以把生成器生成的高分辨率预测图片和标签图片区分开来,从而使生成的高分辨率图片可以修复更多的纹理细节,提高最终降水预报的准确性。

本文提出的PreGAN模型相较于SGRAN模型,做出了很多改进。例如,在生成器结构中,引入了密集连接RRDB残差块结构,该结构可以增加网络的深度,从而形成更复杂的结构。另外,在生成网络内不再引入BN归一化层,因为引入BN层后,生成的高分辨率图片内会出现一些伪影等噪音,并且限制了模型的泛化能力,而舍弃批量归一化操作可提高模型生成图片的质量,并降低计算成本。

4. 实验部分展示

本小节将比较多种常见空间降尺度模型(Bilinear、DeepSD、ESPCN、VDSR、RDN、RDBLap、SRGAN、PreGAN)在评价指标上的实验结果。与传统的超分辨率方法(Bilinear、DeepSD、ESPCN、VDSR、RDN、RDBLap)相比,两类基于对抗神经网络的模型(SRGAN、PreGAN)在所有降尺度模式对应的指标中均表现最佳,这可以表明基于GAN的算法相对于基于CNN的模型非常有效。与同类基于对抗神经网络的SRGAN模型相比,本文提出的PreGAN模型在大多数指标上仍具有进一步的改进。具体来说,PreGAN网络在 和 得分上获得了尤其显著的表现。这表明我们的算法在预测大雨和暴雨方面表现优于SRGAN模型。此外,我们还发现随着降尺度模式变小,与其他模型相比,PreGAN网络性能将不会得到显着改善。我们推断,主要原因是气候图像中的降水面积较小。当降尺度比例较小时,下采样技术将不会在低分辨率图像中插入足够的预测值,而这就不能显示出PreGAN模型的显著优势。

该图为不同降尺度模型在NCN区域生成的最终降水分布图展示

该图为SCN区域生成的x5km局部降水分布图展示

5. 小结

以上就是我毕业设计的一些内容吧,感觉也没什么好总结的。我的项目设计并不难,主要就是理念理解,如何把已经成熟的深度学习技术迁移至实际领域,这是值得我们思考的问题。顺便多提一句,做技术应用应该要比技术创新更容易一些,也更有成就感一些。

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
以下是一个基于LSTM的降水预测模型的Python代码实现示例: 首先,导入必要的库: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense, LSTM ``` 接着,读取数据集并进行预处理: ```python # 读取数据集 data = pd.read_csv('rainfall_data.csv') # 按日期排序 data = data.sort_values('Date') # 取出降水量列 rainfall = data['Rainfall'].values.reshape(-1, 1) # 将数据集划分为训练集和测试集 train_size = int(len(rainfall) * 0.8) test_size = len(rainfall) - train_size train_data, test_data = rainfall[0:train_size,:], rainfall[train_size:len(rainfall),:] # 归一化数据 scaler = MinMaxScaler(feature_range=(0, 1)) train_data = scaler.fit_transform(train_data) test_data = scaler.transform(test_data) # 将数据集转换为有监督学习问题 def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return np.array(dataX), np.array(dataY) look_back = 10 trainX, trainY = create_dataset(train_data, look_back) testX, testY = create_dataset(test_data, look_back) # 将数据集重塑为LSTM输入格式 trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1])) ``` 然后,构建LSTM模型并进行训练: ```python model = Sequential() model.add(LSTM(4, input_shape=(1, look_back))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2) ``` 最后,使用训练好的模型进行预测并绘制预测结果: ```python # 在训练集和测试集上进行预测 trainPredict = model.predict(trainX) testPredict = model.predict(testX) # 将预测结果逆归一化 trainPredict = scaler.inverse_transform(trainPredict) trainY = scaler.inverse_transform([trainY]) testPredict = scaler.inverse_transform(testPredict) testY = scaler.inverse_transform([testY]) # 计算训练集和测试集上的均方根误差 trainScore = np.sqrt(mean_squared_error(trainY[0], trainPredict[:,0])) print('Train Score: %.2f RMSE' % (trainScore)) testScore = np.sqrt(mean_squared_error(testY[0], testPredict[:,0])) print('Test Score: %.2f RMSE' % (testScore)) # 绘制预测结果 trainPredictPlot = np.empty_like(rainfall) trainPredictPlot[:, :] = np.nan trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict testPredictPlot = np.empty_like(rainfall) testPredictPlot[:, :] = np.nan testPredictPlot[len(trainPredict)+(look_back*2)+1:len(rainfall)-1, :] = testPredict plt.plot(scaler.inverse_transform(rainfall)) plt.plot(trainPredictPlot) plt.plot(testPredictPlot) plt.show() ``` 此代码实现了一个基于LSTM的降水预测模型,可以通过修改数据集、调整模型参数等进行进一步的改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习的学习者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值