The University of Sheffield

MSc Robotics Dissertation

Sim-to-Real Underwater Object Detection

via Physics-Informed Domain Randomisation

Rithish Ramamoorthy Sathya Supervisor · Dr Jonathan M. Aitken 7 September 2026
Generated scene after calibrated water degradation Generated · calibrated water
Generated frame with SAM 3 bounding boxes SAM 3 pseudo-labels
A real DUO photograph Real DUO target

Chapter 00

Abstract

Problem

Real underwater labels are scarce and costly. Can synthetic images replace them?

Method

1,000 generated scenes, labelled by SAM 3, degraded by a physics-informed water model.

Result

Eight YOLO26x runs reach up to 11.82% mAP50 on real DUO images, against 98% on synthetic.

Caveat

One seed per run. Regime differences are exploratory associations.

Read the full abstract +

Underwater object detectors are limited less by architecture than by the scarcity and cost of annotated real imagery. This dissertation evaluates target-aware, physics-informed DR for synthetic-to-real UOD under a deliberate constraint: detector weight updates use only synthetic images and SAM 3 pseudo-labels; no real annotations enter fine-tuning. Aggregate target statistics do inform two of the training regimes and earlier real-DUO scores informed the tuned recipe, so the reported figures are a target-informed evaluation, not an estimate from an untouched test set.

A five-stage pipeline generates 1,000 FLUX.2-dev benthic scenes, annotates them zero-shot with SAM 3, estimates relative depth with DAv2, and applies a forward Akkaynak-Treibitz-inspired transform (with a shared direct/backscatter coefficient) as the randomisation mechanism, in uncalibrated, DUO-calibrated and calibrated-plus-scatter regimes. Eight pretrained YOLO26x runs cross four data regimes with two training recipes and are evaluated on a three-class 778-image DUO derivative (Roboflow v2 export).

Under the baseline recipe, uncalibrated degradation was associated with real-domain mAP50 of 2.83% against Base 4.48%, while target-calibrated degradation reached 4.90%; under the tuned recipe the four regimes cluster between 10.31% and 11.82%, with the calibrated-plus-scatter run highest. Synthetic validation stayed at 98.1 - 98.8%, leaving a minimum 86.2% point transfer gap.

Because each cell is a single seed, clean and paired regimes differ in image exposure, and the evaluation partition influenced development, the regime differences are reported as exploratory associations; independent evaluation, matched exposure and repeated seeds are needed before attributing the observed differences to calibration.

Chapter 01

Motivation

Real underwater labels are scarce. Can synthetic images stand in for them?

Aim

The aim of this study is to evaluate the feasibility of target-aware, physics-informed domain randomisation for synthetic-to-real UOD, using synthetically generated training imagery without human-labelled training annotations.

RQ1

Feasibility

What real-domain detection performance can be achieved by a detector trained only on synthetically generated and automatically annotated underwater imagery?

RQ2

Randomisation and calibration

What differences in real-domain detection performance are observed between clean synthetic data, uncalibrated degradation and target-calibrated degradation?

RQ3

Residual limitations

Which observable factors including annotation quality, photometric mismatch, object morphology and object scale appear to limit transfer to the real domain?

Chapter 01 · Motivation

Biofouling on an offshore monopile Real biofouling
Illustrative simulated AUV inspection scene Simulated inspection
Figure 1. Real biofouling (left) and an illustrative simulated inspection scene (right). Motivation, not a matched comparison.

Chapter 02

A first attempt in Unreal Engine

Perfect labels, and almost no detections on real photographs.

Why it stopped

Exact labels.
Optically clean images.

Almost no detections on real photographs. The fix: make the water its own controllable stage.

Engine

UE 5.8

Camera poses

500

Four classes

Coral · Kelp · Rock · Sponge

{{ f.alt }} {{ f.label }}
Figure 2. Unreal prototype: (a) rendered RGB image, (b) post-process randomisation and (c) projected geometric bounding boxes.
The full account +

Before the generative pipeline, a geometric route was built in Unreal Engine 5.8 on a licensed underwater asset pack: a benthic scene populated across four classes coral, kelp, rock, sponge a scripted camera path sampled at 500 poses, and per-actor 3D bounding boxes projected through the depth buffer for exact, occlusion-aware ground truth.

A detector trained on that output returned almost no detections on real underwater photographs. The labels were exact, but the imagery was optically clean: the route spent its effort on scene construction while leaving the actual transfer barrier of photometric realism untouched, and the classes it could depict were bounded by the asset pack rather than the benchmark. After seven weeks and two changes of direction over tooling failures, that result motivated the pivot to the generative pipeline, which defers optical appearance to its own controllable, calibratable stage. The simulator arm is retained as the UE Pipeline repository, the record of that pivot.

