Beispiel #1
0
def d3_box_overlap(boxes, qboxes, criterion=-1, z_axis=1, z_center=1.0):
    """kitti camera format z_axis=1.
    """
    bev_axes = list(range(7))
    bev_axes.pop(z_axis + 3)
    bev_axes.pop(z_axis)
    rinc = rotate_iou_gpu_eval(boxes[:, bev_axes], qboxes[:, bev_axes], 2)
    d3_box_overlap_kernel(boxes, qboxes, rinc, criterion, z_axis, z_center)
    return rinc
def box3d_overlap(boxes, qboxes, criterion=-1, z_axis=1, z_center=1.0):
    """kitti camera format z_axis=1.
    """
    bev_axes = list(range(7))
    bev_axes.pop(z_axis + 3)
    bev_axes.pop(z_axis)

    # t = time.time()
    # rinc = box_np_ops.rinter_cc(boxes[:, bev_axes], qboxes[:, bev_axes])
    rinc = rotate_iou_gpu_eval(boxes[:, bev_axes], qboxes[:, bev_axes], 2)
    # print("riou time", time.time() - t)
    box3d_overlap_kernel(boxes, qboxes, rinc, criterion, z_axis, z_center)
    return rinc
Beispiel #3
0
def riou3d(boxes, qboxes):
    rinc = rotate_iou_gpu_eval(boxes[:, [0, 1, 3, 4, 6]],
                               qboxes[:, [0, 1, 3, 4, 6]], 2)
    riou3d_lidar_kernel(boxes, qboxes, rinc)
    return rinc
Beispiel #4
0
def d3_box_overlap(boxes, qboxes, criterion=-1):
    rinc = rotate_iou_gpu_eval(boxes[:, [0, 2, 3, 5, 6]],
                               qboxes[:, [0, 2, 3, 5, 6]], 2)
    d3_box_overlap_kernel(boxes, qboxes, rinc, criterion)
    return rinc
Beispiel #5
0
def bev_box_overlap(boxes, qboxes, criterion=-1):
    riou = rotate_iou_gpu_eval(boxes, qboxes, criterion)
    return riou
def bev_box_overlap(boxes, qboxes, criterion=-1, stable=True):
    # riou = box_np_ops.riou_cc(boxes, qboxes)
    riou = rotate_iou_gpu_eval(boxes, qboxes, criterion)
    return riou
