semantickitti.py 5.68 KB
Newer Older
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
# dataset settings
dataset_type = 'SemanticKITTIDataset'
data_root = 'data/semantickitti/'
class_names = [
    'unlabeled', 'car', 'bicycle', 'motorcycle', 'truck', 'bus', 'person',
    'bicyclist', 'motorcyclist', 'road', 'parking', 'sidewalk', 'other-ground',
    'building', 'fence', 'vegetation', 'trunck', 'terrian', 'pole',
    'traffic-sign'
]
palette = [
    [174, 199, 232],
    [152, 223, 138],
    [31, 119, 180],
    [255, 187, 120],
    [188, 189, 34],
    [140, 86, 75],
    [255, 152, 150],
    [214, 39, 40],
    [197, 176, 213],
    [148, 103, 189],
    [196, 156, 148],
    [23, 190, 207],
    [247, 182, 210],
    [219, 219, 141],
    [255, 127, 14],
    [158, 218, 229],
    [44, 160, 44],
    [112, 128, 144],
    [227, 119, 194],
    [82, 84, 163],
]

labels_map = {
    0: 0,  # "unlabeled"
    1: 0,  # "outlier" mapped to "unlabeled" --------------mapped
    10: 1,  # "car"
    11: 2,  # "bicycle"
    13: 5,  # "bus" mapped to "other-vehicle" --------------mapped
    15: 3,  # "motorcycle"
    16: 5,  # "on-rails" mapped to "other-vehicle" ---------mapped
    18: 4,  # "truck"
    20: 5,  # "other-vehicle"
    30: 6,  # "person"
    31: 7,  # "bicyclist"
    32: 8,  # "motorcyclist"
    40: 9,  # "road"
    44: 10,  # "parking"
    48: 11,  # "sidewalk"
    49: 12,  # "other-ground"
    50: 13,  # "building"
    51: 14,  # "fence"
    52: 0,  # "other-structure" mapped to "unlabeled" ------mapped
    60: 9,  # "lane-marking" to "road" ---------------------mapped
    70: 15,  # "vegetation"
    71: 16,  # "trunk"
    72: 17,  # "terrain"
    80: 18,  # "pole"
    81: 19,  # "traffic-sign"
    99: 0,  # "other-object" to "unlabeled" ----------------mapped
    252: 1,  # "moving-car" to "car" ------------------------mapped
    253: 7,  # "moving-bicyclist" to "bicyclist" ------------mapped
    254: 6,  # "moving-person" to "person" ------------------mapped
    255: 8,  # "moving-motorcyclist" to "motorcyclist" ------mapped
    256: 5,  # "moving-on-rails" mapped to "other-vehic------mapped
    257: 5,  # "moving-bus" mapped to "other-vehicle" -------mapped
    258: 4,  # "moving-truck" to "truck" --------------------mapped
    259: 5  # "moving-other"-vehicle to "other-vehicle"-----mapped
}

metainfo = dict(
    classes=class_names,
    palette=palette,
    seg_label_mapping=labels_map,
    max_label=259)

input_modality = dict(use_lidar=True, use_camera=False)

78
79
80
81
82
83
84
85
# Example to use different file client
# Method 1: simply set the data root and let the file I/O module
# automatically infer from prefix (not support LMDB and Memcache yet)

# data_root = 's3://openmmlab/datasets/detection3d/semantickitti/'

# Method 2: Use backend_args, file_client_args in versions before 1.1.0rc4
# backend_args = dict(
86
87
#     backend='petrel',
#     path_mapping=dict({
88
89
90
91
#         './data/': 's3://openmmlab/datasets/detection3d/',
#          'data/': 's3://openmmlab/datasets/detection3d/'
#      }))
backend_args = None
92
93
94
95
96
97
98

train_pipeline = [
    dict(
        type='LoadPointsFromFile',
        coord_type='LIDAR',
        load_dim=4,
        use_dim=4,
99
        backend_args=backend_args),
100
101
102
103
    dict(
        type='LoadAnnotations3D',
        with_seg_3d=True,
        seg_offset=2**16,
104
105
        dataset_type='semantickitti',
        backend_args=backend_args),
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
    dict(type='PointSegClassMapping', ),
    dict(
        type='RandomFlip3D',
        sync_2d=False,
        flip_ratio_bev_horizontal=0.5,
        flip_ratio_bev_vertical=0.5),
    dict(
        type='GlobalRotScaleTrans',
        rot_range=[-0.78539816, 0.78539816],
        scale_ratio_range=[0.95, 1.05],
        translation_std=[0.1, 0.1, 0.1],
    ),
    dict(type='Pack3DDetInputs', keys=['points', 'pts_semantic_mask'])
]
test_pipeline = [
    dict(
        type='LoadPointsFromFile',
        coord_type='LIDAR',
        load_dim=4,
        use_dim=4,
126
        backend_args=backend_args),
127
128
129
130
    dict(
        type='LoadAnnotations3D',
        with_seg_3d=True,
        seg_offset=2**16,
131
132
        dataset_type='semantickitti',
        backend_args=backend_args),
133
134
135
136
137
138
139
140
141
142
143
    dict(type='PointSegClassMapping', ),
    dict(type='Pack3DDetInputs', keys=['points', 'pts_semantic_mask'])
]
# construct a pipeline for data and gt loading in show function
# please keep its loading function consistent with test_pipeline (e.g. client)
eval_pipeline = [
    dict(
        type='LoadPointsFromFile',
        coord_type='LIDAR',
        load_dim=4,
        use_dim=4,
144
        backend_args=backend_args),
145
146
147
148
    dict(
        type='LoadAnnotations3D',
        with_seg_3d=True,
        seg_offset=2**16,
149
150
        dataset_type='semantickitti',
        backend_args=backend_args),
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
    dict(type='PointSegClassMapping', ),
    dict(type='Pack3DDetInputs', keys=['points', 'pts_semantic_mask'])
]

train_dataloader = dict(
    batch_size=4,
    num_workers=4,
    sampler=dict(type='DefaultSampler', shuffle=True),
    dataset=dict(
        type='RepeatDataset',
        times=1,
        dataset=dict(
            type=dataset_type,
            data_root=data_root,
            ann_file='train_infos.pkl',
            pipeline=train_pipeline,
            metainfo=metainfo,
168
169
            modality=input_modality,
            backend_args=backend_args)),
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
)

test_dataloader = dict(
    batch_size=1,
    num_workers=1,
    sampler=dict(type='DefaultSampler', shuffle=False),
    dataset=dict(
        type='RepeatDataset',
        times=1,
        dataset=dict(
            type=dataset_type,
            data_root=data_root,
            ann_file='valid_infos.pkl',
            pipeline=test_pipeline,
            metainfo=metainfo,
            modality=input_modality,
            test_mode=True,
187
            backend_args=backend_args)),
188
189
190
191
192
193
)

val_dataloader = test_dataloader

val_evaluator = dict(type='SegMetric')
test_evaluator = val_evaluator