test_nuscenes_dataset.py 2.79 KB
Newer Older
VVsssssk's avatar
VVsssssk committed
1
2
3
4
# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np
from mmcv.transforms.base import BaseTransform
from mmengine.registry import TRANSFORMS
5
from mmengine.structures import InstanceData
VVsssssk's avatar
VVsssssk committed
6
7

from mmdet3d.datasets import NuScenesDataset
zhangshilong's avatar
zhangshilong committed
8
from mmdet3d.structures import Det3DDataSample, LiDARInstance3DBoxes
VVsssssk's avatar
VVsssssk committed
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23


def _generate_nus_dataset_config():
    data_root = 'tests/data/nuscenes'
    ann_file = 'nus_info.pkl'
    classes = [
        'car', 'truck', 'trailer', 'bus', 'construction_vehicle', 'bicycle',
        'motorcycle', 'pedestrian', 'traffic_cone', 'barrier'
    ]
    if 'Identity' not in TRANSFORMS:

        @TRANSFORMS.register_module()
        class Identity(BaseTransform):

            def transform(self, info):
VVsssssk's avatar
VVsssssk committed
24
                packed_input = dict(data_samples=Det3DDataSample())
VVsssssk's avatar
VVsssssk committed
25
26
                if 'ann_info' in info:
                    packed_input[
VVsssssk's avatar
VVsssssk committed
27
28
29
                        'data_samples'].gt_instances_3d = InstanceData()
                    packed_input[
                        'data_samples'].gt_instances_3d.labels_3d = info[
VVsssssk's avatar
VVsssssk committed
30
31
32
33
34
35
36
                            'ann_info']['gt_labels_3d']
                return packed_input

    pipeline = [
        dict(type='Identity'),
    ]
    modality = dict(use_lidar=True, use_camera=True)
37
38
39
40
    data_prefix = dict(
        pts='samples/LIDAR_TOP',
        img='samples/CAM_BACK_LEFT',
        sweeps='sweeps/LIDAR_TOP')
VVsssssk's avatar
VVsssssk committed
41
42
43
44
45
46
47
48
49
    return data_root, ann_file, classes, data_prefix, pipeline, modality


def test_getitem():
    np.random.seed(0)
    data_root, ann_file, classes, data_prefix, pipeline, modality = \
        _generate_nus_dataset_config()

    nus_dataset = NuScenesDataset(
ZCMax's avatar
ZCMax committed
50
51
        data_root=data_root,
        ann_file=ann_file,
VVsssssk's avatar
VVsssssk committed
52
53
        data_prefix=data_prefix,
        pipeline=pipeline,
54
        metainfo=dict(classes=classes),
VVsssssk's avatar
VVsssssk committed
55
56
57
58
59
60
        modality=modality)

    nus_dataset.prepare_data(0)
    input_dict = nus_dataset.get_data_info(0)
    # assert the the path should contains data_prefix and data_root
    assert data_prefix['pts'] in input_dict['lidar_points']['lidar_path']
61
62
    assert data_root in input_dict['lidar_points']['lidar_path']

VVsssssk's avatar
VVsssssk committed
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
    for cam_id, img_info in input_dict['images'].items():
        if 'img_path' in img_info:
            assert data_prefix['img'] in img_info['img_path']
            assert data_root in img_info['img_path']

    ann_info = nus_dataset.parse_ann_info(input_dict)

    # assert the keys in ann_info and the type
    assert 'gt_labels_3d' in ann_info
    assert ann_info['gt_labels_3d'].dtype == np.int64
    assert len(ann_info['gt_labels_3d']) == 37

    assert 'gt_bboxes_3d' in ann_info
    assert isinstance(ann_info['gt_bboxes_3d'], LiDARInstance3DBoxes)

78
    assert len(nus_dataset.metainfo['classes']) == 10
VVsssssk's avatar
VVsssssk committed
79
80
81

    assert input_dict['token'] == 'fd8420396768425eabec9bdddf7e64b6'
    assert input_dict['timestamp'] == 1533201470.448696