def generate_prediction_dict(input_dict, index, record_dict): # finally generate predictions. sample_idx = input_dict['sample_idx'][ index] if 'sample_idx' in input_dict else -1 boxes3d_lidar_preds = record_dict['boxes'].cpu().numpy() if boxes3d_lidar_preds.shape[0] == 0: return {'sample_idx': sample_idx} calib = input_dict['calib'][index] image_shape = input_dict['image_shape'][index] boxes3d_camera_preds = box_utils.boxes3d_lidar_to_camera( boxes3d_lidar_preds, calib) boxes2d_image_preds = box_utils.boxes3d_camera_to_imageboxes( boxes3d_camera_preds, calib, image_shape=image_shape) # predictions predictions_dict = { 'bbox': boxes2d_image_preds, 'box3d_camera': boxes3d_camera_preds, 'box3d_lidar': boxes3d_lidar_preds, 'scores': record_dict['scores'].cpu().numpy(), 'label_preds': record_dict['labels'].cpu().numpy(), 'sample_idx': sample_idx, } return predictions_dict
def generate_prediction_dict(input_dict, index, record_dict): """ Generate the prediction dict for EACH sample, called by the post processing. All this fn does really is mapping prediciton boxes to camera coordinates putting things together in a predictions_dict. Args: input_dict: provided by the dataset to provide dataset-specific information index: batch index of current sample record_dict: the predicted results of current sample from the detector, which currently includes these keys: { 'boxes': (N, 7 + C) [x, y, z, w, l, h, heading_in_kitti] in LiDAR coords 'scores': (N) 'labels': (N) } Returns: predictions_dict: the required prediction dict of current scene for specific dataset """ # finally generate predictions. sample_idx = input_dict['sample_idx'][ index] if 'sample_idx' in input_dict else -1 boxes3d_lidar_preds = record_dict['boxes'].cpu().numpy() if boxes3d_lidar_preds.shape[0] == 0: return {'sample_idx': sample_idx} calib = input_dict['calib'][index] image_shape = input_dict['image_shape'][index] boxes3d_camera_preds = box_utils.boxes3d_lidar_to_camera( boxes3d_lidar_preds, calib) boxes2d_image_preds = box_utils.boxes3d_camera_to_imageboxes( boxes3d_camera_preds, calib, image_shape=image_shape) # predictions predictions_dict = { 'bbox': boxes2d_image_preds, 'box3d_camera': boxes3d_camera_preds, 'box3d_lidar': boxes3d_lidar_preds, 'scores': record_dict['scores'].cpu().numpy(), 'label_preds': record_dict['labels'].cpu().numpy(), 'sample_idx': sample_idx, } return predictions_dict
def generate_prediction_dict(input_dict, index, record_dict): # finally generate predictions. sample_idx = input_dict['sample_idx'][ index] if 'sample_idx' in input_dict else -1 try: boxes3d_lidar_preds = record_dict['boxes'].cpu().numpy() except: boxes3d_lidar_preds = record_dict['boxes'].detach().cpu().numpy() if boxes3d_lidar_preds.shape[0] == 0: return {'sample_idx': sample_idx} if not cfg.DATA_CONFIG.TS_DATA: calib = input_dict['calib'][index] image_shape = input_dict['image_shape'][index] boxes3d_camera_preds = box_utils.boxes3d_lidar_to_camera( boxes3d_lidar_preds, calib) boxes2d_image_preds = box_utils.boxes3d_camera_to_imageboxes( boxes3d_camera_preds, calib, image_shape=image_shape) # predictions predictions_dict = { 'bbox': boxes2d_image_preds, 'box3d_camera': boxes3d_camera_preds, 'box3d_lidar': boxes3d_lidar_preds, 'scores': record_dict['scores'].cpu().numpy(), 'label_preds': record_dict['labels'].cpu().numpy(), 'sample_idx': sample_idx, } else: boxes3d_camera_preds = box_utils.ts_boxes3d_lidar_to_camera( boxes3d_lidar_preds) predictions_dict = { 'bbox': np.zeros((boxes3d_lidar_preds.shape[0], 4)), 'box3d_camera': boxes3d_camera_preds, 'box3d_lidar': boxes3d_lidar_preds, 'scores': record_dict['scores'].detach().cpu().numpy(), 'label_preds': record_dict['labels'].detach().cpu().numpy(), 'sample_idx': sample_idx, } return predictions_dict