Data Toolkits
To facilitate future research, we leverage two popular large-scale autonomous driving datasets, nuScenes and Waymo, which you need to download and organize first as step 1 in Instructions. And then you can apply our toolkits in GitHub to generate noisy datasets:
nuScenes-R python tools/create_noise_data_nuscenes.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes
noisy pkl: dict(
'lidar': dict(...) # noisy infos of lidar
'camera': dict(...) # noisy infos of camera
)
lidar: dict(
'xxxx.bin': dict(...),
'xxxx.bin': dict(...)
)
dict(
'prev': 'xxxx.bin' or '' ,
'cam': dict('CAM_FRONT':'xxx.jpg', 'CAM_FRONT_RIGHT':'xxx.jpg', ...),
'mmdet': dict(),
'noise': dict(
'drop_frames': dict(
'10': dict('discrete': dict('stuck': True or False, 'replace': 'xxx.bin',
'consecutive': dict('stuck': True or False, 'replace': 'xxx.bin',
)
'20':
...
'90':
),
'object_failure': True/False
)
)
camera: dict(
'xxxx.jpg': dict(...),
'xxxx.jpg': dict(...)
)
dict(
'type': 'CAM_FRONT' or 'CAM_FRONT_RIGHT' or ... ,
'prev': 'xxxx.jpg' or '' ,
'lidar': dict('file_name': 'xxx.bin') ,
'noise': dict(
'drop_frames': dict(
'10': dict('discrete': dict('stuck': True or False, 'replace': 'xxx.jpg'
'consecutive': dict('stuck': True or False, 'replace': 'xxx.jpg'
)
'20':
...
'90':
)
'extrinsics_noise': dict(
'sensor2ego_translation': xxx,
'single_noise_sensor2ego_translation': xxx,
'all_noise_sensor2ego_translation': xxx,
...
),
'mask_noise': dict(
'mask_id': xxx,
)
)
)
Waymo-R python tools/create_noise_data_waymo.py waymo --root-path data/waymo --out-dir data/waymo --workers 128 --extra-tag waymo
noisy pkl: Similar to the nuScenes-R
Data Instructions
When you download the noisy val pkl files in Download or generate it using our toolkit above. You can evaluate your LiDAR-camera fusion methods on our benchmark as the detailed instructions in GitHub. For example, using noise of lidar object failure:LiDAR Object Failure:
class Randomdropforeground(object):
def __init__(self, noise_nuscenes_ann_file=''):
noise_data = mmcv.load(noise_nuscenes_ann_file, file_format='pkl')
self.noise_lidar_data = noise_data['lidar']
@staticmethod
def remove_points_in_boxes(points, boxes):
masks = box_np_ops.points_in_rbbox(points.coord.numpy(), boxes)
points = points[np.logical_not(masks.any(-1))]
return points
def __call__(self, input_dict):
gt_bboxes_3d = input_dict['gt_bboxes_3d']
gt_labels_3d = input_dict['gt_labels_3d']
pts_filename = input_dict['pts_filename']
noise_index = pts_filename.split('/')[-1]
points = input_dict['points']
if self.noise_lidar_data[noise_index]['noise']['object_failure']:
points = self.remove_points_in_boxes(points, gt_bboxes_3d.tensor.numpy())
input_dict['points'] = points
return input_dict
def __repr__(self):
repr_str = self.__class__.__name__
repr_str += ' fore_drop_rate={})'.format(self.drop_rate)
return repr_str
Data Examples
We show the collected real-world noisy data cases of autonomous driving as follows:Limited LiDAR field-of-view (FOV).

LiDAR object failure.

Camera lens occlusion.

Spatial misalignment.

Temporal misalignment.
