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
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
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.
What has been generated
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.
The same physics that renders a labeled scene forward is what trains the model that reads one backward.