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. |