CP2025000085 - 2nd Place Solution | Severe Convective Precipitation Nowcasting Competition
This project is the solution for the National Severe Convective Forecasting - Precipitation Track No.2 CP2025000085.
- Background: Based on the severe convective weather training dataset independently developed by the National Meteorological Information Center, this project uses multi-modal fusion methods in deep learning as the primary technical approach to drive innovation and optimization of short-term heavy precipitation forecasting models, enhancing the accurate prediction capability of extreme weather events.
- Task Description:
- Inputs:
- 2-hour grid precipitation labels RA and radar observations Radar at 6-minute intervals with 1KM resolution before the forecast time
- 2-hour numerical weather prediction (NWP) model product features at 1-hour intervals with 3KM resolution before and after the forecast time
- Outputs: 0-2 hour grid precipitation labels RA at 6-minute intervals with 1KM resolution starting from the forecast time
- Metrics: Including TS (Threat Score), MAE (Mean Absolute Error), R (Correlation), with the final result being a comprehensive Score combining forecast lead time and element levels
- Inputs:
For more details, visit the official website Severe Convective Weather Training Dataset Intelligent Application Innovation Challenge
During the initial run of the PyTorch DataLoader, the dataset was encapsulated as a pickle file, which recorded the following information for each precipitation event:
- Label RA: Actual precipitation amount
- Atmospheric parameters NWP: Meteorological data such as temperature, humidity, and wind field
- Radar information Radar: Radar reflectivity data
- Auxiliary information: Recording time, latitude and longitude, and the area where the precipitation event occurred
- Training set: 90% of the events (randomly sampled sequences for training)
- Validation set: 10% of the events (fixed interval sliding window slices)
In each __getitem__() of the training set, a random sequence of events is selected for training. The validation set, on the other hand, slices the occurrence process of all events into windows according to the set sample_gap.
We designed three models for this competition, each for forecasting precipitation of different durations, and used their results in the Ensemble. The weights of each model can be found in /experiments/.
Model input 9 frames -> output 20 frames:/experiments/SimVP_NRD_STE_LSTM_cls_9_20
Model input 9 frames -> output 10 frames:/experiments/SimVP_NRD_STE_LSTM_cls_9_10
Model input 5 frames -> output 15 frames:/experiments/SimVP_NRD_STE_LSTM_cls_5_15
Our model adopts the SimVP (Simple Video Prediction) framework, combining multi-modal fusion and spatio-temporal encoder technologies. The model architecture is shown below:
This architecture achieves accurate forecasting of severe convective precipitation by fusing multi-source data including radar data, Numerical Weather Prediction (NWP), and Digital Elevation Model (DEM).
- Python >= 3.8
- CUDA >= 11.0 (optional, for GPU acceleration)
- At least 16GB RAM
bash install.shTo train the model, please run the train_simvp.sh script. This will automatically start the training process using the available dataset. During this process, the three models used for outputting precipitation forecasts of different time lengths will be jointly trained.
bash train_simvp.shAfter training, you can use the test_simvp_all.sh script to evaluate the model's performance on the test dataset. The program is implemented through the PyTorch Lightning framework. Note that this program will call the three models that output precipitation forecasts of different time lengths to perform forecasting. After executing this program, three forecast results will be generated in /experiments/. We use frequency matching for post-processing correction, with the code entry at /validate_ensemble/ensemble-fast-align-all-iter1000-testB.py.
# 1. basic prediction
bash test_simvp_all.sh
# 2. ensemble and post-process prediction
python ensemble-fast-align-all-iter1000-testB.py