(boxlist1, boxlist2)
return iou
Compute the intersection over union of two set of boxes.
    The box order must be (xmin, ymin, xmax, ymax).

    Arguments:
      box1: (BoxList) bounding boxes, sized [N,4].
      box2: (BoxList) bounding boxes, sized [M,4].

    Returns:
      (tensor) iou, sized [N,M].

    Reference:
      https://github.com/chainer/chainercv/blob/master/chainercv/utils/bbox/bbox_iou.py
Compute the intersection over union of two set of boxes.
    The box order must be (xmin, ymin, xmax, ymax).
Compute the intersection over union of two set of boxes . The box order must be ( xmin ymin xmax ymax ) .
def boxlist_iou(boxlist1, boxlist2):
    """Compute the intersection over union of two set of boxes.
    The box order must be (xmin, ymin, xmax, ymax).

    Arguments:
      box1: (BoxList) bounding boxes, sized [N,4].
      box2: (BoxList) bounding boxes, sized [M,4].

    Returns:
      (tensor) iou, sized [N,M].

    Reference:
      https://github.com/chainer/chainercv/blob/master/chainercv/utils/bbox/bbox_iou.py
    """
    if boxlist1.size != boxlist2.size:
        raise RuntimeError(
                "boxlists should have same image size, got {}, {}".format(boxlist1, boxlist2))

    N = len(boxlist1)
    M = len(boxlist2)

    area1 = boxlist1.area()
    area2 = boxlist2.area()

    box1, box2 = boxlist1.bbox, boxlist2.bbox

    lt = torch.max(box1[:, None, :2], box2[:, :2])  # [N,M,2]
    rb = torch.min(box1[:, None, 2:], box2[:, 2:])  # [N,M,2]

    TO_REMOVE = 1

    wh = (rb - lt + TO_REMOVE).clamp(min=0)  # [N,M,2]
    inter = wh[:, :, 0] * wh[:, :, 1]  # [N,M]

    iou = inter / (area1[:, None] + area2 - inter)
    return iou
def boxlist_iou ( boxlist1 , boxlist2 ) : if boxlist1 . size != boxlist2 . size : raise RuntimeError ( "boxlists should have same image size, got {}, {}" . format ( boxlist1 , boxlist2 ) ) N = len ( boxlist1 ) M = len ( boxlist2 ) area1 = boxlist1 . area ( ) area2 = boxlist2 . area ( ) box1 , box2 = boxlist1 . bbox , boxlist2 . bbox lt = torch . max ( box1 [ : , None , : 2 ] , box2 [ : , : 2 ] ) # [N,M,2] rb = torch . min ( box1 [ : , None , 2 : ] , box2 [ : , 2 : ] ) # [N,M,2] TO_REMOVE = 1 wh = ( rb - lt + TO_REMOVE ) . clamp ( min = 0 ) # [N,M,2] inter = wh [ : , : , 0 ] * wh [ : , : , 1 ] # [N,M] iou = inter / ( area1 [ : , None ] + area2 - inter ) return iou