Low-Cost Sonobuoy for Passive Acoustic Detection and Classification of Marine Vessels
MESH (Modular Economical Sonobuoy Heuristic) is an open-source research project developed by Jonathan Walsh as part of a 420-hour Mechatronic Engineering Professional Experience placement at the University of Wollongong, under the supervision of Dr Son Lam Phung.
The primary aim of MESH is to design, implement, and experimentally evaluate a low-cost autonomous sonobuoy capable of passively detecting and classifying marine vessels in shallow-water environments.
The project investigates the intersection of:
- Underwater Acoustics
- Passive Maritime Surveillance
- Embedded Systems
- Signal Processing
- Machine Learning
- Deep Learning
- Autonomous Sensing
- Edge AI Deployment
The objective is to balance:
- Classification Performance
- Cost
- Power Consumption
- Communications Capability
- Embedded Processing Constraints
- Deployability
within an economical and scalable sonobuoy architecture.
Traditional maritime surveillance systems are often expensive, proprietary, and inaccessible to students and researchers.
MESH explores whether advancements in:
- Raspberry Pi Computing
- Embedded Machine Learning
- Open Datasets
- Modern Signal Processing
- Low-Power Communications
can enable practical vessel classification capabilities using low-cost hardware and open-source software.
Develop a low-cost autonomous sonobuoy capable of:
- Passive acoustic acquisition
- Acoustic feature extraction
- Vessel classification
- Embedded deployment
- Wireless communications
- Investigate underwater acoustic feature extraction methods
- Compare statistical and deep learning classification approaches
- Evaluate deployment constraints on embedded hardware
- Create a modular experimentation framework
- Produce reproducible research workflows
The current framework supports:
- Audio segmentation
- Dataset generation
- Data preprocessing
- Cross-validation workflows
Supported acoustic representations include:
- MFCC
- Mel Spectrogram
- Log-Mel Spectrogram
- DEMON
- LOFAR
Implemented models include:
- Random Forest
- XGBoost
- Support Vector Machine (SVM)
- K-Nearest Neighbour (KNN)
- Gaussian Mixture Model (GMM)
- Hidden Markov Model (HMM)
Implemented models include:
- CNN
- MobileNetV2
- ResNet
- DEMON-CNN
- LOFAR-ViT
- CAPSE-ViT
- CATFISH
| Model | Accuracy |
|---|---|
| Random Forest | 73.40% |
| XGBoost | 71.46% |
| KNN | 67.40% |
| SVM | 67.14% |
| ResNet | 54.91% |
| MobileNetV2 | 50.89% |
Current best performer:
Random Forest using handcrafted acoustic features.
These results were obtained using recording-level GroupKFold validation to prevent data leakage.
MESH has been refactored into a modular framework.
config.py
Central source of truth for:
- Dataset filenames
- Output filenames
- Feature directory naming conventions
- Project-wide naming standards
Examples:
CLASSICAL_DATASET
DL_DATASET
DEMON_DATASET
LOFAR_DATASET
CNN_RESULTS
MOBILENET_RESULTS
RESNET_RESULTS
CLASSICAL_RESULTSThis prevents hardcoded filenames from being scattered throughout the codebase and allows naming conventions to be managed from a single location.
core/paths.py
Central source of truth for filesystem locations used throughout the project.
Examples:
DATASETS_DIR
RESULTS_DIR
FEATURES_DIR
TRAINED_MODELS_DIR
DL_DATASET_PATH
CNN_RESULTS_PATH
MFCC_FEATURES_DIR
DEMON_FEATURES_DIR
LOFAR_FEATURES_DIRAll scripts use these predefined paths instead of hardcoded directories, improving portability and maintainability.
core/settings.py
Centralized storage of experiment parameters and tunable settings.
Examples include:
epochs
batch_size
learning_rate
n_splits
test_size
random_seed
n_mfcc
n_fft
hop_length
dropoutThis allows experiments to be modified without changing training or feature extraction code directly.
core/registry.py
Provides a central registry of supported machine learning and deep learning models.
Examples:
Random Forest
XGBoost
KNN
SVM
GMM
HMM
CNN
MobileNetV2
ResNet
DEMON-CNN
LOFAR-ViT
CAPSE-ViT
CATFISHThe registry allows the graphical user interface and training pipeline to dynamically discover available models without requiring manual updates.
pipeline.py
Provides a unified framework for executing:
- Feature extraction
- Dataset generation
- Classical machine learning training
- Deep learning training
- Multi-stage experimental workflows
Examples:
Generate Features
↓
Build Dataset
↓
Train Model
↓
Generate Benchmark Results
All pipeline actions return a structured result object, allowing consistent error handling and GUI integration.
Generated benchmark outputs are automatically written to:
results/benchmarks/
Examples:
cnn_results.csv
mobilenet_results.csv
resnet_results.csv
model_results.csv
Confusion matrices are written to:
results/confusion_matrices/
Examples:
RandomForest_confusion_matrix.csv
XGBoost_confusion_matrix.csv
KNN_confusion_matrix.csv
SVM_confusion_matrix.csv
The framework has been designed around reproducible experimentation.
Key principles include:
- Centralized settings
- Standardized dataset creation
- Consistent validation procedures
- Automated benchmarking
- Repeatable workflows
Current validation methods include:
GroupKFold
Cross Validation
Train/Test Split
with an emphasis on preventing data leakage and ensuring realistic performance evaluation.
Current workflow:
Raw Audio
↓
Segmentation
↓
Feature Extraction
↓
Dataset Generation
↓
Model Training
↓
Cross Validation
↓
Benchmark Results
↓
Model Export
Supported feature types:
MFCC
Mel Spectrogram
Log-Mel Spectrogram
DEMON
LOFAR
Planned improvements include:
Export Models
Convert To TFLite
Package Raspberry Pi Deployments
experiments/
default.json
cnn_test.json
lofar_vit.json
catfish_experiment.json
Feature Counts
Dataset Statistics
Trained Models
Benchmark Summaries
Automatic Refresh
src/gui/views/
dashboard.py
datasets.py
training.py
settings.py
results.py
deployment.py
This will further separate application logic from user interface code and improve maintainability.