def get_corner_loss_lidar(pred_bbox3d: torch.Tensor, gt_bbox3d: torch.Tensor):
    '\n    Args:\n        pred_bbox3d: (N, 7) float Tensor.\n        gt_bbox3d: (N, 7) float Tensor.\n\n    Returns:\n        corner_loss: (N) float Tensor.\n    '
    assert (pred_bbox3d.shape[0] == gt_bbox3d.shape[0])
    pred_box_corners = box_utils.boxes_to_corners_3d(pred_bbox3d)
    gt_box_corners = box_utils.boxes_to_corners_3d(gt_bbox3d)
    gt_bbox3d_flip = gt_bbox3d.clone()
    gt_bbox3d_flip[:, 6] += np.pi
    gt_box_corners_flip = box_utils.boxes_to_corners_3d(gt_bbox3d_flip)
    corner_dist = torch.min(torch.norm((pred_box_corners - gt_box_corners), dim=2), torch.norm((pred_box_corners - gt_box_corners_flip), dim=2))
    corner_loss = WeightedSmoothL1Loss.smooth_l1_loss(corner_dist, beta=1.0)
    return corner_loss.mean(dim=1)
Args:
    pred_bbox3d: (N, 7) float Tensor.
    gt_bbox3d: (N, 7) float Tensor.

Returns:
    corner_loss: (N) float Tensor.
def get_corner_loss_lidar(pred_bbox3d: torch.Tensor, gt_bbox3d: torch.Tensor):
    '\n    Args:\n        pred_bbox3d: (N, 7) float Tensor.\n        gt_bbox3d: (N, 7) float Tensor.\n\n    Returns:\n        corner_loss: (N) float Tensor.\n    '
    assert (pred_bbox3d.shape[0] == gt_bbox3d.shape[0])
    pred_box_corners = box_utils.boxes_to_corners_3d(pred_bbox3d)
    gt_box_corners = box_utils.boxes_to_corners_3d(gt_bbox3d)
    gt_bbox3d_flip = gt_bbox3d.clone()
    gt_bbox3d_flip[:, 6] += np.pi
    gt_box_corners_flip = box_utils.boxes_to_corners_3d(gt_bbox3d_flip)
    corner_dist = torch.min(torch.norm((pred_box_corners - gt_box_corners), dim=2), torch.norm((pred_box_corners - gt_box_corners_flip), dim=2))
    corner_loss = WeightedSmoothL1Loss.smooth_l1_loss(corner_dist, beta=1.0)
    return corner_loss.mean(dim=1)