Chapter 03

The generative pipeline

Generate, label, then add the water.

benthic-survey-1000-flux2dev.json · row 7

{{ m.text }}
Generated frame #0007
Generated frame #0007 with SAM 3 bounding boxes on a starfish, a sea urchin and a scallop
Generated frame #0007, source for depth estimation Depth Anything V2 relative depth map, bright is far
FarNear
Generated frame #0007, clean Generated frame #0007 after calibrated degradation

{{ stageCaption }}

  1. Chapter 03

    The generative pipeline

    Generate, label, then add the water.

    Stage 01 / 05

    Prompt manifest

    Each row sets classes, counts, framing and seed for one image. Lighting is colour-neutral; the water is left out on purpose.

  2. Stage 02 / 05

    Image generation · FLUX.2 dev

    Chosen from six tested models: 4.65 against HunyuanImage-3.0's 4.32 on the rubric, at 71 s per image against 284 s.

  3. Stage 03 / 05

    Zero-shot labels · SAM 3

    One presence-gated pass per class. On the same 20 images, Grounding DINO found 4 scallops; SAM 3 found 70.

  4. Stage 04 / 05

    Relative depth · DAv2 Large

    Mapped to a range from 0.3 m outward. It drives how colour loss and haze grow with distance; it is not measured depth.

  5. Stage 05 / 05

    Physics-informed degradation

    An Akkaynak-Treibitz-inspired water model with optical parameters sampled per image. This is the randomisation, and it touches pixels only.

Chapter 03 · Pipeline

Five-stage generation pipeline

Swipe sideways to see the whole diagram.

Figure 3. The delivered generative pipeline, from prompt manifest through to detector-ready datasets. Water is applied last and changes only pixels, so every degraded image keeps its labels.

Chapter 04

Experimental design

Four kinds of water, two training recipes, eight runs.

Four data regimesTrain images

{{ r.name }}

{{ r.desc }}

{{ r.n }}

Uncalibrated is "Placeholder" in the dissertation. Degraded regimes train on each clean image plus its degraded copy.

Detector

YOLO26x

COCO-pretrained

Training recipes

Default · Tuned

Every regime trained with both, one seed each

Real test set

778 DUO images

5,914 human-labelled objects · Roboflow v2 export

Classes

Starfish · Scallop · Sea urchin

Chapter 04 · Experimental design

Same frame, different water

{{ im.alt }} {{ im.label }}
Red ÷ green {{ im.rg }}
1.00 · no red lost 0.40 · most red lost
{{ mk.label }}
Figure 4. Frame #0007 under three regimes beside a real DUO image. The number is each corpus's mean red-to-green ratio: water absorbs red first, so lower means more underwater. Calibration moves the synthetic water towards the real target but stops short of it.

Chapter 04 · Experimental design

The class mix inverts between training and test

Each bar splits all labelled objects by class. Scallop is the most common generated class and the rarest real one; sea urchin is three quarters of the real test set.

Generated training images · 4,610 boxes labelled by SAM 3

{{ sg.text }}
{{ sg.text }}

Real DUO test images · 5,914 boxes labelled by humans

{{ lg.name }} {{ lg.syn }} {{ lg.real }}
Figure 5. Share of labelled objects (bounding boxes, not images) per class. One image can hold several objects.

Chapter 05

Results

98% on synthetic images, under 12% on real ones.

Near-perfect on synthetic images, low on real ones

All scores are mAP50: how well the detector finds and boxes each object, from 0% to 100%.

Real DUO test images

Default2.83–4.90%

Synthetic validation

98.1–98.8%

≥ 86.2 pp gap
0% 50% 100%

Tuned10.31–11.82%

mAP50 (%), all eight runs
Figure 6. Range of mAP50 across the eight runs on synthetic validation and on real DUO test images, split by training recipe (grey default, blue tuned), on a common 0–100% axis. The gap exceeds 86.2 percentage points in every run.

Chapter 05 · Results

The tuned recipe lifted every regime; calibration changed the order

Each percentage is a run's mAP50 on the 778 real DUO test images: how well it finds and boxes the real objects (100% is perfect).

