Spaces:
Runtime error
Runtime error
# Copyright (c) OpenMMLab. All rights reserved. | |
import torch | |
import torchvision.ops.boxes as boxes | |
def box_cxcywh_to_xyxy(x): | |
x_c, y_c, w, h = x.unbind(-1) | |
b = [(x_c - 0.5 * w), (y_c - 0.5 * h), (x_c + 0.5 * w), (y_c + 0.5 * h)] | |
return torch.stack(b, dim=-1) | |
def box_xyxy_to_cxcywh(x): | |
x0, y0, x1, y1 = x.unbind(-1) | |
b = [(x0 + x1) / 2.0, (y0 + y1) / 2.0, (x1 - x0), (y1 - y0)] | |
return torch.stack(b, dim=-1) | |
def box_iou(boxes1, boxes2): | |
"""Return intersection-over-union (Jaccard index) between two sets of | |
boxes. | |
Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with | |
``0 <= x1 < x2`` and ``0 <= y1 < y2``. | |
Args: | |
boxes1 (Tensor[N, 4]): first set of boxes | |
boxes2 (Tensor[M, 4]): second set of boxes | |
Returns: | |
Tensor[N, M]: the NxM matrix containing the pairwise IoU values for | |
every element in boxes1 and boxes2 | |
""" | |
return boxes.box_iou(boxes1, boxes2) | |
def generalized_box_iou(boxes1, boxes2): | |
"""Return generalized intersection-over-union (Jaccard index) between two | |
sets of boxes. | |
Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with | |
``0 <= x1 < x2`` and ``0 <= y1 < y2``. | |
Args: | |
boxes1 (Tensor[N, 4]): first set of boxes | |
boxes2 (Tensor[M, 4]): second set of boxes | |
Returns: | |
Tensor[N, M]: the NxM matrix containing the pairwise generalized IoU | |
values for every element in boxes1 and boxes2 | |
""" | |
# degenerate boxes gives inf / nan results | |
# so do an early check | |
assert (boxes1[:, 2:] >= boxes1[:, :2]).all() | |
assert (boxes2[:, 2:] >= boxes2[:, :2]).all() | |
return boxes.generalized_box_iou(boxes1, boxes2) | |