mmdetection3d
mmdetection3d copied to clipboard
data_converter.nuscenes_converter.py is too slow, and one line change can improve the speed greatly
Describe the feature
Problem nuscenes_converter.py is too slow, and can be improved. One of the bottlenecks is in data_converter.nuscenes_converter._fill_trainval_infos, line 207 "cam_path, _, cam_intrinsic = nusc.get_sample_data(cam_token)".
actually, line207 only want to get cam_instrinsic but the function nusc.get_sample_data(cam_token) spend so much time calculating box_list, which is wasted in this line.
Solution change line 207 into "cam_intrinsic = get_cam_intrinsic(cam_token)", while get_cam_intrinsic written as follow: in my machine, this would raise the speed from 12.7 task/s to 53.9 task/s.
def get_cam_intrinsic(nusc, sample_data_token):
# copied from nusc.get_sample_data
sd_record = nusc.get('sample_data', sample_data_token)
cs_record = nusc.get('calibrated_sensor', sd_record['calibrated_sensor_token'])
sensor_record = nusc.get('sensor', cs_record['sensor_token'])
# pose_record = nusc.get('ego_pose', sd_record['ego_pose_token'])
# data_path = nusc.get_sample_data_path(sample_data_token)
if sensor_record['modality'] == 'camera':
cam_intrinsic = np.array(cs_record['camera_intrinsic'])
else:
cam_intrinsic = None
# for test
# _, _, _cam_intrinsic = nusc.get_sample_data(sample_data_token)
# assert np.sum(np.abs(cam_intrinsic - _cam_intrinsic)) == 0, f'{cam_intrinsic} != {_cam_intrinsic}'
return cam_intrinsic