An end-to-end deep learning system for detecting cyclones in satellite imagery and forecasting their paths.
Click the thumbnail to watch the full demo video
India's 7,516 km coastline is struck by 5β6 tropical cyclones annually. Traditional detection relies on ground stations with limited spatial coverage. This project uses satellite imagery and sequential deep learning to address two distinct problems:
| Module | Approach | Key Result |
|---|---|---|
| Cyclone Detection | Fine-tuned YOLOv7 on satellite imagery | Test Precision: 0.699, mAP: 0.584 |
| Path Forecasting | Bi-LSTM / GRU / RNN on IBTrACS dataset | Best 6-hour error: 40.87 km |
DETECTION PIPELINE
βββββββββββββββ ββββββββββββββββββββββββββββ βββββββββββββββ
β Satellite βββββΆβ Preprocessing βββββΆβ YOLOv7 β
β Images β β Grayscale + Thresholding β β Detection β
βββββββββββββββ ββββββββββββββββββββββββββββ βββββββββββββββ
β β
3x Augment Bounding Box
(LabelImg) + Confidence
FORECASTING PIPELINE
βββββββββββββββ ββββββββββββββββββββ βββββββββββββββ
β IBTrACS βββββΆβ Feature Extract βββββΆβ RNN/BiLSTM β
β Dataset β β + Normalisation β β / GRU β
βββββββββββββββ ββββββββββββββββββββ βββββββββββββββ
Lat, Lon (3-hr intervals) 36-hr forecast
Cyclone-Prediction/
β
βββ π code-notebooks/
β βββ 01_data_preprocessing.ipynb # Image preprocessing pipeline
β βββ 02_bilstm_training.ipynb # Bi-LSTM model training (500 epochs)
β βββ 03_gru_training.ipynb # GRU model training (500 epochs)
β βββ 04_rnn_training.ipynb # Simple RNN model training (500 epochs)
β βββ 05_inference_comparison.ipynb # Inference and all-model comparison
β
βββ π datasets/
β βββ # All of the data used as input
|
βββ π detection/
β βββ testing.py # YOLOv7 inference script
β
βββ π assets/
β βββ π images/ # Result images
β βββ π vidoes/ # Demo video
β
βββ π docs/
β βββ FY_Project.pdf
β βββ G22_Presentation_22-23.pptx
β
βββ requirements.txt
βββ README.md
- Source: Kaggle satellite imagery dataset
- Size: 1,005 images β 804 train / 201 test (80:20 split)
- Preprocessing: Grayscale conversion β binary thresholding β manual bounding box annotation (LabelImg) β 3x augmentation
- Format: YOLO annotation, single class:
cyclone
- Architecture: YOLOv7 with E-ELAN backbone
- Base: Pre-trained on COCO (80 classes), fine-tuned for single-class cyclone detection
- Hyperparameters: 100 epochs Β· batch size 4 Β· learning rate 0.01 Β· momentum 0.937
| Metric | Training | Testing |
|---|---|---|
| Precision | 0.595 | 0.699 |
| Recall | 0.614 | 0.425 |
| mAP@0.5 | 0.612 | 0.584 |
- Source: IBTrACS β International Best Track Archive for Climate Stewardship (NOAA)
- Scope: North Indian Ocean Β· 60,458 rows Β· 1,776 unique cyclones
- Filtered: 1,439 cyclones with β₯18 timestamps used for training
- Features: Latitude, Longitude at 3-hour intervals (normalised Γ· 90)
- Sequence split: Input 23 timesteps β Output 12 timesteps (RNN & Bi-LSTM) Β· Input 20 β Output 15 (GRU)
| Model | Layers | Activation | Parameters | Optimizer |
|---|---|---|---|---|
| Simple RNN | 4 | ReLU | 547,778 | Adam |
| Bi-LSTM | 3 | Tanh | 1,589,878 | Adam |
| GRU | 3 | Tanh | 598,574 | Adam |
All models trained for 500 epochs Β· batch size 16 Β· learning rate 0.001 Β· MSE loss
| Model | 6 hr | 12 hr | 18 hr | 24 hr | 36 hr |
|---|---|---|---|---|---|
| Simple RNN | 40.87 | 104.56 | 181.33 | 190.56 | 202.32 |
| Bi-LSTM | 138.54 | 143.33 | 165.44 | 170.39 | 212.43 |
| GRU | 119.90 | 127.05 | 162.27 | 165.32 | 197.10 |
Key finding: Simple RNN achieves the lowest error for short-horizon forecasts (6β12 hr). GRU generalises better for longer horizons (24β36 hr).
Python 3.8+
CUDA-enabled GPU recommended (project trained on Kaggle T4 GPU)
git clone https://github.com/sanjitcodes/Cyclone-Prediction.git
cd Cyclone-Prediction
pip install -r requirements.txt# Clone YOLOv7
git clone https://github.com/WongKinYiu/yolov7
cd yolov7
# Run inference on an image
python detect.py --weights best.pt --source <path_to_image>
# Evaluate on test set
python test.py --weights best.pt --data data.yaml --batch-size 4# Run notebooks in order
jupyter notebook notebooks/01_data_preprocessing.ipynb
jupyter notebook notebooks/02_bilstm_training.ipynb # or 03 / 04 for GRU / RNN
jupyter notebook notebooks/05_inference_comparison.ipynbNote: Notebook 05 requires the three pre-trained
.h5model files. Model weights are not included in the repo due to file size. Open an issue or reach out directly to request them.
| Category | Technologies |
|---|---|
| Object Detection | YOLOv7, PyTorch, OpenCV |
| Sequence Modelling | Keras-TensorFlow (Bi-LSTM, GRU, SimpleRNN) |
| Data Processing | NumPy, Pandas, Scikit-learn |
| Annotation | LabelImg |
| Geospatial Plotting | GeoPandas, Shapely |
| Visualisation | Matplotlib |
| Training Environment | Kaggle (T4 GPU), Google Colab |
| Datasets | Kaggle (satellite imagery), IBTrACS / NOAA |
- No annotated dataset existed β manually annotated 1,005 satellite images using LabelImg, then applied 3x augmentation to address the dataset size constraint
- Variable-length cyclone sequences β handled with a custom mean-interpolation padding strategy, filtering out cyclones with fewer than 18 timestamps
- Overfitting on small dataset β addressed with dropout layers (rates 0.2β0.5) across all three forecasting models
- GPU memory limits on free-tier Kaggle β batch size tuned to 4 (detection) and 16 (forecasting) to stay within hardware constraints
| Resource | Link |
|---|---|
| Full Project Report | docs/FY_Project_Report.pdf |
| Presentation Slides | docs/Cyclone_Prediction_Presentation.pptx |
| Demo Video | YouTube |
Sanjit Anand Β· Siddharth Gautam Β· Somya Gupta
B.Tech, Electronics & Communication Engineering National Institute of Technology (NIT), Surat β 2023
Guided by Dr. Prashant K. Shah, Associate Professor, DoECE, SVNIT
- Wang, C. et al. β YOLOv7: Trainable Bag-of-Freebies
- Knapp, K. et al. β IBTrACS: Unifying Tropical Cyclone Best Track Data
- Redmon, J. & Farhadi, A. β YOLOv3: An Incremental Improvement
β If this project was useful, consider starring the repo!



