Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŒ€ Cyclone Detection & Trajectory Forecasting using Deep Learning

An end-to-end deep learning system for detecting cyclones in satellite imagery and forecasting their paths.

Python TensorFlow YOLOv7 License


🎬 Demo

Cyclone Prediction Demo

Click the thumbnail to watch the full demo video


πŸ“Œ Overview

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

πŸ“Έ Results

Cyclone Detection β€” YOLOv7 Output

YOLOv7 cyclone detection with bounding box and confidence score

Path Forecasting β€” Model Comparison

Distance wise model comparison (km) β€” RNN vs BiLSTM vs GRU

Predicted Path on India Map

Cyclone path prediction plotted on India map using GeoPandas


πŸ—οΈ System Architecture

                    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

πŸ“‚ Repository Structure

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

πŸ”¬ Module 1 β€” Cyclone Detection (YOLOv7)

Dataset

  • 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

Model & Training

  • 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

Results

Metric Training Testing
Precision 0.595 0.699
Recall 0.614 0.425
mAP@0.5 0.612 0.584

πŸ“‘ Module 2 β€” Path Forecasting (RNN / Bi-LSTM / GRU)

Dataset

  • 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)

Models Compared

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

Distance Error Results (km) β€” lower is better

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).


βš™οΈ Getting Started

Prerequisites

Python 3.8+
CUDA-enabled GPU recommended (project trained on Kaggle T4 GPU)

Installation

git clone https://github.com/sanjitcodes/Cyclone-Prediction.git
cd Cyclone-Prediction
pip install -r requirements.txt

Running Detection (YOLOv7)

# 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

Running Path Forecasting

# 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.ipynb

Note: Notebook 05 requires the three pre-trained .h5 model files. Model weights are not included in the repo due to file size. Open an issue or reach out directly to request them.


πŸ› οΈ Tech Stack

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

πŸ“ˆ Key Engineering Challenges Solved

  • 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

πŸ“„ Documentation

Resource Link
Full Project Report docs/FY_Project_Report.pdf
Presentation Slides docs/Cyclone_Prediction_Presentation.pptx
Demo Video YouTube

πŸ‘₯ Authors

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


πŸ“š References


⭐ If this project was useful, consider starring the repo!

About

End-to-end cyclone detection from satellite imagery (YOLOv7) and 36-hour path forecasting (Bi-LSTM, GRU, RNN)

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages