This is the official repo for the paper "End-to-End Prediction of Lightning Events from Geostationary Satellite Images".
While thunderstorms can pose severe risks to property and life, forecasting remains challenging, even at short lead times, as these often arise in meta-stable atmospheric conditions. In this paper, we examine the question of how well we could perform short-term (up to 180 min) forecasts using exclusively multi-spectral satellite images and past lighting events as data. We employ representation learning based on deep convolutional neural networks in an "end-to-end" fashion. Here, a crucial problem is handling the imbalance of the positive and negative classes appropriately in order to be able to obtain predictive results (which is not addressed by many previous machine-learning-based approaches). The resulting network outperforms previous methods based on physically based features and optical flow methods (similar to operational prediction models) and generalizes across different years. A closer examination of the classifier performance over time and under masking of input data indicates that the learned model actually draws most information from structures in the visible spectrum, with infrared imaging sustaining some classification performance during the night.
from "End-to-End Prediction of Lightning Events from Geostationary Satellite Images".
DFCC is based on the following libraries and their versions:
Additionally, the Python packages as listed in the requirements.txt file must be installed.
We recommend to use a virtual environment.
The src
directory contains all the code to run the experiments.
Here, everything is split up into different modules:
data
includes everything related to data, from different data sources to actual data loadingevents
includes the learning range rate test (LRRT) and code to run experimentsexperiments
includes different experimentslog
includes loggingmodel
includes model codeoptimizer
includes everything related to optimizer, lr scheduling, loss and loss weightingskill
includes skill scores, such as CSI, FAR and PODsystem
includes system settingsutils
includes utilities used by other modules
The scripts
directory contains scripts to create figures displayed in our publication.
Lead Time | Bottleneck Channels | Weight Decay | Regularization Factor |
---|---|---|---|
0 min | 16 | 5 x 10^-6 | 0.1 |
30 min | 81 | 7 x 10^-6 | 0.15 |
60 min | 97 | 7 x 10^-6 | 0.2 |
90 min | 106 | 7 x 10^-6 | 0.2 |
120 min | 114 | 1 x 10^-5 | 0.3 |
180 min | 124 | 1 x 10^-5 | 0.3 |
Run the following code with the settings above to get a trained model for the given lead time:
python run.py experiment
--SEVIRI.roots.train "${train-data}"
--SEVIRI.roots.test "${test-data}"
--SEVIRI.roots.val "${validation-data}"
--LINET.db_path "${linet.db}"
--LINET.lead_time "${lead-time}"
--regularizer_factor "${reg-factor}"
--sgdw.weight_decay "${weight-decay}"
--channel_hierarchy_depth "${bottleneck-channels}"
The testing step will dump detailed model statistics which can be used with figure_4.py.
For Figure 6 train models with varying input channels, e.g. VIS+PER, WV+PER and IR+PER, and pass the testing details to figure_6.py.
For the sake of simplicity, we use the option --zero_out
to replace inputs of the given channel with zeros during training.
python scripts/figure_6.py
-lt 120
--vis-per vis+per-testing_model_details.json
--wv-per wv+per-testing_model_details.json
--ir-per ir+per-testing_model_details.json
--json complete-testing_model_details.json
--persistence testing_persistence_details.json
If you find the code useful for your research, please cite (see CITATION for details):
- Brodehl, S.; Müller, R.; Schömer, E.; Spichtinger, P.; Wand, M. End-to-End Prediction of Lightning Events from Geostationary Satellite Images. Remote Sens. 2022, 14, 3760. https://doi.org/10.3390/rs14153760
We use SemVer for versioning. For the versions available, see the releases and tags on this repository.
- Sebastian Brodehl / @sbrodehl
With the exceptions noted below, this project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
- lr_finder.py taken from github.com/davidtvs/pytorch-lr-finder (MIT license) and adapted to be used in this project.
- modelsummary taken from github.com/sksq96/pytorch-summary (MIT license) and adapted to be used in this project.