Built to order

Satellite Change Detection using Siamese CNN

This project builds a Siamese convolutional neural network that takes a before/after pair of Sentinel-2 satellite images and outputs a pixel-level change map — the core of automated urban monitoring, deforestation tracking and disaster assessment. It trains on the OSCD benchmark (Onera Satellite Change Detection: 24 Sentinel-2 image pairs with pixel-wise urban-change labels) using a Siamese encoder with shared weights — one branch per time step — whose feature difference feeds a decoder that labels every pixel changed or unchanged. A demo app loads a before/after pair, runs the pipeline and

Satellite Change Detection using Siamese CNN — project thumbnail preview
More project photos (2)

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. The overlay renders on the "after" image with the changed-area percentage, changed pixel count and a confidence legend.
  6. 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.

Download abstract (PDF)

Related guides

All guides
Illustration of object tracking showing video frames with bounding boxes and persistent ID labels following people and vehicles, comparing motion prediction and appearance matching.B.E./B.Tech Computer Science and Electronics students building video analytics projects — people counting, vehicle tracking, sports analysis — who have detection working and need

Object Tracking: DeepSORT and ByteTrack Explained

Detection finds objects per frame; tracking keeps their identities across frames. This guide explains tracking-by-detection, Kalman motion models, DeepSORT's appearance embeddings vs ByteTrack's low-confidence box recovery, tracking metrics (HOTA, IDF1, ID switches), and the tuning parameters that determine real-world quality.

Read guide
Illustration of image segmentation showing U-Net's U-shaped encoder-decoder with skip connections producing pixel masks, alongside Mask R-CNN detecting instances with masks.B.E./B.Tech Computer Science and AI/ML students moving from image classification or detection to pixel-level understanding — medical imaging, defect detection, autonomous driving

Image Segmentation: U-Net and Mask R-CNN

When projects need pixel-level answers, segmentation delivers. This guide explains semantic vs instance vs panoptic segmentation, U-Net's encoder-decoder with skip connections, Mask R-CNN's parallel mask head, Dice and IoU evaluation, paired augmentation, and how to choose the right architecture for your data and question.

Read guide
Illustration of Whisper speech-to-text showing sound waves flowing into a neural network and emerging as transcribed text with timestamps and speaker labels.B.E./B.Tech Computer Science and AI/ML students adding speech-to-text to projects — voice assistants, meeting transcription, accessibility tools

Whisper for Speech-to-Text in Student Projects

Whisper transcribes speech in dozens of languages with no training required. This guide covers how it works, choosing among model sizes, running it locally with faster-whisper, handling hour-long audio, timestamps and speaker diarization, multilingual quirks, and honest evaluation with word error rate.

Read guide
Get a quotation