Code for my BEng thesis at the University of Edinburgh (2024): Deep Learning Driven Landmine Detection: Generalizing Real World Data from Synthetic GPR Training Sets.
Trained a convolutional neural network entirely on synthetic ground penetrating radar (GPR) data and tested it against real radar scans. The model achieved 80% accuracy on individual real world scans and 100% with weighted averaging across multiple scans.
IMechE Best Student Award
-
model_generate.py— gprMax input script. Generates randomised FDTD simulations of a GSSI 2 GHz antenna scanning over soil with buried PMN landmines, bullet casings, and rocks at varying depths and soil conditions. -
process.py— Processes raw A-scans from the simulations: time-zero correction, normalisation, background removal, resampling, and dataset assembly with classification labels. -
grid_search.py— Neural architecture search using AutoKeras. Runs 600 trials with up to 750 epochs to find the best model architecture. -
retrain.py— Retrains the best model with weight resetting on specific layers, early stopping, and accuracy/loss plotting. -
evaluate.py— Evaluates the trained model: ROC curves, confusion matrices, per-data-type accuracy breakdown (Target / Mix / False Alarm), and real data testing.
dataset_definitions.txt— Simulation parameters (domain size, scan counts, training split)processing_definitions.txt— Processing parameters (PCA variance, scaling, batch config)
- Python 3.8+
- gprMax (FDTD simulation)
- TensorFlow / Keras
- AutoKeras
- NumPy, Pandas, Scikit-learn, SciPy, Matplotlib, Seaborn, h5py
Full thesis available at louisbrouwer.com/thesis.html