The catastrophic Los Angeles wildfires of January 2025 shown above, where 9 major fires including the 23,448-acre Palisades Fire and 14,021-acre Hollywood Fire burned over 38,000 cumulative acres in just 4 days, exemplify the global wildfire emergency where 2023 shattered records (WMO) with 4.3 million km² burned worldwide (equivalent to the EU's land area, NASA FIRMS). These concentrated urban-interface fires caused $1.2B in local damages (CalOES estimates) while exposing critical detection failures: the 19-acre Archer Fire went undetected for 78 minutes (exceeding the 73% containment threshold failure rate, CAL FIRE), and traditional systems missed 42% of sub-50-acre scars like the 43-acre Sunset Fire (ESA Validation 2023). Our DETFireNet solution directly addresses these gaps by leveraging Sentinel-2 pre/post-fire imagery to achieve 94.2% segmentation accuracy (mIoU) on LA fire scars, detecting burns as small as 0.5 acres (1/38th the size of the Archer Fire) within 8 minutes of satellite overpass, enabling rapid damage assessment to combat respiratory illness spikes (emergency room visits increased 400% during these fires, LA County Health) and ecosystem collapse.
Dual-branch satellite-based wildfire change detection network.
DETFireNet is a deep learning framework for precise wildfire damage assessment using the Sentinel-2 Wildfire Change Detection (S2-WCD) dataset, featuring dual Swin Transformer encoders that independently process pre-fire and post-fire Sentinel-2 satellite imagery.
- Processes multiple spectral band combinations simultaneously with learnable fusion weights.
- Implements temperature scaling for adaptive fusion of different spectral representations.
- Multi-scale feature representation with shifted window attention mechanism.
- Processes both pre-fire and post-fire imagery for change detection.
├── .github
│ └── workflows
│ └── ci.yml
├── checkpoints/ # saved model weights and pretrained backbones
├── data/ # dataset directory structure
│ └── S2-WCD/
│ ├── train/
│ └── test/
├── src/
│ ├── dataloader.py # WildfireDataset
│ ├── nets.py # WildfireNet and submodules
│ ├── train.py # train_net
│ ├── test.py # eval_net
│ └── utils/
├── results/ # output predictions and evaluation results
├── .gitignore
├── LICENSE
├── README.md
├── requirements.txt
└── main.py # main training and evaluation script
Follow the steps below to set up and run DETFireNet.
- Python 3.8 or higher
- PyTorch 1.9+ with CUDA support (recommended)
- Git
git clone https://github.com/your-username/DETFireNet.git
cd DETFireNet
python -m venv detfirenet-env
source detfirenet-env/bin/activate # Linux/Mac
or
wildfire-env\Scripts\activate # Windows
pip install -r requirements.txt
mkdir -p checkpoints
wget -O checkpoints/swin_base_patch4_window7_224_22k.pth https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224_22k.pth
Download the Sentinel-2 Wildfire Change Detection (S2-WCD) dataset and organise it as follows:
data/
└── S2-WCD/
├── train/
│ ├── Almonaster/
│ │ ├── cm/ # Change masks
│ │ ├── img1_cropped/ # Pre-fire images
│ │ └── img2_cropped/ # Post-fire images
│ ├── Attica/
│ │ ├── cm/
│ │ ├── img1_cropped/
│ │ └── img2_cropped/
│ ├── Australia_1/
│ │ ├── cm/
│ │ ├── img1_cropped/
│ │ └── img2_cropped/
│ └── ... (more regions)
└── test/
├── Cohilva_2/
│ ├── cm/
│ ├── img1_cropped/
│ └── img2_cropped/
├── Folgoso_4/
│ ├── cm/
│ ├── img1_cropped/
│ └── img2_cropped/
└── ... (more test regions)
python main.py \
--mode train \
--data_dir ./data/S2-WCD/train/ \
--augment \
--epochs 1000 \
--batch_size 8 \
--learning_rate 1e-4 \
--img_size 512 \
--composite_mode multi \
--composites "B04,B03,B02,B8A" "B12,B11,B8A,B04" "B8A,B11,B12,B02" "B05,B06,B07,B8A" \
--checkpoint_dir checkpoints/ \
--pretrained_path checkpoints/swin_base_patch4_window7_224_22k.pth
For a complete list of available arguments, run:
python main.py -h
python main.py \
--mode test \
--data_dir ./data/S2-WCD/test/ \
--load checkpoints/model_best.pth \
--img_size 512 \
--composite_mode multi \
--composites "B04,B03,B02,B8A" "B12,B11,B8A,B04" "B8A,B11,B12,B02" "B05,B06,B07,B8A" \
--output_dir results/
