|
from os import path as osp |
|
from pathlib import Path |
|
|
|
import mmengine |
|
|
|
total_num = { |
|
0: 4541, |
|
1: 1101, |
|
2: 4661, |
|
3: 801, |
|
4: 271, |
|
5: 2761, |
|
6: 1101, |
|
7: 1101, |
|
8: 4071, |
|
9: 1591, |
|
10: 1201, |
|
11: 921, |
|
12: 1061, |
|
13: 3281, |
|
14: 631, |
|
15: 1901, |
|
16: 1731, |
|
17: 491, |
|
18: 1801, |
|
19: 4981, |
|
20: 831, |
|
21: 2721, |
|
} |
|
fold_split = { |
|
'train': [0, 1, 2, 3, 4, 5, 6, 7, 9, 10], |
|
'val': [8], |
|
'test': [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], |
|
} |
|
split_list = ['train', 'valid', 'test'] |
|
|
|
|
|
def get_semantickitti_info(split): |
|
"""Create info file in the form of |
|
data_infos={ |
|
'metainfo': {'DATASET': 'SemanticKITTI'}, |
|
'data_list': { |
|
00000: { |
|
'lidar_points':{ |
|
'lidat_path':'sequences/00/velodyne/000000.bin' |
|
}, |
|
'pts_semantic_mask_path': |
|
'sequences/000/labels/000000.labbel', |
|
'sample_id': '00' |
|
}, |
|
... |
|
} |
|
} |
|
""" |
|
data_infos = dict() |
|
data_infos['metainfo'] = dict(DATASET='SemanticKITTI') |
|
data_list = [] |
|
for i_folder in fold_split[split]: |
|
for j in range(0, total_num[i_folder]): |
|
data_list.append({ |
|
'lidar_points': { |
|
'lidar_path': |
|
osp.join('sequences', |
|
str(i_folder).zfill(2), 'velodyne', |
|
str(j).zfill(6) + '.bin'), |
|
'num_pts_feats': |
|
4 |
|
}, |
|
'pts_semantic_mask_path': |
|
osp.join('sequences', |
|
str(i_folder).zfill(2), 'labels', |
|
str(j).zfill(6) + '.label'), |
|
'sample_id': |
|
str(i_folder) + str(j) |
|
}) |
|
data_infos.update(dict(data_list=data_list)) |
|
return data_infos |
|
|
|
|
|
def create_semantickitti_info_file(pkl_prefix, save_path): |
|
"""Create info file of SemanticKITTI dataset. |
|
|
|
Directly generate info file without raw data. |
|
|
|
Args: |
|
pkl_prefix (str): Prefix of the info file to be generated. |
|
save_path (str): Path to save the info file. |
|
""" |
|
print('Generate info.') |
|
save_path = Path(save_path) |
|
|
|
semantickitti_infos_train = get_semantickitti_info(split='train') |
|
filename = save_path / f'{pkl_prefix}_infos_train.pkl' |
|
print(f'SemanticKITTI info train file is saved to {filename}') |
|
mmengine.dump(semantickitti_infos_train, filename) |
|
semantickitti_infos_val = get_semantickitti_info(split='val') |
|
filename = save_path / f'{pkl_prefix}_infos_val.pkl' |
|
print(f'SemanticKITTI info val file is saved to {filename}') |
|
mmengine.dump(semantickitti_infos_val, filename) |
|
semantickitti_infos_test = get_semantickitti_info(split='test') |
|
filename = save_path / f'{pkl_prefix}_infos_test.pkl' |
|
print(f'SemanticKITTI info test file is saved to {filename}') |
|
mmengine.dump(semantickitti_infos_test, filename) |
|
|