# fiftyone.utils.iou¶

Intersection over union (IoU) utilities.

Functions:

 compute_ious(preds, gts[, iscrowd, …]) Computes the pairwise IoUs between the predicted and ground truth objects. compute_max_ious(sample_collection, label_field) Populates an attribute on each label in the given spatial field(s) that records the max IoU between the object and another object in the same sample/frame. compute_segment_ious(preds, gts) Computes the pairwise IoUs between the predicted and ground truth temporal detections. find_duplicates(sample_collection, label_field) Returns IDs of duplicate labels in the given field of the collection, as defined as labels with an IoU greater than a chosen threshold with another label in the field.
fiftyone.utils.iou.compute_ious(preds, gts, iscrowd=None, classwise=False, use_masks=False, use_boxes=False, tolerance=None, error_level=1)

Computes the pairwise IoUs between the predicted and ground truth objects.

Parameters
• preds – a list of predicted fiftyone.core.labels.Detection or fiftyone.core.labels.Polyline instances

• gts – a list of ground truth fiftyone.core.labels.Detection or fiftyone.core.labels.Polyline instances

• iscrowd (None) – an optional name of a boolean attribute or boolean function to apply to each label that determines whether a ground truth object is a crowd. If provided, the area of the predicted object is used as the “union” area for IoU calculations involving crowd objects

• classwise (False) – whether to consider objects with different label values as always non-overlapping (True) or to compute IoUs for all objects regardless of label (False)

• use_masks (False) – whether to compute IoUs using the instances masks in the mask attribute of the provided objects, which must be fiftyone.core.labels.Detection instances

• use_boxes (False) – whether to compute IoUs using the bounding boxes of the provided fiftyone.core.labels.Polyline instances rather than using their actual geometries

• tolerance (None) – a tolerance, in pixels, when generating approximate polylines for instance masks. Typical values are 1-3 pixels

• error_level (1) –

the error level to use when manipulating instance masks or polylines. Valid values are:

• 0: raise geometric errors that are encountered

• 1: log warnings if geometric errors are encountered

• 2: ignore geometric errors

If error_level > 0, any calculation that raises a geometric error will default to an IoU of 0

Returns

a num_preds x num_gts array of IoUs

fiftyone.utils.iou.compute_segment_ious(preds, gts)

Computes the pairwise IoUs between the predicted and ground truth temporal detections.

Parameters
Returns

a num_preds x num_gts array of segment IoUs

fiftyone.utils.iou.compute_max_ious(sample_collection, label_field, other_field=None, iou_attr='max_iou', id_attr=None, **kwargs)

Populates an attribute on each label in the given spatial field(s) that records the max IoU between the object and another object in the same sample/frame.

If other_field is provided, IoUs are computed between objects in label_field and other_field.

If no other_field is provided, IoUs are computed between objects in label_field alone, excluding the object itself.

Parameters
fiftyone.utils.iou.find_duplicates(sample_collection, label_field, iou_thresh=0.999, method='simple', **kwargs)

Returns IDs of duplicate labels in the given field of the collection, as defined as labels with an IoU greater than a chosen threshold with another label in the field.

The following duplicate removal methods are supported:

• method="simple": mark the latter label in every pair of labels whose IoU exceeds the threshold. This may remove more labels than the greedy method

• method="greedy": apply a greedy method to mark the fewest number of labels as duplicate such that no non-duplicate labels have IoU greater than the specified threshold. This method is more computationally expensive than the simple method

Parameters
Returns

a list of IDs of duplicate labels