/
semantickitti_converter.py
103 lines (94 loc) · 3.01 KB
/
semantickitti_converter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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)