Work · 02 of 9

OilTrace

U-Net oil-slick detection on Sentinel-1 radar, Smart India Hackathon 2026

Role
ML detection service, investigation dashboard, technical report
Team
Ved Kumar Singh, Parth Kshirsagar, Nimit Jain
Period
Aug to Sep 2026
Status
hackathon
Stack
  • PyTorch
  • U-Net
  • FastAPI
  • Modal
  • React
  • Leaflet
  • OpenDrift
trueman08.github.io/Team-AlgoRise_Oil_Detection_Report
The OilTrace technical report, captured 2026-09-15
The OilTrace technical report. Captured from the live site on 2026-09-15.

Measured

MetricValueWindowSource
Dice, vs 0.06 for the classical dark-spot threshold, 6× better0.35validation, traps includedML-service/runs/E6_focal_iter/history.json
Object precision, up from 0.28 after the focal-loss fine-tune; raw was 0.0450.47validationML-service/docs/judge_card.html
Object recall, slicks of 10 ha or more, max-IoU matching67%validationML-service/docs/judge_card.html
Centroid error, about 8 px at 10 m resolution85 mvalidationML-service/docs/judge_card.html
Inference, full Sentinel-1 scene on CPU10 sML-service/service/app.py, measured on the demo scene

Winner, internal round, Smart India Hackathon 2026 (problem SIH26143); national round pending

Problem

Problem statement SIH26143 asks for oil-spill detection and vessel attribution from satellite data. The detection half sounds easy: oil looks dark on radar. The trouble is that the sea is full of dark things that are not oil: calm wind, algae, rain cells, ship wakes. A detector that flags every dark patch is useless to an investigator, so the exam that matters is rejecting the look-alikes.

Pipeline

Sentinel-1 sceneVV + VH GeoTIFFU-Net detectiontiled 512 px, TTASlick GeoJSONpolygon, centre, areaBackward hindcastOpenDrift, OpenOilAIS attributionvessels in windowCounterfactualforward run per vessel
Detection is my module. The hindcast and attribution stages take its GeoJSON.

Training the detector

About 2,500 real Sentinel-1 scenes, of which 685 are deliberate trap scenes with no oil. Scenes were sharded into 16,926 training and 4,335 validation patches of 512 pixels, with an inventory and error log per shard. Seven experiments are recorded in runs/, each with a manifest (config, git hash, device, shards) and a per-epoch history. The loss moved from Dice to focal after the early runs kept collapsing to “predict nothing” on the imbalanced patches; focal loss concentrates the gradient on exactly the pixels the model gets wrong. A scene classifier gates whole scenes before segmentation. The test set was sealed and never used for a decision.

Before and after

BeforeAfter
DetectorClassical dark-spot threshold, Dice 0.06U-Net with focal loss, Dice 0.35, 6× better
Object precision0.045 raw, 0.28 after the first fine-tune0.47 after the focal-loss fine-tune, recall within three points
ValidationOil-only patches, the easier examTraps included, so the number means what an investigator needs it to mean
OutputA probability mapPolygons in WGS84 with centre, area and confidence, 10 s per scene on CPU

Service and dashboard

The detector runs behind FastAPI: POST /detect takes a GeoTIFF, tiles it, stitches the probability map, applies the threshold and minimum-area filters, and returns GeoJSON; GET / reports the checkpoint, epoch and full validation metrics so any result can be traced to a model version. It was deployed on Modal for the hackathon and runs locally now. The investigation dashboard, React and Leaflet, walks the six stages with map-synced particle clouds and a timeline driven only by backend timestamps. The interface never says “culprit”; it says “probable source region”, because that is what the evidence supports.

What I would do next

Publish the sealed test-set numbers once the national round decides whether they stay sealed. Add a small per-scene report so a judge can see which traps were rejected and why. Wire the detector back onto Modal with a warm-up so the demo does not cold start.

Learned: Put the look-alikes in the validation set or the number is a lie.

keysKeyboard
j / k
next / previous row
Enter
open the focused row
⌘K or /
search, or ask this site
g then h w a c
go home, work, about, contact
t
toggle light and dark
Esc
close the palette or this map
?
this map