What the network predicts, so objects can be told apart

Description

One per model, and it decides the head’s width and which losses are admissible - both derived by the engine rather than stated here, so there is no channel count to get wrong. Pass the result as a model’s separation; see u_net().

Usage

separation_rim(width = NULL)

separation_flows(mode = NULL, loss = NULL, weight = NULL)

Arguments

width For rim, how many pixels wide the rim is, in the model’s input resolution. Unset uses the engine’s default, which is 2 and stands on an argument rather than on a measurement: the published sweep peaked at 3 pixels of source resolution, which on a 520-pixel case read at 256 is about 1.5 pixels of model input, and a sweep in model pixels has not been run.
mode For flows, “diffusion” or “centroid”. Unset uses the engine’s default of “diffusion”, which stands on a measurement: decoded against the truth it reaches 0.9924 where “centroid” reaches 0.9478, because a straight line to a centroid leaves a crescent-shaped object.
loss For flows, the objective for the vector channels, which has to be one defined over numbers rather than over classes. Unset uses the engine’s default.
weight For flows, how much of the total objective the vector half provides.

Details

separation_rim() trains three classes - background, object interior, object rim - and the rim is what separates two touching objects. separation_flows() trains a vector field pointing at each object’s own sink, so every foreground pixel carries a value and none of them is spent on being a boundary.

What this is worth was measured and it is not flattering. On the Data Science Bowl’s held-out cases the flow route is worth +0.0680 of instance average precision over decode_connected_components(), which ignores the signal entirely, and the rim route +0.0640 - while substituting a perfect mask is worth +0.2398. So the mask is the limit by a factor of 3.6, and a run that beats the published weights’ 0.4888 without reaching 0.7655 has improved its mask and said nothing about separation.

There is no hv. Its markers lose to a one-pixel erosion on perfect inputs, 0.9382 against 0.9807, so naming it would promise a mechanism that was measured as absent.

Value

A separation block, to be passed as a model’s separation.

See Also

decodings, instance_data()

Examples

$name
[1] "rim"

$width
[1] 2
separation_flows(mode = "diffusion")
$name
[1] "flows"

$mode
[1] "diffusion"