DetectionEngine.evaluate

DetectionEngine.evaluate(split='validation')

One row per model: the comparison table, with detection’s columns.

Different columns from the segmentation table, because they answer a different question. mean_matched_iou is the one worth keeping beside the averages: the gap between mAP@0.5 and mAP@[.50:.95] is localisation, and this is that gap as a single number - how well the boxes that matched actually fit, rather than merely that they cleared a threshold.

No precision or recall here, although operating_point says where to read them. Averaging them over classes needs a weighting and every choice of weighting is a different claim: summed over BCCD’s 4155 red cells, 372 white and 361 platelets, a single precision is a statement about red cells wearing the costume of a statement about the model. They are in evaluate_classes, per class, which is the only form in which they mean anything. DetectionMetrics.as_rows made the same decision - its “all” row leaves both as None.

Parameters

Name Type Description Default
split str Which data to score on. 'validation'

Returns

Name Type Description
list[dict[str, Any]] One row per model: map_50, map_50_95, mean_matched_iou and the counts.
list[dict[str, Any]] No overall precision or recall, deliberately: averaging them over classes
list[dict[str, Any]] needs a weighting, and over BCCD’s 4,155 red cells against 372 white one
list[dict[str, Any]] precision is a statement about red cells wearing the costume of a statement
list[dict[str, Any]] about the model.