Skip to content

Commit f4ca04a

Browse files
authored
Dgmr (#813)
* add bubble datafile test=develop * add bubble code test=develop * add bubble code test=develop * add bubble code test=develop * add bubble code * add bubble data * add bubble code * add some code for chip * add some code for DGMR * add some code for DGMR * add some code for DGMR * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code * add some dgmr code
1 parent 090bff4 commit f4ca04a

File tree

12 files changed

+1735
-0
lines changed

12 files changed

+1735
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ PaddleScience 是一个基于深度学习框架 PaddlePaddle 开发的科学计
9090
| 天气预报 | [NowCastNet 气象预报](https://paddlescience-docs.readthedocs.io/zh/latest/zh/examples/nowcastnet) | 数据驱动 | NowCastNet | 监督学习 | [MRMS](https://app.globus.org/file-manager?origin_id=945b3c9e-0f8c-11ed-8daf-9f359c660fbd&origin_path=%2F~%2Fdata%2F) | [Paper](https://www.nature.com/articles/s41586-023-06184-4) |
9191
| 天气预报 | [GraphCast 气象预报](jointContribution/graphcast/README.md) | 数据驱动 | GraphCastNet | 监督学习 | - | [Paper](https://arxiv.org/abs/2212.12794) |
9292
| 大气污染物 | [UNet 污染物扩散](https://aistudio.baidu.com/projectdetail/5663515?channel=0&channelType=0&sUid=438690&shared=1&ts=1698221963752) | 数据驱动 | UNet | 监督学习 | [Data](https://aistudio.baidu.com/datasetdetail/198102) | - |
93+
| 天气预报 | [DGMR 气象预报](https://paddlescience-docs.readthedocs.io/zh/latest/zh/examples/dgmr.md) | 数据驱动 | DGMR | 监督学习 | [UK dataset](https://huggingface.co/datasets/openclimatefix/nimrod-uk-1km) | [Paper](https://arxiv.org/pdf/2104.00954.pdf) |
9394

9495
<!-- --8<-- [start:update] -->
9596
## 🕘最近更新

docs/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@
135135
| 天气预报 | [NowCastNet 气象预报](./zh/examples/nowcastnet.md) | 数据驱动 | NowCastNet | 监督学习 | [MRMS](https://app.globus.org/file-manager?origin_id=945b3c9e-0f8c-11ed-8daf-9f359c660fbd&origin_path=%2F~%2Fdata%2F) | [Paper](https://www.nature.com/articles/s41586-023-06184-4) |
136136
| 天气预报 | [GraphCast 气象预报](https://github.com/PaddlePaddle/PaddleScience/blob/develop/jointContribution/graphcast/README.md) | 数据驱动 | GraphCastNet | 监督学习 | - | [Paper](https://arxiv.org/abs/2212.12794) |
137137
| 大气污染物 | [UNet 污染物扩散](https://aistudio.baidu.com/projectdetail/5663515?channel=0&channelType=0&sUid=438690&shared=1&ts=1698221963752) | 数据驱动 | UNet | 监督学习 | [Data](https://aistudio.baidu.com/datasetdetail/198102) | - |
138+
| 天气预报 | [DGMR 气象预报](./zh/examples/dgmr.md) | 数据驱动 | DGMR | 监督学习 | [UK dataset](https://huggingface.co/datasets/openclimatefix/nimrod-uk-1km) | [Paper](https://arxiv.org/pdf/2104.00954.pdf) |
138139

139140
## 🚀快速安装
140141

docs/zh/api/arch.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
- USCNN
2525
- NowcastNet
2626
- HEDeepONets
27+
- DGMR
2728
- ChipDeepONets
2829
- AutoEncoder
2930
show_root_heading: true

docs/zh/api/data/dataset.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@
2323
- MeshCylinderDataset
2424
- RadarDataset
2525
- build_dataset
26+
- DGMRDataset
2627
show_root_heading: true

docs/zh/examples/dgmr.md

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# DGMR(deep generative models of radar)
2+
3+
=== "模型训练命令"
4+
5+
暂无
6+
7+
=== "模型评估命令"
8+
9+
``` sh
10+
# Download data from Huggingface
11+
mkdir openclimatefix/nimrod-uk-1km/20200718/valid/subsampled_tiles_256_20min_stride
12+
cd openclimatefix/nimrod-uk-1km/20200718/valid/subsampled_tiles_256_20min_stride
13+
git lfs install
14+
git lfs pull --include="seq-24-*-of-00033.tfrecord.gz"
15+
16+
python dgmr.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/dgmr/dgmr_pretrained.pdparams
17+
```
18+
19+
| 预训练模型 | 指标 |
20+
|:--| :--|
21+
| [dgmr_pretrained.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/dgmr/dgmr_pretrained.pdparams) | d_loss: 127.041<br>g_loss: 59.2409<br>grid_loss: 1.7699 |
22+
23+
## 1. 背景简介
24+
25+
短临降水预报是对未来两小时内的降水进行高分辨率预测,支持了许多依赖于天气决策的实际社会经济需求。最先进的运行即时预报方法通常利用基于雷达的风估计对降水场进行平流,但往往难以捕捉重要的非线性事件,如对流的发生。最近引入的深度学习方法利用雷达直接预测未来的降雨率,摆脱了物理约束。虽然它们能够准确预测低强度降雨,但由于缺乏约束,在更长的前瞻时间内产生模糊的即时预报,导致对中到大雨事件的性能较差,其运行实用性受到限制。为了解决这些挑战,我们提出了一种用于基于雷达的降水概率即时预报的深度生成模型。我们的模型在范围为1536 km × 1280 km的区域内,能够在5-90分钟的前瞻时间内生成逼真且时空一致的预测。通过英国气象局的五十多位专家预报员进行的系统评估显示,我们的生成模型在88%的情况下在准确性和实用性方面排名第一,超过了两种竞争方法,表明了其在决策价值和向现实世界专家提供物理洞察力方面的能力。在定量验证方面,这些即时预报具有良好的技能而无需进行模糊处理。我们展示了生成式即时预报可以提供改进预报价值并支持运行实用性的概率性预测,在分辨率和前瞻时间方面,替代方法存在困难的情况下尤其如此。
26+
27+
短临降水预报在工程和科学领域具有多方面的重要性,主要体现在以下几个方面:
28+
29+
- 社会影响: 短临降水预报对各行各业的实际决策都有着直接的社会影响。例如,农业、水资源管理、城市防汛和交通运输等领域都需要准确的降水预报来做出相应的应对措施,以减少可能的损失和风险。
30+
- 安全保障: 短临降水预报对于保障公众安全至关重要。例如,预警系统可以根据短临降水预报提前通知人们可能发生的暴雨、洪涝、泥石流等灾害,从而及时采取避险措施,减少人员伤亡和财产损失。
31+
- 生态环境保护: 对降水的准确预报有助于生态环境的保护和管理。例如,预测降水量可以帮助决策者及时调整水利工程的运行,保障生态系统的健康运行,并为植被生长提供必要的水资源。
32+
- 科学研究: 短临降水预报也是气象科学研究的重要组成部分。通过对降水过程的研究和预测,可以更好地理解大气环境中的水循环过程,为气象学、气候学等相关领域的研究提供重要数据和支撑。
33+
- 工程规划和设计: 在城市规划、土木工程、农业灌溉等领域,准确的短临降水预报对工程的规划和设计至关重要。例如,在城市排水系统设计中,需要考虑未来短时间内可能发生的降水情况,以保证排水系统的正常运行和城市的防洪能力。
34+
35+
总的来说,短临降水预报在工程和科学领域的重要性体现在保障社会安全、促进科学研究、支持生态环境保护和推动工程发展等多个方面,对于各行业的发展和社会的可持续发展都具有重要意义。
36+
37+
## 2. 模型原理
38+
39+
### 2.1 模型结构
40+
41+
DGMR是在条件生成对抗网络的算法框架中构建的。以过去的雷达数据为基础,对未来的雷达做出详细和可信的预测。也就是说在给定的时间点 $T$,使用基于雷达的地表降水估计值 $X_T$,基于过去 $M$ 个雷达场预测未来 $N$ 个雷达场。即:
42+
43+
$$
44+
P\left(X_{M+1: M+N} \mid X_{1: M}\right)=\int P\left(X_{M+1: M+N} \mid \mathrm{Z}, X_{1: M}, \boldsymbol{\theta}\right) P\left(\mathrm{Z} \mid X_{1: M}\right) d \mathrm{Z}.
45+
$$
46+
47+
其中 $Z$ 为随机向量,$\theta$ 为生成模型的参数。
48+
49+
- 等式左边是条件概率,给定过去$M$个时刻的雷达降水,预报之后$N$个时刻的雷达降水。
50+
- 右边则将概率写为集合预报的积分形式:
51+
- 给定随机抽样 $Z$ 和生成网络参数 $\theta$,在过去 $M$ 个时刻的雷达降水约束下预报之后 $N$ 个时刻的雷达降水;
52+
- 计算随机抽样 $Z$ 在过去 $M$ 个时刻的雷达降水约束下的条件概率;
53+
- 两者相乘,为该结果的出现概率,积分后得到多次抽样下的集合预报。
54+
55+
56+
对随机向量 $Z$ 的积分确保了模型产生的预测具有空间相关性。DGMR 专门用于降水预测问题。四个连续的雷达观测数据(前20分钟)被用作生成器的输入,该生成器允许对未来降水的多个实现进行抽样,每个实现包含18帧(90分钟)。模型架构示意图如图所示。
57+
58+
<figure markdown>
59+
![domain_chip.pdf](https://paddle-org.bj.bcebos.com/paddlescience/docs/DGMR/dgmr.png){ loading=lazy style="height:80%;width:80%" align="center" }
60+
<figcaption> 模型架构示意图。</figcaption>
61+
</figure>
62+
63+
DGMR 是一个使用两个判别器和一个附加正则化项进行训练的生成器。下图显示了生成模型和判别器的详细示意图:
64+
65+
<figure markdown>
66+
![domain_chip.pdf](https://paddle-org.bj.bcebos.com/paddlescience/docs/DGMR/g_d.png){ loading=lazy style="height:80%;width:80%" align="center" }
67+
<figcaption> a、生成器架构。b,生成器的时间鉴别器架构(左上)、空间鉴别器(左中)和潜在条件堆栈(左下)。右侧是 G 块(上)、D 和 3D 块(中)以及 L 块(右)的架构。</figcaption>
68+
</figure>
69+
70+
### 2.2 目标函数
71+
72+
生成器通过两个鉴别器的损失和一个网格单元正则化项(记为 $\mathcal{L}_R(\theta)$ )进行训练。空间鉴别器 $D\phi$ 具有参数 $\phi$,时间鉴别器 $T_\psi$ 具有参数 $\psi$,生成器 $G_\theta$ 具有参数 $\theta$。我们使用符号 $\{X ; G\}$ 表示两个字段的串联。最大化的生成器损失如下:
73+
74+
$$
75+
\begin{gathered}
76+
\mathcal{L}_G(\theta)=\mathbb{E}_{X_{1: M+N}}\left[\mathbb{E}_Z\left[D\left(G_\theta\left(Z ; X_{1: M}\right)\right)+T\left(\left\{X_{1: M} ; G_\theta\left(Z ; X_{1: M}\right)\right\}\right)\right]-\lambda \mathcal{L}_R(\theta)\right] ; \\
77+
\mathcal{L}_R(\theta)=\frac{1}{H W N}\left\|\left(\mathbb{E}_Z\left[G_\theta\left(Z ; X_{1: M}\right)\right]-X_{M+1: M+N}\right) \odot w\left(X_{M+1: M+N}\right)\right\|_1 .
78+
\end{gathered}
79+
$$
80+
81+
我们在上面公式中对潜变量 $\mathrm{Z}$ 的期望使用 Carlo 估计。这些估计是使用每个输入 $X_{1: M}$ 的六个样本计算的,其中包括 $M=4$ 个雷达观测数据。网格单元正则化项确保平均预测保持接近真实值,并在高度 $H$、宽度 $W$ 和提前时间 $N$ 轴上对所有网格单元进行平均。它通过函数 $w(y)=\max (y+1,24)$ 加权至更高的降雨目标,该函数对输入向量进行逐元素操作,并在 24 处截断以提高对雷达中异常大值的鲁棒性。GAN 空间鉴别器损失 $\mathcal{L}_D(\phi)$ 和时间鉴别器损失 $\mathcal{L}_T(\psi)$ 分别相对于参数 $\phi$ 和 $\psi$ 最小化。鉴别器损失采用铰链损失公式:
82+
83+
$$
84+
\begin{aligned}
85+
& \mathcal{L}_D(\phi)=\mathbb{E}_{X_{1: M+N}, Z}\left[\operatorname{ReLU}\left(1-D_\phi\left(X_{M+1: M+N}\right)\right)+\operatorname{ReLU}\left(1+D_\phi\left(G\left(Z ; X_{1: M}\right)\right)\right)\right], \\
86+
& \mathcal{L}_T(\psi)=\mathbb{E}_{X_{1: M+N}, Z}\left[\operatorname{ReLU}\left(1-T_\psi\left(X_{1: M+N}\right)\right)+\operatorname{ReLU}\left(1+T_\psi\left(\left\{X_{1: M} ; G\left(Z ; X_{1: M}\right)\right\}\right)\right)\right],
87+
\end{aligned}
88+
$$
89+
90+
其中 $\operatorname{ReLU} = \max(0,x)$. 更多详细的理论推导请参考 [Skillful Precipitation Nowcasting using Deep Generative Models of Radar](https://arxiv.org/pdf/2104.00954.pdf)
91+
92+
## 3. 问题求解
93+
94+
接下来开始讲解如何将该问题一步一步地转化为 PaddleScience 代码,用 DGMR 来预测短临降水。为了快速理解 PaddleScience,接下来仅对模型构建、约束构建等关键步骤进行阐述,而其余细节请参考[API文档](../api/arch.md)
95+
96+
### 3.1 数据集介绍
97+
98+
为了训练和评估英国的临近预报模型,DGMR 使用了英国气象局 RadarNet4 网络中的雷达复合数据。使用 2016 年 1 月 1 日至 2019 年 12 月 31 日期间每五分钟收集一次的雷达数据。我们使用以下数据分割进行模型开发。将 2016 年至 2018 年每月第一天的字段分配给验证集。2016 年至 2018 年的所有其他日期都分配给训练集。最后,使用2019年的数据作为测试集,防止数据泄露和分布泛化测试。开源的英国训练数据集已镜像到 [HuggingFace 数据集](https://huggingface.co/datasets/openclimatefix/nimrod-uk-1km),用户可以自行下载使用。
99+
100+
在该模型的PaddleScience 代码中,我们可以调用`ppsci.data.dataset.DGMRDataset` 来加载数据集,代码如下:
101+
102+
``` py linenums="199"
103+
--8<--
104+
examples/dgmr/dgmr.py:199:201
105+
--8<--
106+
```
107+
108+
### 3.2 模型构建
109+
110+
在 DGMR 模型中,输入过去四个雷达场数据,对 18 个未来雷达场(接下来的 90 分钟)进行预测。DGMR 网络可以表示为 $X_{1:4}$ 到输出 $X_{5:22}$ 的映射函数 $f$,即:
111+
112+
$$
113+
X_{5:22} = f(X_{1:4}),\\
114+
$$
115+
116+
上式中 $f$ 代表 DGMR 模型。我们定义 PaddleScience 内置的 DGMR 模型类,并调用,PaddleScience 代码表示如下
117+
118+
``` py linenums="197"
119+
--8<--
120+
examples/dgmr/dgmr.py:197:198
121+
--8<--
122+
```
123+
124+
这样我们就实例化出了一个 DGMR 模型,模型参数设置相关内容请参考文献 [Skillful Precipitation Nowcasting using Deep Generative Models of Radar](https://arxiv.org/pdf/2104.00954.pdf)
125+
126+
### 3.3 模型评估、可视化
127+
128+
模型构建和加载数据后,将上述实例化的对象按顺序传递给 `ppsci.solver.Solver`,然后启动评估和可视化。首先我们初始化模型:
129+
130+
``` py linenums="202"
131+
--8<--
132+
examples/dgmr/dgmr.py:202:207
133+
--8<--
134+
```
135+
136+
然后自定义评估方式和损失函数,代码如下:
137+
138+
``` py linenums="89"
139+
--8<--
140+
examples/dgmr/dgmr.py:89:189
141+
--8<--
142+
```
143+
144+
最后对数据中的每个 batch 进行遍历评估,同时对预测结果进行可视化。
145+
146+
``` py linenums="209"
147+
--8<--
148+
examples/dgmr/dgmr.py:209:232
149+
--8<--
150+
```
151+
152+
## 4. 完整代码
153+
154+
``` py linenums="1" title="dgmr.py"
155+
--8<--
156+
examples/dgmr/dgmr.py
157+
--8<--
158+
```
159+
160+
## 5. 结果展示
161+
162+
如图所示为分别在 $T+5, T+10, \cdots, T+45$ 分钟的气象降水预测,与真实的降水情况相比可以看出,该模型可以给出比较好的短临降水预测。
163+
164+
<figure markdown>
165+
![chip.png](https://paddle-org.bj.bcebos.com/paddlescience/docs/DGMR/Generated_Image_Frame.png){ loading=lazy style="height:80%;width:80%" align="center" }
166+
<figcaption> 模型预测的降水情况</figcaption>
167+
</figure>
168+
169+
<figure markdown>
170+
![chip.png](https://paddle-org.bj.bcebos.com/paddlescience/docs/DGMR/Target_Image_Frame.png){ loading=lazy style="height:80%;width:80%" align="center" }
171+
<figcaption> 真实降水情况</figcaption>
172+
</figure>
173+
174+
## 6. 参考资料
175+
176+
参考文献: [Skillful Precipitation Nowcasting using Deep Generative Models of Radar](https://arxiv.org/pdf/2104.00954.pdf)
177+
178+
参考代码: [DGMR](https://github.com/openclimatefix/skillful_nowcasting)

examples/dgmr/conf/dgmr.yaml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
hydra:
2+
run:
3+
# dynamic output directory according to running time and override name
4+
dir: outputs_dgmr/${now:%Y-%m-%d}/${now:%H-%M-%S}/${hydra.job.override_dirname}
5+
job:
6+
name: ${mode} # name of logfile
7+
chdir: false # keep current working direcotry unchaned
8+
config:
9+
override_dirname:
10+
exclude_keys:
11+
- TRAIN.checkpoint_path
12+
- TRAIN.pretrained_model_path
13+
- EVAL.pretrained_model_path
14+
- mode
15+
- output_dir
16+
- log_freq
17+
callbacks:
18+
init_callback:
19+
_target_: ppsci.utils.callbacks.InitCallback
20+
sweep:
21+
# output directory for multirun
22+
dir: ${hydra.run.dir}
23+
subdir: ./
24+
25+
# general settings
26+
mode: eval # running mode: train/eval
27+
seed: 42
28+
output_dir: ${hydra:run.dir}
29+
30+
# dataset settings
31+
DATASET:
32+
input_keys: ['input_frames']
33+
label_keys: ['target_frames']
34+
split: validation # train or validation
35+
num_input_frames: 4
36+
num_target_frames: 18
37+
dataset_path: openclimatefix/nimrod-uk-1km
38+
39+
# model settings
40+
MODEL:
41+
input_keys: ['input_frames']
42+
output_keys: ['future_images']
43+
forecast_steps: 18
44+
input_channels: 1
45+
output_shape: 256
46+
gen_lr: 5e-05
47+
disc_lr: 0.0002
48+
conv_type: 'standard'
49+
num_samples: 6
50+
grid_lambda: 20.0
51+
beta1: 0.0
52+
beta2: 0.999
53+
latent_channels: 768
54+
context_channels: 384
55+
generation_steps: 6
56+
57+
# evaluation settings
58+
EVAL:
59+
pretrained_model_path: https://paddle-org.bj.bcebos.com/paddlescience/models/dgmr/dgmr_pretrained.pdparams

0 commit comments

Comments
 (0)