You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently the output of transforms.frame_labels.functional.postprocess is the same as the input when we pass in boundary_labels to use to segment.
The root cause is that transforms.frame_labels.boundary_inds_from_boundary_labels does not check whether the input boundary_labels is a 1-d vector. And then it return nonzero(boundary_labels)[0]. Right now we pass in boundary_labels as a 2-d vector with the first dimension/axis of size 1, so this gives us back a vector of zeros, because zero is the correct index along the first axis for every occurrence of a 1--the 2nd axis is the vector of 1s and 0s.
The short term fix will be to call row_or_1d with the boundary_labels argument to convert it to a vector (or raise an error if it's some other unexpected shape). We already do this with the frame_labels argument at the top of postprocess and we should do the same with boundary_labels. We should also do this inside the boundary_inds_from_boundary_labels function itself. And we should add tests that the functions are now working as expected--something I expect that I failed to do when I first added this functionality.
Long term, I kind of don't like this "validate and convert if necessary" approach. I copied it from scikit-learn. It just feels weird to have the side effect of converting to a 1-d vector. It also feels weird that we validate/convert in these two functions but not in the function "between" them, segment_inds_list_from_boundary_labels, that actually produces the list of indexing vectors used by the postprocess function. I guess my logic is that we want to do the validation inside the top-level function, and we also need to make sure that the lowest level helper function works on its own, so we double-extra-validate there. If we do it inside the function between them, now we are really being redundant. I don't have any better ideas for how to do this right now, just making note.
The text was updated successfully, but these errors were encountered:
Currently the output of
transforms.frame_labels.functional.postprocess
is the same as the input when we pass inboundary_labels
to use to segment.The root cause is that
transforms.frame_labels.boundary_inds_from_boundary_labels
does not check whether the inputboundary_labels
is a 1-d vector. And then it returnnonzero(boundary_labels)[0]
. Right now we pass inboundary_labels
as a 2-d vector with the first dimension/axis of size 1, so this gives us back a vector of zeros, because zero is the correct index along the first axis for every occurrence of a 1--the 2nd axis is the vector of 1s and 0s.The short term fix will be to call
row_or_1d
with theboundary_labels
argument to convert it to a vector (or raise an error if it's some other unexpected shape). We already do this with theframe_labels
argument at the top ofpostprocess
and we should do the same withboundary_labels
. We should also do this inside theboundary_inds_from_boundary_labels
function itself. And we should add tests that the functions are now working as expected--something I expect that I failed to do when I first added this functionality.Long term, I kind of don't like this "validate and convert if necessary" approach. I copied it from scikit-learn. It just feels weird to have the side effect of converting to a 1-d vector. It also feels weird that we validate/convert in these two functions but not in the function "between" them,
segment_inds_list_from_boundary_labels
, that actually produces the list of indexing vectors used by thepostprocess
function. I guess my logic is that we want to do the validation inside the top-level function, and we also need to make sure that the lowest level helper function works on its own, so we double-extra-validate there. If we do it inside the function between them, now we are really being redundant. I don't have any better ideas for how to do this right now, just making note.The text was updated successfully, but these errors were encountered: