Detection Review

Review a detector’s output over the image it was run on. Import a frame, and the detections table draws over it as labelled boxes with per-class colours and confidence scores — in the image’s own pixel coordinates, so a box sits on the object it describes at any zoom. Zoom into a cluster of overlapping boxes to see which one the model actually meant. Sweep the confidence threshold to watch which detections survive the cut and what the cut costs you. Press Rank for an ROC over a true/false-positive column, with average precision, the operating point that maximises Youden’s J, and the precision and recall you actually get there — because "how many detections were right" and "where should I set the confidence threshold" are different questions and only the second one ships a model. LIMITS, STATED RATHER THAN DISCOVERED: no model training and no inference happen here — the detector runs in PyTorch, TensorFlow or your own harness, and this reads the boxes it already wrote. ONE FRAME AT A TIME. The Draw button binds every row of the detections table, so the table should hold the detections for the frame that is loaded; a multi-frame export needs a filter, which the assistant can pass to image2d.bindTable as `where`. There is no frame sequence and no scrubbing — a video review is a different plate. Boxes are IMAGE PIXELS with the origin at the box top-left, which is COCO bbox convention. A YOLO export is centre-and-extent normalised to 0..1 and must be bound with `normalized: true` or every detection lands in a sub-pixel heap at the top-left; the two are indistinguishable by inspection, so nothing can warn you. No COCO or YOLO file reader: the detections arrive as a table, so convert the annotation file to CSV first, or have the assistant author the rows. No masks — a segmentation overlay needs raster compositing and is not built. Boxes only. The Import button takes the IMAGE, because that is the artifact with no other route into the browser; the detections table is authored by the assistant, over MCP, or in Track Studio. The truth column is `outcome`, spelled TP/FP rather than yes/no on purpose: CSV import infers a yes/no column as BOOLEAN and coerces it to true/false, which silently renames the very labels you are ranking against. Axes are linear only, and the ROC needs an outcome column saying whether each detection was a true or false positive — without one there is a score distribution but nothing to rank against. The whole review lives in the track state, capped at 1 MiB, which is a few thousand detection rows; the image itself is an asset and is re-fetched on load rather than stored.

Supported file formats: PNG, JPG, JPEG, WEBP