case study · AI & Computer Vision / Embedded & Signal · 2026
Iceberg Alley SAR Classifier
Ship vs. iceberg discrimination in satellite radar
Problem
Newfoundland sits at the southern end of Iceberg Alley, the corridor where icebergs calved off Greenland drift down the Labrador Sea toward shipping lanes and offshore oil infrastructure. Automated monitoring relies on synthetic aperture radar because it works in darkness, cloud, and fog. The catch: ships and icebergs can return remarkably similar radar signatures.
Built on the Statoil/C-CORE Kaggle dataset (1,604 labelled 75 × 75 dual-polarisation SAR chips, 851 ships and 753 icebergs), this project is a classifier whose numbers are meant to be defended, not just quoted.
Constraints
- Small data. 1,604 examples means augmentation and regularisation carry real weight, and generalisation claims need discipline.
- A documented leakage trap. In this dataset, radar incidence angle correlates with how the data was structured. Models that lean on it look better than they are under naive validation.
- SAR is not photography. Inputs are dB-scale radar backscatter. Augmentations must be geometrically valid (flips and 90° rotations are; colour-space tricks are not), and normalisation statistics must come from the training split only.
Decisions
A SAR-aware input tensor. Three channels: HH polarisation, HV polarisation, and their difference, the cross-polarisation contrast that helps separate hard, man-made returns from ice.
An architecture sized for chips, not ImageNet. The served model is a custom CNN with SiLU activations, global average pooling in place of a flatten (fewer parameters, less overfitting at 75 × 75), AdamW, gradient clipping, and early stopping on validation log-loss.
Validate three ways; report all three.
| Validation scheme | Accuracy | ROC-AUC |
|---|---|---|
| Single stratified split (321 held-out samples) | 0.9003 | 0.9645 |
| Random 5-fold cross-validation | 0.9015 ± 0.0199 | 0.9667 ± 0.0100 |
| Leakage-aware GroupKFold by incidence angle | 0.8909 ± 0.0295 | 0.9564 ± 0.0246 |
Serve the model you can defend. A variant with an incidence-angle branch looked clearly better under random cross-validation. Under GroupKFold, where records sharing an angle value can never straddle training and validation, the improvement collapsed to within noise (all 95% confidence intervals cross zero at five folds). The image-only model is the one served, because its performance needs no caveats, and a live uploaded chip has no trustworthy angle value anyway.
Explanations built in. Grad-CAM is implemented natively in PyTorch, hooked into the final convolutional layer and upsampled over the HH-band chip, so every prediction ships with a heatmap of what drove it.
Result
The served image-only CNN reaches 0.9003 accuracy and 0.9645 ROC-AUC on the held-out split, and 0.9667 ± 0.0100 five-fold cross-validated ROC-AUC. An interactive Gradio demo loads the 2 MB checkpoint, accepts Kaggle-format JSON with bundled example chips (one ship, two icebergs), and returns the predicted class, a confidence score, and the Grad-CAM overlay.
Honest limitations
- Classifies pre-cropped chips already centred on one object; it does not detect or localise targets in full SAR scenes.
- 1,604 examples: performance on other SAR sensors, imaging geometries, or seasonal conditions is unknown.
- All metrics come from
train.jsonsplits; the competition's test set had known structural issues and is not used for any reported number. - A research and portfolio demonstration, not certified marine-safety software.