def rbbox_overlaps_cy(boxes_np, query_boxes_np): # TODO: first calculate the hbb overlaps, for overlaps > 0, calculate the obb overlaps polys_np = RotBox2Polys(boxes_np).astype(np.float) query_polys_np = RotBox2Polys(query_boxes_np).astype(np.float) h_bboxes_np = poly2bbox(polys_np).astype(np.float) h_query_bboxes_np = poly2bbox(query_polys_np).astype(np.float) # hious ious = bbox_overlaps_cython(h_bboxes_np, h_query_bboxes_np) import pdb # pdb.set_trace() inds = np.where(ious > 0) for index in range(len(inds[0])): box_index = inds[0][index] query_box_index = inds[1][index] box = polys_np[box_index] query_box = query_polys_np[query_box_index] # calculate obb iou # import pdb # pdb.set_trace() overlap = polyiou.iou_poly(polyiou.VectorDouble(box), polyiou.VectorDouble(query_box)) ious[box_index][query_box_index] = overlap return ious
def rbbox_overlaps_cy_warp(rbboxes, query_boxes): # TODO: first calculate the hbb overlaps, for overlaps > 0, calculate the obb overlaps # import pdb # pdb.set_trace() box_device = query_boxes.device query_boxes_np = query_boxes.detach().cpu().numpy().astype(np.float) # polys_np = RotBox2Polys(boxes_np) # TODO: change it to only use pos gt_masks # polys_np = mask2poly(gt_masks) # polys_np = np.array(Tuplelist2Polylist(polys_np)).astype(np.float) polys_np = RotBox2Polys(rbboxes).astype(np.float) query_polys_np = RotBox2Polys(query_boxes_np) h_bboxes_np = poly2bbox(polys_np) h_query_bboxes_np = poly2bbox(query_polys_np) # hious ious = bbox_overlaps_cython(h_bboxes_np, h_query_bboxes_np) import pdb # pdb.set_trace() inds = np.where(ious > 0) for index in range(len(inds[0])): box_index = inds[0][index] query_box_index = inds[1][index] box = polys_np[box_index] query_box = query_polys_np[query_box_index] # calculate obb iou # import pdb # pdb.set_trace() overlap = polyiou.iou_poly(polyiou.VectorDouble(box), polyiou.VectorDouble(query_box)) ious[box_index][query_box_index] = overlap return torch.from_numpy(ious).to(box_device)
def bbox_overlaps(boxes, query_boxes): return bbox_overlaps_cython(boxes, query_boxes)
def bbox_overlaps(boxes, query_boxes): return bbox_overlaps_cython(boxes, query_boxes)
def bbox_overlaps_cy(boxes, query_boxes): box_device = boxes.device boxes_np = boxes.cpu().numpy().astype(np.float) query_boxes_np = query_boxes.cpu().numpy().astype(np.float) ious = bbox_overlaps_cython(boxes_np, query_boxes_np) return torch.from_numpy(ious).to(box_device)