def pts_in_boxes3d_cpu(pts, boxes3d): """ :param pts: (N, 3) in rect-camera coords :param boxes3d: (M, 7) :return: boxes_pts_mask_list: (M), list with [(N), (N), ..] both inputs are pytorch tensors choose the points inside a bounding box and label them as a single instance """ # if the pts tensor is not on GPU (it is on cpu) if not pts.is_cuda: pts = pts.float().contiguous() boxes3d = boxes3d.float().contiguous() # a table of which point is inside which box pts_flag = torch.LongTensor(torch.Size( (boxes3d.size(0), pts.size(0)))) # (M, N) # 'pts_in_boxes3d_cpu' is a cpp function that is in the src folder (it is imported using the code in setup.py) # it probably just fills the table 'pts_flag' (haven't ead it) roipool3d_cuda.pts_in_boxes3d_cpu(pts_flag, pts, boxes3d) boxes_pts_mask_list = [] for k in range(0, boxes3d.shape[0]): cur_mask = pts_flag[k] > 0 boxes_pts_mask_list.append(cur_mask) return boxes_pts_mask_list else: raise NotImplementedError
def pts_in_boxes3d_cpu(pts, boxes3d): """ :param pts: (N, 3) in rect-camera coords :param boxes3d: (M, 7) :return: boxes_pts_mask_list: (M), list with [(N), (N), ..] """ if not pts.is_cuda: pts = pts.float().contiguous() boxes3d = boxes3d.float().contiguous() pts_flag = torch.LongTensor(torch.Size((boxes3d.size(0), pts.size(0)))) # (M, N) roipool3d_cuda.pts_in_boxes3d_cpu(pts_flag, pts, boxes3d) boxes_pts_mask_list = [] for k in range(0, boxes3d.shape[0]): cur_mask = pts_flag[k] > 0 boxes_pts_mask_list.append(cur_mask) return boxes_pts_mask_list else: raise NotImplementedError