InstanceEngine.evaluate

InstanceEngine.evaluate(split='validation')

One row per model and decoding: the comparison this task is for.

A decoding costs a hundredth of an epoch, so the table gains an axis for nearly nothing.

This paragraph used to say connected_components is in every model’s rows whether it was asked for or not, and it is not. It is in the pair decode derives to when a model stayed silent, which is the signal’s own decoding plus the yardstick; a model that writes a decode list gets the list it wrote and nothing added. That is the right behaviour - the engine does not put a row in somebody’s table that they did not ask for - and the claim was wrong rather than the code: the only test on it covered the derived case, and examples/compare_instance_separations.py keeps the yardstick in its own --decode handling precisely because nothing below does it. test_a_written_decode_list_is_what_you_get is the half that was missing.

The reason the yardstick belongs in a comparison is unchanged and is why the derivation includes it: it ignores the separation signal, so it is the row the signal’s row has to be read against.

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, decoding): what the model is, what it was trained on, the
list[dict[str, Any]] mask’s own numbers, and the instance average precision with the object counts
list[dict[str, Any]] that explain it. average_precision is the mean over images, which is what the
list[dict[str, Any]] Data Science Bowl ranked on.
list[dict[str, Any]] **foreground_dice is the mask column to read across models and dice is
list[dict[str, Any]] not.** The first is a binary overlap of anything the model called an object
list[dict[str, Any]] against anything that is one, computed identically whatever the separation
list[dict[str, Any]] signal is, unsmoothed and averaged over images - the same pooling as the
list[dict[str, Any]] average_precision beside it. The second is the training metric, a mean over
list[dict[str, Any]] the class channels that model’s head has, so it is read down one model’s rows
list[dict[str, Any]] and never across two. Both are the same for every decoding of one model.
list[dict[str, Any]] pyplatypus#222 has the measurement that separates them: 0.09 apart in the
list[dict[str, Any]] class column where the masks are 0.0062 apart, and in the other direction.

Raises

Name Type Description
EngineError If nothing has been trained, or the split carries no masks.