SAAF

Sensing and Accounting of Aquatic Floatables

Request a demo

Technology

Detection, scale, then mass.

Three steps, each of which can be checked independently. The interesting problems were in the second and third.

Detection

The detector is YOLO26-small, an object detector rather than a segmentation model. Litter in an aerial frame is small — a typical item is about 60 pixels on its longest side in a 3840×2160 capture — so the model is trained at full resolution rather than downscaled.

Current scores on a held-out test split never used in training. The training set is 3,816 aerial frames holding 33,555 hand-checked boxes:

MetricScoreWhat it tells you
mAP@500.992Whether litter is found at all
mAP@50-950.682How tightly it is boxed

The second row is the one that matters here. Area and mass are computed from box dimensions, so a model that finds everything but boxes it loosely produces confident, wrong tonnage.

Why rotation was the whole problem

Training originally used random rotation as augmentation. YOLO labels areaxis-aligned rectangles, so rotating a 22×7 cm bottle by 45° forces the label into a 20.5×20.5 cm square — 2.7× the object's real area. The model dutifully learned to draw loose, square boxes.

Right angles are the exception: at 0° and 90° the box stays exactly tight. So the training split is pre-rotated into four orientations offline and training runs with rotation disabled. At matched compute this was worth roughly +30% mAP@50-95 — the single largest improvement in the project, and it came from the labels rather than the model.

Scale

Pixels become centimetres through the ground sample distance:

GSD = sensor_width × altitude ÷ (focal_length × image_width)

Everything downstream is a multiple of this one number, so it is the only value that has to be right for the areas to be right. It needs the camera model and the flight altitude — both of which the pilot already knows.

Mass

Two numbers are produced per detection, because they fail in different ways.

  • Catalogue mass is the published typical weight for that class. It ignores the box entirely, and is therefore immune to a loose box — which is the common failure.
  • Size-adjusted mass scales that weight by the item's longest side against a reference length. Length is used rather than area because a loose box inflates area quadratically: a 2× area error would become a ~3× mass error under volumetric scaling. The ratio is clamped hard for the same reason.

Reference weights are sourced from published packaging data, not guessed. When we checked estimates against measured values, unverified guesses were off by 43–59% — a glass bottle estimated at 350 g actually weighs about 220 g. Every weight in the table now has a source.

Honest limits

  • Mass is an estimate, not a measurement. It is reported as one.
  • Accuracy depends on the altitude being recorded correctly. A wrong altitude scales every area and mass linearly.
  • Partially buried or submerged items are under-measured — only the visible footprint is counted.
  • Six classes today. Anything outside them is not counted rather than misfiled.