mm3dtest / tests /test_datasets /test_semantickitti_dataset.py
giantmonkeyTC
2344
34d1f8b
# Copyright (c) OpenMMLab. All rights reserved.
import unittest
import numpy as np
from mmdet3d.datasets import SemanticKittiDataset
from mmdet3d.utils import register_all_modules
def _generate_semantickitti_dataset_config():
data_root = './tests/data/semantickitti/'
ann_file = 'semantickitti_infos.pkl'
classes = ('car', 'bicycle', 'motorcycle', 'truck', 'bus', 'person',
'bicyclist', 'motorcyclist', 'road', 'parking', 'sidewalk',
'other-ground', 'building', 'fence', 'vegetation', 'trunck',
'terrian', 'pole', 'traffic-sign')
seg_label_mapping = {
0: 19, # "unlabeled"
1: 19, # "outlier" mapped to "unlabeled" --------------mapped
10: 0, # "car"
11: 1, # "bicycle"
13: 4, # "bus" mapped to "other-vehicle" --------------mapped
15: 2, # "motorcycle"
16: 4, # "on-rails" mapped to "other-vehicle" ---------mapped
18: 3, # "truck"
20: 4, # "other-vehicle"
30: 5, # "person"
31: 6, # "bicyclist"
32: 7, # "motorcyclist"
40: 8, # "road"
44: 9, # "parking"
48: 10, # "sidewalk"
49: 11, # "other-ground"
50: 12, # "building"
51: 13, # "fence"
52: 19, # "other-structure" mapped to "unlabeled" ------mapped
60: 8, # "lane-marking" to "road" ---------------------mapped
70: 14, # "vegetation"
71: 15, # "trunk"
72: 16, # "terrain"
80: 17, # "pole"
81: 18, # "traffic-sign"
99: 19, # "other-object" to "unlabeled" ----------------mapped
252: 0, # "moving-car" to "car" ------------------------mapped
253: 6, # "moving-bicyclist" to "bicyclist" ------------mapped
254: 5, # "moving-person" to "person" ------------------mapped
255: 7, # "moving-motorcyclist" to "motorcyclist" ------mapped
256: 4, # "moving-on-rails" mapped to "other-vehic------mapped
257: 4, # "moving-bus" mapped to "other-vehicle" -------mapped
258: 3, # "moving-truck" to "truck" --------------------mapped
259: 4 # "moving-other"-vehicle to "other-vehicle"-----mapped
}
max_label = 259
modality = dict(use_lidar=True, use_camera=False)
pipeline = [
dict(
type='LoadPointsFromFile',
coord_type='LIDAR',
shift_height=True,
load_dim=4,
use_dim=[0, 1, 2]),
dict(
type='LoadAnnotations3D',
with_bbox_3d=False,
with_label_3d=False,
with_mask_3d=False,
with_seg_3d=True,
seg_3d_dtype='np.int32'),
dict(type='PointSegClassMapping'),
dict(type='Pack3DDetInputs', keys=['points', 'pts_semantic_mask'])
]
data_prefix = dict(
pts='sequences/00/velodyne', pts_semantic_mask='sequences/00/labels')
return (data_root, ann_file, classes, data_prefix, pipeline, modality,
seg_label_mapping, max_label)
class TestSemanticKittiDataset(unittest.TestCase):
def test_semantickitti(self):
(data_root, ann_file, classes, data_prefix, pipeline, modality,
seg_label_mapping,
max_label) = _generate_semantickitti_dataset_config()
register_all_modules()
np.random.seed(0)
semantickitti_dataset = SemanticKittiDataset(
data_root,
ann_file,
metainfo=dict(
classes=classes,
seg_label_mapping=seg_label_mapping,
max_label=max_label),
data_prefix=data_prefix,
pipeline=pipeline,
modality=modality)
input_dict = semantickitti_dataset.prepare_data(0)
points = input_dict['inputs']['points']
data_sample = input_dict['data_samples']
pts_semantic_mask = data_sample.gt_pts_seg.pts_semantic_mask
self.assertEqual(points.shape[0], pts_semantic_mask.shape[0])
expected_pts_semantic_mask = np.array([
12, 12, 12, 14, 14, 12, 19, 12, 14, 12, 12, 14, 15, 19, 14, 12, 12,
12, 12, 19, 12, 12, 12, 12, 12, 14, 12, 15, 12, 14, 14, 17, 12, 14,
14, 14, 15, 14, 12, 12, 14, 12, 17, 14, 12, 14, 12, 14, 14, 12
])
self.assertTrue(
(pts_semantic_mask.numpy() == expected_pts_semantic_mask).all())