def build(input_reader_config, model_config, training, voxel_generator, target_assigner=None): """Builds a tensor dictionary based on the InputReader config. Args: input_reader_config: A input_reader_pb2.InputReader object. Returns: A tensor dict based on the input_reader_config. Raises: ValueError: On invalid input reader proto. ValueError: If no input paths are specified. """ if not isinstance(input_reader_config, input_reader_pb2.InputReader): raise ValueError('input_reader_config not of type ' 'input_reader_pb2.InputReader.') generate_bev = model_config.use_bev without_reflectivity = model_config.without_reflectivity num_point_features = model_config.num_point_features out_size_factor = model_config.rpn.layer_strides[0] // model_config.rpn.upsample_strides[0] cfg = input_reader_config db_sampler_cfg = input_reader_config.database_sampler db_sampler = None if len(db_sampler_cfg.sample_groups) > 0: # enable sample db_sampler = dbsampler_builder.build(db_sampler_cfg) u_db_sampler_cfg = input_reader_config.unlabeled_database_sampler u_db_sampler = None if len(u_db_sampler_cfg.sample_groups) > 0: # enable sample u_db_sampler = dbsampler_builder.build(u_db_sampler_cfg) grid_size = voxel_generator.grid_size # [352, 400] feature_map_size = grid_size[:2] // out_size_factor feature_map_size = [*feature_map_size, 1][::-1] prep_func = partial( prep_pointcloud, root_path=cfg.kitti_root_path, class_names=list(cfg.class_names), voxel_generator=voxel_generator, target_assigner=target_assigner, training=training, max_voxels=cfg.max_number_of_voxels, remove_outside_points=False, remove_unknown=cfg.remove_unknown_examples, create_targets=training, shuffle_points=cfg.shuffle_points, gt_rotation_noise=list(cfg.groundtruth_rotation_uniform_noise), gt_loc_noise_std=list(cfg.groundtruth_localization_noise_std), global_rotation_noise=list(cfg.global_rotation_uniform_noise), global_scaling_noise=list(cfg.global_scaling_uniform_noise), global_loc_noise_std=(0.2, 0.2, 0.2), global_random_rot_range=list( cfg.global_random_rotation_range_per_object), db_sampler=db_sampler, unlabeled_db_sampler=u_db_sampler, generate_bev=generate_bev, without_reflectivity=without_reflectivity, num_point_features=num_point_features, anchor_area_threshold=cfg.anchor_area_threshold, gt_points_drop=cfg.groundtruth_points_drop_percentage, gt_drop_max_keep=cfg.groundtruth_drop_max_keep_points, remove_points_after_sample=cfg.remove_points_after_sample, remove_environment=cfg.remove_environment, use_group_id=cfg.use_group_id, out_size_factor=out_size_factor) dataset = KittiDataset( info_path=cfg.kitti_info_path, root_path=cfg.kitti_root_path, num_point_features=num_point_features, target_assigner=target_assigner, feature_map_size=feature_map_size, prep_func=prep_func) return dataset
def build(input_reader_config, model_config, training, voxel_generator, target_assigner, multi_gpu=False): """Builds a tensor dictionary based on the InputReader config. Args: input_reader_config: A input_reader_pb2.InputReader object. Returns: A tensor dict based on the input_reader_config. Raises: ValueError: On invalid input reader proto. ValueError: If no input paths are specified. """ if not isinstance(input_reader_config, input_reader_pb2.InputReader): raise ValueError('input_reader_config not of type ' 'input_reader_pb2.InputReader.') prep_cfg = input_reader_config.preprocess dataset_cfg = input_reader_config.dataset num_point_features = model_config.num_point_features out_size_factor = get_downsample_factor(model_config) assert out_size_factor > 0 cfg = input_reader_config db_sampler_cfg = prep_cfg.database_sampler db_sampler = None if len(db_sampler_cfg.sample_groups) > 0: # enable sample db_sampler = dbsampler_builder.build(db_sampler_cfg) grid_size = voxel_generator.grid_size # [352, 400] feature_map_size = grid_size[:2] // out_size_factor feature_map_size = [*feature_map_size, 1][::-1] print("feature_map_size", feature_map_size) assert all([n != '' for n in target_assigner.classes ]), "you must specify class_name in anchor_generators." dataset_cls = get_dataset_class(dataset_cfg.dataset_class_name) assert dataset_cls.NumPointFeatures >= 3, "you must set this to correct value" assert dataset_cls.NumPointFeatures == num_point_features, "currently you need keep them same" prep_func = partial( prep_pointcloud, root_path=dataset_cfg.kitti_root_path, voxel_generator=voxel_generator, target_assigner=target_assigner, training=training, max_voxels=prep_cfg.max_number_of_voxels, remove_outside_points=False, remove_unknown=prep_cfg.remove_unknown_examples, create_targets=training, shuffle_points=prep_cfg.shuffle_points, gt_rotation_noise=list(prep_cfg.groundtruth_rotation_uniform_noise), gt_loc_noise_std=list(prep_cfg.groundtruth_localization_noise_std), global_rotation_noise=list(prep_cfg.global_rotation_uniform_noise), global_scaling_noise=list(prep_cfg.global_scaling_uniform_noise), global_random_rot_range=list( prep_cfg.global_random_rotation_range_per_object), global_translate_noise_std=list(prep_cfg.global_translate_noise_std), db_sampler=db_sampler, num_point_features=dataset_cls.NumPointFeatures, anchor_area_threshold=prep_cfg.anchor_area_threshold, gt_points_drop=prep_cfg.groundtruth_points_drop_percentage, gt_drop_max_keep=prep_cfg.groundtruth_drop_max_keep_points, remove_points_after_sample=prep_cfg.remove_points_after_sample, remove_environment=prep_cfg.remove_environment, use_group_id=prep_cfg.use_group_id, out_size_factor=out_size_factor, multi_gpu=multi_gpu) ret = target_assigner.generate_anchors(feature_map_size) class_names = target_assigner.classes anchors_dict = target_assigner.generate_anchors_dict(feature_map_size) anchors = ret["anchors"] anchors = anchors.reshape([-1, 7]) matched_thresholds = ret["matched_thresholds"] unmatched_thresholds = ret["unmatched_thresholds"] anchors_bv = box_np_ops.rbbox2d_to_near_bbox(anchors[:, [0, 1, 3, 4, 6]]) anchor_cache = { "anchors": anchors, "anchors_bv": anchors_bv, "matched_thresholds": matched_thresholds, "unmatched_thresholds": unmatched_thresholds, "anchors_dict": anchors_dict, } prep_func = partial(prep_func, anchor_cache=anchor_cache) dataset = dataset_cls(info_path=dataset_cfg.kitti_info_path, root_path=dataset_cfg.kitti_root_path, class_names=class_names, prep_func=prep_func) return dataset
def build(input_reader_config, model_config, training, voxel_generator, target_assigner, multi_gpu=False): """Builds a tensor dictionary based on the InputReader config. Args: input_reader_config: A input_reader_pb2.InputReader object. Returns: A tensor dict based on the input_reader_config. Raises: ValueError: On invalid input reader proto. ValueError: If no input paths are specified. """ if not isinstance(input_reader_config, input_reader_pb2.InputReader): raise ValueError('input_reader_config not of type ' 'input_reader_pb2.InputReader.') prep_cfg = input_reader_config.preprocess dataset_cfg = input_reader_config.dataset #kitti_info_path: "/home/lichao/v1.0-mini/infos_train.pkl" # kitti_root_path: "/home/lichao/v1.0-mini" # dataset_class_name: "NuScenesDataset" num_point_features = model_config.num_point_features #4 out_size_factor = get_downsample_factor(model_config) #8 assert out_size_factor > 0 cfg = input_reader_config db_sampler_cfg = prep_cfg.database_sampler #database_info_path: "/home/lichao/v1.0-mini/kitti_dbinfos_train.pkl" # sample_groups { name_to_max_num key: "car" value: 30 } } global_random_rotation_range_per_object: 0.0# global_random_rotation_range_per_object: 0.0# rate: 1.0 db_sampler = None if len(db_sampler_cfg.sample_groups ) > 0 or db_sampler_cfg.database_info_path != "": # enable sample db_sampler = dbsampler_builder.build(db_sampler_cfg) #加载了gt_base的一些东西 grid_size = voxel_generator.grid_size #[400,400] feature_map_size = grid_size[:2] // out_size_factor #[50,50] feature_map_size = [*feature_map_size, 1][::-1] #[50,50] print("feature_map_size", feature_map_size) assert all([n != '' for n in target_assigner.classes ]), "you must specify class_name in anchor_generators." dataset_cls = get_dataset_class( dataset_cfg.dataset_class_name) # NuScenesDataset assert dataset_cls.NumPointFeatures >= 3, "you must set this to correct value" assert dataset_cls.NumPointFeatures == num_point_features, "currently you need keep them same" prep_func = partial( #pre_func partial 的功能:固定函数参数,返回一个新的函数。 prep_pointcloud, #data\preprocess.py root_path=dataset_cfg.kitti_root_path, voxel_generator=voxel_generator, #VoxelGeneratorV2 target_assigner=target_assigner, training=training, max_voxels=prep_cfg.max_number_of_voxels, #25000 eval 30000 remove_outside_points=False, remove_unknown=prep_cfg.remove_unknown_examples, create_targets=training, shuffle_points=prep_cfg.shuffle_points, gt_rotation_noise=list(prep_cfg.groundtruth_rotation_uniform_noise), gt_loc_noise_std=list(prep_cfg.groundtruth_localization_noise_std), global_rotation_noise=list(prep_cfg.global_rotation_uniform_noise), global_scaling_noise=list(prep_cfg.global_scaling_uniform_noise), global_random_rot_range=list( prep_cfg.global_random_rotation_range_per_object), global_translate_noise_std=list(prep_cfg.global_translate_noise_std), db_sampler=db_sampler, num_point_features=dataset_cls.NumPointFeatures, anchor_area_threshold=prep_cfg.anchor_area_threshold, gt_points_drop=prep_cfg.groundtruth_points_drop_percentage, gt_drop_max_keep=prep_cfg.groundtruth_drop_max_keep_points, remove_points_after_sample=prep_cfg.remove_points_after_sample, remove_environment=prep_cfg.remove_environment, use_group_id=prep_cfg.use_group_id, out_size_factor=out_size_factor, #8 multi_gpu=multi_gpu, min_points_in_gt=prep_cfg.min_num_of_points_in_gt, random_flip_x=prep_cfg.random_flip_x, random_flip_y=prep_cfg.random_flip_y, sample_importance=prep_cfg.sample_importance) ret = target_assigner.generate_anchors(feature_map_size) class_names = target_assigner.classes # ['car', 'bicycle', 'bus', 'construction_vehicle', 'motorcycle', 'pedestrian', 'traffic_cone', 'trailer', 'truck', 'barrier'] anchors_dict = target_assigner.generate_anchors_dict(feature_map_size) anchors_list = [] for k, v in anchors_dict.items(): anchors_list.append(v["anchors"]) #50000个 # anchors = ret["anchors"] anchors = np.concatenate(anchors_list, axis=0) anchors = anchors.reshape([-1, target_assigner.box_ndim]) assert np.allclose(anchors, ret["anchors"].reshape(-1, target_assigner.box_ndim)) matched_thresholds = ret["matched_thresholds"] unmatched_thresholds = ret["unmatched_thresholds"] anchors_bv = box_np_ops.rbbox2d_to_near_bbox( anchors[:, [0, 1, 3, 4, 6]]) #bev_anchor 4维 anchor_cache = { "anchors": anchors, "anchors_bv": anchors_bv, "matched_thresholds": matched_thresholds, "unmatched_thresholds": unmatched_thresholds, "anchors_dict": anchors_dict, } prep_func = partial(prep_func, anchor_cache=anchor_cache) dataset = dataset_cls( info_path=dataset_cfg.kitti_info_path, #数据的路径 root_path=dataset_cfg.kitti_root_path, class_names=class_names, #10个类 prep_func=prep_func) return dataset # _nusc_infos <class 'dict'>: {'lidar_path': '/home/lichao/v1.0-mini/samples/LIDAR_TOP/n015-2018-07-24-11-22-45+0800__LIDAR_TOP__1532402927647951.pcd.bin', 'cam_front_path': '/home/lichao/v1.0-mini/samples/CAM_FRONT/n015-2018-07-24-11-22-45+0800__CAM_FRONT__1532402927612460.jpg', 'token': 'ca9a282c9e77460f8360f564131a8af5', 'sweeps': [], 'lidar2ego_translation': [0.943713, 0.0, 1.84023], 'lidar2ego_rotation': [0.7077955119163518, -0.006492242056004365, 0.010646214713995808, -0.7063073142877817], 'ego2global_translation': [411.3039349319818, 1180.8903791765097, 0.0], 'ego2global_rotation': [0.5720320396729045, -0.0016977771610471074, 0.011798001930183783, -0.8201446642457809], 'timestamp': 1532402927647951, 'gt_boxes': array([[ 1.84143850e+01, 5.95160251e+01, 7.69634574e-01,
def build( input_reader_config, model_config, training, voxel_generator, target_assigner, multi_gpu=False, generate_anchors_cachae=True, #True for pillar and second segmentation=False, bcl_keep_voxels=None, seg_keep_points=None, points_per_voxel=None): """Builds a tensor dictionary based on the InputReader config. Args: input_reader_config: A input_reader_pb2.InputReader object. Returns: A tensor dict based on the input_reader_config. Raises: ValueError: On invalid input reader proto. ValueError: If no input paths are specified. """ if not isinstance(input_reader_config, input_reader_pb2.InputReader): raise ValueError('input_reader_config not of type ' 'input_reader_pb2.InputReader.') prep_cfg = input_reader_config.preprocess dataset_cfg = input_reader_config.dataset num_point_features = model_config.num_point_features out_size_factor = get_downsample_factor(model_config) assert out_size_factor > 0 cfg = input_reader_config db_sampler_cfg = prep_cfg.database_sampler db_sampler = None if len(db_sampler_cfg.sample_groups ) > 0 or db_sampler_cfg.database_info_path != "": # enable sample db_sampler = dbsampler_builder.build(db_sampler_cfg) grid_size = voxel_generator.grid_size feature_map_size = grid_size[:2] // out_size_factor feature_map_size = [*feature_map_size, 1][::-1] print("feature_map_size", feature_map_size) assert all([n != '' for n in target_assigner.classes ]), "you must specify class_name in anchor_generators." dataset_cls = get_dataset_class(dataset_cfg.dataset_class_name) assert dataset_cls.NumPointFeatures >= 3, "you must set this to correct value" assert dataset_cls.NumPointFeatures == num_point_features, "currently you need keep them same" prep_func = partial( prep_pointcloud, root_path=dataset_cfg.kitti_root_path, voxel_generator=voxel_generator, target_assigner=target_assigner, training=training, max_voxels=prep_cfg.max_number_of_voxels, remove_outside_points=False, remove_unknown=prep_cfg.remove_unknown_examples, create_targets=training, shuffle_points=prep_cfg.shuffle_points, gt_rotation_noise=list(prep_cfg.groundtruth_rotation_uniform_noise), gt_loc_noise_std=list(prep_cfg.groundtruth_localization_noise_std), global_rotation_noise=list(prep_cfg.global_rotation_uniform_noise), global_scaling_noise=list(prep_cfg.global_scaling_uniform_noise), global_random_rot_range=list( prep_cfg.global_random_rotation_range_per_object), global_translate_noise_std=list(prep_cfg.global_translate_noise_std), db_sampler=db_sampler, num_point_features=dataset_cls.NumPointFeatures, anchor_area_threshold=prep_cfg.anchor_area_threshold, gt_points_drop=prep_cfg.groundtruth_points_drop_percentage, gt_drop_max_keep=prep_cfg.groundtruth_drop_max_keep_points, remove_points_after_sample=prep_cfg.remove_points_after_sample, remove_environment=prep_cfg.remove_environment, use_group_id=prep_cfg.use_group_id, out_size_factor=out_size_factor, multi_gpu=multi_gpu, min_points_in_gt=prep_cfg.min_num_of_points_in_gt, random_flip_x=prep_cfg.random_flip_x, random_flip_y=prep_cfg.random_flip_y, sample_importance=prep_cfg.sample_importance) """#leo add condition for catch is understand plz delete the comment""" anchor_cache = None class_names = target_assigner.classes if generate_anchors_cachae: ret = target_assigner.generate_anchors( feature_map_size) #use bcl as voxel comment this line anchors_dict = target_assigner.generate_anchors_dict(feature_map_size) anchors_list = [] for k, v in anchors_dict.items(): anchors_list.append(v["anchors"]) # anchor_cache = None #if wants generate anchors from voxels anchors = np.concatenate(anchors_list, axis=0) anchors = anchors.reshape([-1, target_assigner.box_ndim]) assert np.allclose( anchors, ret["anchors"].reshape(-1, target_assigner.box_ndim)) matched_thresholds = ret["matched_thresholds"] unmatched_thresholds = ret["unmatched_thresholds"] anchors_bv = box_np_ops.rbbox2d_to_near_bbox(anchors[:, [0, 1, 3, 4, 6]]) anchor_cache = { "anchors": anchors, "anchors_bv": anchors_bv, "matched_thresholds": matched_thresholds, "unmatched_thresholds": unmatched_thresholds, "anchors_dict": anchors_dict, } prep_func = partial(prep_func, anchor_cache=anchor_cache, segmentation=segmentation, bcl_keep_voxels=bcl_keep_voxels, seg_keep_points=seg_keep_points, points_per_voxel=points_per_voxel) dataset = dataset_cls(info_path=dataset_cfg.kitti_info_path, root_path=dataset_cfg.kitti_root_path, class_names=class_names, prep_func=prep_func) return dataset
def construct_example_for_predict(self, img, pc, rect, tr, p2): """ using params and input to construct an example :param img: :param pc: :param rect: :param tr: :param p2: :return: """ generate_bev = self.model_cfg.use_bev without_reflectivity = self.model_cfg.without_reflectivity num_point_features = self.model_cfg.num_point_features out_size_factor = self.model_cfg.rpn.layer_strides[ 0] // self.model_cfg.rpn.upsample_strides[0] cfg = self.input_cfg db_sampler_cfg = self.input_cfg.database_sampler db_sampler = None if len(db_sampler_cfg.sample_groups) > 0: # enable sample db_sampler = dbsampler_builder.build(db_sampler_cfg) u_db_sampler_cfg = self.input_cfg.unlabeled_database_sampler u_db_sampler = None if len(u_db_sampler_cfg.sample_groups) > 0: # enable sample u_db_sampler = dbsampler_builder.build(u_db_sampler_cfg) voxel_generator = voxel_builder.build(self.model_cfg.voxel_generator) grid_size = voxel_generator.grid_size # [352, 400] feature_map_size = grid_size[:2] // out_size_factor feature_map_size = [*feature_map_size, 1][::-1] ret = self.target_assigner.generate_anchors(feature_map_size) anchors = ret["anchors"] anchors = anchors.reshape([-1, 7]) matched_thresholds = ret["matched_thresholds"] unmatched_thresholds = ret["unmatched_thresholds"] anchors_bv = box_np_ops.rbbox2d_to_near_bbox(anchors[:, [0, 1, 3, 4, 6]]) anchor_cache = { "anchors": anchors, "anchors_bv": anchors_bv, "matched_thresholds": matched_thresholds, "unmatched_thresholds": unmatched_thresholds, } # preparing point cloud prep_func = partial( prep_pointcloud, root_path=cfg.kitti_root_path, class_names=list(cfg.class_names), voxel_generator=voxel_generator, target_assigner=self.target_assigner, training=False, max_voxels=cfg.max_number_of_voxels, remove_outside_points=False, remove_unknown=cfg.remove_unknown_examples, create_targets=False, shuffle_points=cfg.shuffle_points, gt_rotation_noise=list(cfg.groundtruth_rotation_uniform_noise), gt_loc_noise_std=list(cfg.groundtruth_localization_noise_std), global_rotation_noise=list(cfg.global_rotation_uniform_noise), global_scaling_noise=list(cfg.global_scaling_uniform_noise), global_random_rot_range=list( cfg.global_random_rotation_range_per_object), db_sampler=db_sampler, unlabeled_db_sampler=u_db_sampler, generate_bev=generate_bev, without_reflectivity=without_reflectivity, num_point_features=num_point_features, anchor_area_threshold=cfg.anchor_area_threshold, gt_points_drop=cfg.groundtruth_points_drop_percentage, gt_drop_max_keep=cfg.groundtruth_drop_max_keep_points, remove_points_after_sample=cfg.remove_points_after_sample, remove_environment=cfg.remove_environment, use_group_id=cfg.use_group_id, out_size_factor=out_size_factor, anchor_cache=anchor_cache, ) example = prepare_v9_for_predict(img, pc, num_point_features, r0_rect=rect, tr_velo_2_cam=tr, p2=p2, prep_func=prep_func) return example