mmdetection3d icon indicating copy to clipboard operation
mmdetection3d copied to clipboard

data_converter.nuscenes_converter.py is too slow, and one line change can improve the speed greatly

Open MzeroMiko opened this issue 2 years ago • 0 comments

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

MzeroMiko avatar Sep 13 '22 16:09 MzeroMiko