Every image arrives already labeled.

Labeled sonar imagery is scarce because labeling it is expensive: an analyst looks at a grey speckled scene and decides where an object ends and the seafloor begins. A simulator does not have that problem. It knows where everything is, because it put everything there. The labels are not inferred from the image; they are written out alongside it, from the same scene file the physics read.

What comes out

Six annotation categories, in world coordinates.

Each simulated image is accompanied by annotations for objects, rocks, biota, pockmarks, trawl scars, and the seafloor itself. They are generated in world coordinates and projected into the image, so they stay correct when the geometry changes.

Implementation: simulator/scenes/scene_annotations.py.

The format

Standard COCO, with the geometry attached.

Annotations export as COCO detection JSON with polygon segmentation, which is what an off-the-shelf detector expects; there is no bespoke format to write a loader for. Each image record additionally carries pixel_size_m, along_extent_m, and range_extent_m, so a pixel box can be converted back into metres, and a georeference attached later, without re-deriving the imaging geometry.

Per-image files concatenate into one dataset with merge_coco(). A scene is a file, so a dataset is a parameter sweep over scene files; the cost of the next thousand images is the cost of the first one, times a thousand, with no ship.

A simulated synthetic aperture sonar scene beside the same scene overlaid with green object bounding boxes, object names and positions, and yellow traced seafloor-zone boundaries
One scene, imaged and labeled. Green: oriented object footprints with class, position, and heading. Yellow: the traced boundary of each seafloor type. Both are emitted by the scene file at simulation time.

What has been generated

Generators that have been run, and what they produced.

Five generators exist. Three have produced imagery with labels; two have produced the scene configurations an imagery run would consume. They are written here as what they are, not as a claim about scale that has not been exercised yet.

A grid of identical targets rendered against ten different seafloor types including fine ripple, coarse ripple, rocky, mud, and gravel
The same object on ten seafloor types. Domain randomization is not a post-process here; each background is a different physical bottom, simulated.

The same physics that renders a labeled scene forward is what trains the model that reads one backward.

Next: the physics that renders it, or describing a scene in English.