import torch from . import iou3d_cuda def boxes_iou_bev(boxes_a, boxes_b): """ :param boxes_a: (M, 5) :param boxes_b: (N, 5) :return: ans_iou: (M, N) """ ans_iou = torch.cuda.FloatTensor( torch.Size((boxes_a.shape[0], boxes_b.shape[0]))).zero_() iou3d_cuda.boxes_iou_bev_gpu(boxes_a.contiguous(), boxes_b.contiguous(), ans_iou) return ans_iou def nms_gpu(boxes, scores, thresh): """ :param boxes: (N, 5) [x1, y1, x2, y2, ry] :param scores: (N) :param thresh: :return: """ # areas = (x2 - x1) * (y2 - y1) order = scores.sort(0, descending=True)[1] boxes = boxes[order].contiguous() keep = torch.LongTensor(boxes.size(0)) num_out = iou3d_cuda.nms_gpu(boxes, keep, thresh) return order[keep[:num_out].cuda()].contiguous() def nms_normal_gpu(boxes, scores, thresh): """ :param boxes: (N, 5) [x1, y1, x2, y2, ry] :param scores: (N) :param thresh: :return: """ # areas = (x2 - x1) * (y2 - y1) order = scores.sort(0, descending=True)[1] boxes = boxes[order].contiguous() keep = torch.LongTensor(boxes.size(0)) num_out = iou3d_cuda.nms_normal_gpu(boxes, keep, thresh) return order[keep[:num_out].cuda()].contiguous()