Real-domain mAP50 (%) 0% 3% 6% 9% 12% Default recipe Tuned recipe {{ sl.l0.v0 }} {{ sl.l1.v0 }} {{ sl.l2.v0 }} {{ sl.l3.v0 }} {{ sl.l0.v1 }}{{ sl.l0.nameT }} {{ sl.l1.v1 }}{{ sl.l1.nameT }} {{ sl.l2.v1 }}{{ sl.l2.nameT }} {{ sl.l3.v1 }}{{ sl.l3.nameT }}
{{ lg.name }}
Figure 7. Real-domain mAP50 for each data regime under the two training recipes. Each point is one seed-0 run.

Chapter 05 · Results

Sea urchin carries the score; starfish is almost never found

{{ lg.name }}

{{ g.label }}

{{ g.sub }}

{{ s.text }}
Figure 8. Per-class AP50 across the four tuned data regimes, on a 0–30% axis. Sea urchin rises monotonically with calibration, 19.9% to 26.7%; starfish never exceeds 1.6%.

Chapter 05 · Results

Detection examples on real DUO images: (a) starfish, (b) sea urchins, (c) scallops, ground truth against predictions

Swipe sideways to see all three panels.

Figure 9. Detection examples on real DUO for the highest-scoring run (Calibrated + scatter, tuned): (a) starfish, (b) sea urchins, (c) scallops. Solid yellow boxes are ground truth; dashed red boxes are predictions with their confidence. Every panel contains at least one miss; the dominant error is the missed detection rather than cross-class confusion. Illustrative failure cases, not evidence of the pattern across the 778-image split.
Table 1 · Full metrics for all eight runs +
Regime Recipe mAP50 % mAP50–95 % Precision % Recall % Gap pp
{{ row.regime }} {{ row.config }} {{ row.map50 }} {{ row.map5095 }} {{ row.precision }} {{ row.recall }} {{ row.gap }}

Scored on 778 real DUO images. Gap is synthetic-validation mAP50 minus real mAP50. Each cell is one seed-0 run.

Chapter 06

What the measurements answer

With one seed per run, these are observed patterns, not established effects.

RQ1 · Feasibility

11.82%

Transfer is measurable but low

The gap never falls below 86.2 pp, so synthetic validation alone should not pick models here.

RQ2 · Calibration

4.90 vs 2.83%

Where the water is aimed matters more than adding it

Default recipe: calibrated water scored above clean (4.48%), uncalibrated below it.

RQ3 · Limits

≈4×

Several limits overlap; none is isolated

Generated objects are about four times larger in frame than real ones.

Read the full discussion +

RQ1. The nominally highest-scoring run reaches 11.82% mAP50 on the 778-image DUO derivative, while the transfer gap between synthetic and real never falls below 86.2 percentage points. Synthetic validation carried little descriptive information about real transfer in these eight runs and should not be used on its own as a selection criterion here.

RQ2. Under the baseline recipe the four regimes fell on both sides of the clean Base: uncalibrated 2.83%, calibrated 4.90%, Base 4.48%. The same separation is legible on the pixels - calibration moves ratio_rg from 0.944 to 0.705 against a target of 0.438, whereas the uncalibrated regime reaches only 0.790 and moves ratio_bg the wrong way. The reading is exploratory: volume, recipe bundling and single-seed variance all remain confounds.

RQ3. Sea urchin drives the aggregate rise across regimes; starfish is floored below 1.6% in every tuned run; box areas are around 4× oversized against real DUO: 3.6× for starfish, 5.3× for sea urchin, 1.1× for scallop. Photometric mismatch, morphology, scale and the SAM 3 pseudo-label ceiling all remain consistent with the evidence; none is separately measured.

Chapter 06 · Discussion

Generated objects fill more of the frame

{{ z.ratio }}

{{ z.name }}

{{ z.detail }}

Real DUO median box Synthetic median box
Figure 10. Median labelled box area as a share of the frame, drawn to scale. Size mismatch does not track AP50: sea urchin is the most oversized and the best detected.

Chapter 07

Limits and further work

What would make these results firmer.

1 seed

Per run, so close results cannot be ranked.

900 vs 1,800

Base is not volume-matched, so Base contrasts mix water with volume.

1 · 1 · 3

One target domain, one detector architecture, three classes.

1

Multiple seeds at matched volume

Repeat all eight runs, and re-run Base at 1,800 images. The cheapest strengthening available.

2

Close the open measurements

A human-reviewed label audit, and recalibration from DUO's disjoint 5,448-image training split.

3

Hybrid geometric–generative pipeline

The engine for scale, framing and placement; the calibrated generative stack for appearance.

4

Broaden external validity

More benchmarks, Jerlov water types and detectors; restore DUO's holothurian class.

Chapter 08

Code and data

Everything needed to rerun the study.