(box_a, box_b)
return inter[:, :, 0] * inter[:, :, 1]
We resize both tensors to [A,B,2] without new malloc:
    [A,2] -> [A,1,2] -> [A,B,2]
    [B,2] -> [1,B,2] -> [A,B,2]
    Then we compute the area of intersect between box_a and box_b.
    Args:
      box_a: (tensor) bounding boxes, Shape: [A,4].
      box_b: (tensor) bounding boxes, Shape: [B,4].
    Return:
      (tensor) intersection area, Shape: [A,B].
We resize both tensors to [A,B,2] without new malloc:
    [A,2] -> [A,1,2] -> [A,B,2]
    [B,2] -> [1,B,2] -> [A,B,2]
    Then we compute the area of intersect between box_a and box_b.
    Args:
      box_a: (tensor) bounding boxes, Shape: [A,4].
      box_b: (tensor) bounding boxes, Shape: [B,4].
    Return:
      (tensor) intersection area, Shape: [A,B].
We resize both tensors to [ A B 2 ] without new malloc : [ A 2 ] - > [ A 1 2 ] - > [ A B 2 ] [ B 2 ] - > [ 1 B 2 ] - > [ A B 2 ] Then we compute the area of intersect between box_a and box_b . Args : box_a : ( tensor ) bounding boxes Shape : [ A 4 ] . box_b : ( tensor ) bounding boxes Shape : [ B 4 ] . Return : ( tensor ) intersection area Shape : [ A B ] .
def intersect(box_a, box_b):
    """ We resize both tensors to [A,B,2] without new malloc:
    [A,2] -> [A,1,2] -> [A,B,2]
    [B,2] -> [1,B,2] -> [A,B,2]
    Then we compute the area of intersect between box_a and box_b.
    Args:
      box_a: (tensor) bounding boxes, Shape: [A,4].
      box_b: (tensor) bounding boxes, Shape: [B,4].
    Return:
      (tensor) intersection area, Shape: [A,B].
    """
    A = box_a.size(0)
    B = box_b.size(0)
    max_xy = torch.min(box_a[:, 2:].unsqueeze(1).expand(A, B, 2),
                       box_b[:, 2:].unsqueeze(0).expand(A, B, 2))
    min_xy = torch.max(box_a[:, :2].unsqueeze(1).expand(A, B, 2),
                       box_b[:, :2].unsqueeze(0).expand(A, B, 2))
    inter = torch.clamp((max_xy - min_xy), min=0)
    return inter[:, :, 0] * inter[:, :, 1]
def intersect ( box_a , box_b ) : A = box_a . size ( 0 ) B = box_b . size ( 0 ) max_xy = torch . min ( box_a [ : , 2 : ] . unsqueeze ( 1 ) . expand ( A , B , 2 ) , box_b [ : , 2 : ] . unsqueeze ( 0 ) . expand ( A , B , 2 ) ) min_xy = torch . max ( box_a [ : , : 2 ] . unsqueeze ( 1 ) . expand ( A , B , 2 ) , box_b [ : , : 2 ] . unsqueeze ( 0 ) . expand ( A , B , 2 ) ) inter = torch . clamp ( ( max_xy - min_xy ) , min = 0 ) return inter [ : , : , 0 ] * inter [ : , : , 1 ]