def boxes_iou_3d(targets_bbox3d,
                 anchors_bbox3d,
                 aug_thickness=None,
                 criterion=-1,
                 only_xy=False,
                 flag=''):
    '''
  about criterion check:
    /home/z/Research/Detection_3D/second/core/non_max_suppression/nms_gpu.py devRotateIoUEval

  # implementation from https://github.com/kuangliu/torchcv/blob/master/torchcv/utils/box.py
  # with slight modifications
  '''

    if flag == 'rpn_label_generation':
        assert aug_thickness['anchor_Y'] == 0
        assert aug_thickness['target_Y'] >= 0.3
    elif flag == 'roi_label_generation':
        assert aug_thickness['anchor_Y'] >= 0.3
        assert aug_thickness['target_Y'] >= 0.3
    elif flag == 'eval':
        assert aug_thickness['anchor_Y'] <= 0.3
        assert aug_thickness['target_Y'] <= 0.3
    elif flag == 'rpn_post' or flag == 'roi_post':
        assert aug_thickness is None
    else:
        print(flag)
        print(aug_thickness)
        raise NotImplementedError

    if aug_thickness is None:
        ma = 0.0
        aug_thickness = {
            'target_Y': ma,
            'target_Z': ma,
            'anchor_Y': ma,
            'anchor_Z': ma
        }

    #print(f'{flag}\n{aug_thickness}\n')

    targets_bbox3d = targets_bbox3d.clone().detach()
    anchors_bbox3d = anchors_bbox3d.clone().detach()

    targets_bbox3d[:, 3] = torch.clamp(targets_bbox3d[:, 3],
                                       min=aug_thickness['target_Y'])
    anchors_bbox3d[:, 3] = torch.clamp(anchors_bbox3d[:, 3],
                                       min=aug_thickness['anchor_Y'])
    targets_bbox3d[:, 5] = torch.clamp(targets_bbox3d[:, 5],
                                       min=aug_thickness['target_Z'])
    anchors_bbox3d[:, 5] = torch.clamp(anchors_bbox3d[:, 5],
                                       min=aug_thickness['anchor_Z'])

    iouz = iou_one_dim(targets_bbox3d[:, [2, 5]], anchors_bbox3d[:, [2, 5]])

    cuda_index = targets_bbox3d.device.index
    anchors_2d = anchors_bbox3d[:, [0, 1, 3, 4, 6]].cpu().data.numpy()
    targets_2d = targets_bbox3d[:, [0, 1, 3, 4, 6]].cpu().data.numpy()

    #print(f"targets yaw : {targets_2d[:,-1].min()} , {targets_2d[:,-1].max()}")
    #print(f"anchors yaw : {anchors_2d[:,-1].min()} , {anchors_2d[:,-1].max()}")

    # aug thickness. When thickness==0, iou is wrong
    #targets_2d[:,2] = np.clip(targets_2d[:,2], a_min=aug_thickness['target'], a_max=None)
    #anchors_2d[:,2] = np.clip(anchors_2d[:,2], a_min=aug_thickness['anchor'], a_max=None)

    #aug_th_mask = (targets_2d[:,2] < 0.3).astype(np.float32)
    #targets_2d[:,2] += aug_thickness['target'] * aug_th_mask  # 0.25
    #aug_th_mask = (anchors_2d[:,2] < 0.3).astype(np.float32)
    #anchors_2d[:,2] += aug_thickness['anchor'] * aug_th_mask

    # criterion=1: use targets_2d as ref
    iou2d = rotate_iou_gpu_eval(targets_2d,
                                anchors_2d,
                                criterion=criterion,
                                device_id=cuda_index)
    iou2d = torch.from_numpy(iou2d)
    iou2d = iou2d.to(targets_bbox3d.device)

    if only_xy:
        iou3d = iou2d
    else:
        iou3d = iou2d * iouz

    if DEBUG and flag == 'eval':
        if iou3d.max() < 1:
            return iou3d

        mask = iou3d == iou3d.max()
        t_i, a_i = torch.nonzero(mask)[0]
        t = targets[t_i]
        a = anchors[a_i]
        print(f"max iou: {iou3d.max()}")
        a.show_together(t)

        if iou3d.max() > 1:
            torch.set_printoptions(precision=16)
            print(a.bbox3d)
            print(t.bbox3d)

            #np.set_printoptions(precision=10)
            #print(a.bbox3d.cpu().data.numpy())
            #print(t.bbox3d.cpu().data.numpy())

            areas = rotate_iou_gpu_eval(targets_2d,
                                        anchors_2d,
                                        criterion=3,
                                        device_id=cuda_index)
            ious0 = rotate_iou_gpu_eval(targets_2d,
                                        anchors_2d,
                                        criterion=0,
                                        device_id=cuda_index)
            ious1 = rotate_iou_gpu_eval(targets_2d,
                                        anchors_2d,
                                        criterion=1,
                                        device_id=cuda_index)
            import pdb
            pdb.set_trace()  # XXX BREAKPOINT
            areas_max = areas[t_i, a_i]
            import pdb
            pdb.set_trace()  # XXX BREAKPOINT

        iou_preds = iou3d.max(0)[0]
        mask = iou3d == iou_preds.min()
        t_i, a_i = torch.nonzero(mask)[0]
        t = targets[t_i]
        a = anchors[a_i]
        print(f"min pred iou: {iou_preds.min()}")
        a.show_together(t)
        anchors.show_highlight([a_i])
        targets.show_highlight([t_i])
        import pdb
        pdb.set_trace()  # XXX BREAKPOINT
        pass

    return iou3d
Beispiel #8
0
def bev_box_overlap(boxes, qboxes, criterion=-1, stable=False):
    if stable:
        riou = box_np_ops.riou_cc(boxes, qboxes)
    else:
        riou = rotate_iou_gpu_eval(boxes, qboxes, criterion)
    return riou