The problem
Cities grow, forests shrink and disasters reshape landscapes — but manually comparing satellite images across years is slow, inconsistent and impossible at scale. Change detection automates it: given two co-registered images of the same area taken at different times, produce a map of exactly which pixels changed. The Siamese CNN is the canonical deep-learning design for this — two identical encoder branches with shared weights process the before and after images, and their feature difference is decoded into a binary change mask. This project implements that pipeline end to end on the OSCD benchmark of Sentinel-2 multispectral imagery: patch extraction and co-registration handling, a Siamese encoder-decoder trained with a change-class-weighted loss (changed pixels are rare), and a demo that renders predicted change maps over real imagery with per-pair changed-area statistics. Because the output is a visual map over real satellite photos, it demos powerfully — and the pixel-level evaluation keeps the report honest about the hard cases: seasonal vegetation shifts, shadows and sensor noise.
How it works
- OSCD Sentinel-2 pairs (13 bands, 10 m resolution) are normalized and cut into overlapping patches; pixel-wise change labels give the ground-truth masks; changed pixels are oversampled to fight class imbalance.
- A Siamese encoder (shared weights) embeds the before and after patches; the absolute difference of the two embeddings feeds a decoder that outputs a per-pixel change probability.
- Training uses a weighted binary cross-entropy + Dice loss for about 50 epochs; every epoch logs precision, recall and F1 on the change class for held-out pairs.
- At inference, the demo app tiles the input pair, runs the model per patch, stitches the probability map and thresholds it into the final change overlay.
- The overlay renders on the "after" image with the changed-area percentage, changed pixel count and a confidence legend.
- The threshold slider re-binarizes the cached probability map live, showing the precision/recall trade-off without re-running the model.
Tech stack:
- Python 3.10, PyTorch (Siamese encoder-decoder, patch training loop)
- Sentinel-2 multispectral imagery via the OSCD benchmark (24 pairs, 13 bands)
- NumPy, rasterio-style patch handling, scikit-learn (metrics)
- Matplotlib (training curves, change-ratio charts)
- Single-file HTML/CSS/JS demo app (detector, dataset explorer, model views)
- Trained weights exported from the included training run
| Parameter | Value |
|---|---|
| Model | Siamese CNN: shared-weight encoder ×2, feature-difference fusion, change-mask decoder |
| Dataset | OSCD (Onera Satellite Change Detection): 24 Sentinel-2 pairs, 13 bands, 10 m resolution |
| Labels | Pixel-wise binary change masks (urban change) |
| Input | Co-registered before/after multispectral pairs, tiled into patches |
| Output | Per-pixel change probability map + thresholded overlay, changed-area stats |
| Training | ~50 epochs, weighted BCE + Dice loss; design target change-class F1 ≈ 0.55–0.65 |
| Evaluation | Precision, recall, F1 on the change class — computed by the notebook on your build |
| Inference | Patch-tiled forward pass; a 512×512 pair processes in seconds on CPU |
Project features
- [Change-map predictor] Load any before/after satellite pair and get a pixel-level change map rendered as an overlay on the imagery, with changed-area percentage and pixel counts.
- [Siamese encoder with shared weights] Two identical CNN branches process the two time steps with tied weights; their absolute feature difference feeds the decoder — the architecture is inspectable in the demo's model view.
- [OSCD training pipeline] Trains on the OSCD benchmark (24 Sentinel-2 image pairs, 13 spectral bands, pixel-wise urban-change labels) with patch-based sampling and a weighted loss for the rare change class.
- [Dataset explorer view] Browse OSCD pair statistics — cities, dates, band counts, change-pixel ratios — with real before/after patch pairs inside the demo app.
- [Training-curve view] Per-epoch change-class F1 and train/validation loss plots that the notebook reproduces during the build.
- [Threshold control] Adjustable decision threshold on the change probability map with live overlay updates, demonstrating the precision/recall trade-off.
- [Full evaluation logging] Precision, recall and F1 on the change class computed on held-out OSCD pairs — never pre-claimed.
What is included
- Complete source code (patch extraction, Siamese model, training loop, tiled inference, demo app)
- Jupyter training and evaluation notebook (buyer-run procedure: train, evaluate, inspect failure patches)
- Project report PDF (background, OSCD analysis, Siamese architecture, methodology, evaluation, error analysis)
- PPT presentation for final review
- Viva Q&A preparation document (CNNs, Siamese networks, segmentation losses, class imbalance, remote sensing)
- Setup guide (environment, OSCD download, training, running the demo)
Limitations & prerequisites
- The model is trained on OSCD's urban-change labels — it detects built-up change, not deforestation, crop change or flood extent, which need their own labeled data.
- Input pairs must be co-registered (aligned); misaligned images produce false change along every edge, and the report documents this requirement.
- Seasonal vegetation change, cloud shadows and sensor noise are the classic false positives; the error analysis shows them openly.
- Sentinel-2's 10 m resolution cannot resolve small structures — sub-pixel and single-building-edge changes are below the detection floor.
- Training the full model needs a GPU; the notebook documents expected runtimes and a reduced-patch quick-run mode.
Frequently Asked Questions
Which dataset is used?
OSCD (Onera Satellite Change Detection): 24 co-registered Sentinel-2 image pairs with 13 spectral bands at 10 m resolution and pixel-wise labels of urban change.
What is a Siamese CNN and why use it here?
Two identical encoder branches with shared (tied) weights process the before and after images; sharing forces both time steps into one comparable feature space, and their difference is what the decoder turns into the change map.
Is the accuracy guaranteed?
No. The design target is change-class F1 ≈ 0.55–0.65 on held-out OSCD pairs — change detection is a hard, imbalanced task — and final performance is measured by the training notebook during your build.
Can it detect deforestation or floods?
Not as trained — the labels cover urban change. The same architecture retrains for other change types, but that needs labeled data for those classes.
What are the main limitations?
Urban change only; pairs must be co-registered; seasonal/shadow false positives; 10 m resolution floor; GPU needed for full training.
Is this project suitable for a final-year project?
Yes — for Computer Science, AI/ML and Data Science programs. It demonstrates CNNs, Siamese architectures, segmentation-style losses, class-imbalance handling and remote-sensing data, all strong viva material. Suitable for B.E./B.Tech final-year projects in Computer Science, AI/ML and Data Science.
Components & software requirements
- Python 3.10, PyTorch (Siamese encoder-decoder, patch training loop)
- Sentinel-2 multispectral imagery via the OSCD benchmark (24 pairs, 13 bands)
- NumPy, rasterio-style patch handling, scikit-learn (metrics)
- Matplotlib (training curves, change-ratio charts)
- Single-file HTML/CSS/JS demo app (detector, dataset explorer, model views)
- Trained weights exported from the included training run
Delivery information
Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.
Support terms
Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.