test_loading.py 4.3 KB
Newer Older
jshilong's avatar
jshilong committed
1
2
3
# Copyright (c) OpenMMLab. All rights reserved.
import unittest

4
import numpy as np
jshilong's avatar
jshilong committed
5
6
7
import torch
from mmengine.testing import assert_allclose

zhangshilong's avatar
zhangshilong committed
8
9
10
11
from mmdet3d.datasets.transforms import PointSegClassMapping
from mmdet3d.datasets.transforms.loading import (LoadAnnotations3D,
                                                 LoadPointsFromFile)
from mmdet3d.structures import DepthPoints, LiDARPoints
12
from mmdet3d.testing import create_dummy_data_info
jshilong's avatar
jshilong committed
13
14
15
16
17
18


class TestLoadPointsFromFile(unittest.TestCase):

    def test_load_points_from_file(self):
        use_dim = 3
19
        backend_args = None
jshilong's avatar
jshilong committed
20
21
22
23
        load_points_transform = LoadPointsFromFile(
            coord_type='LIDAR',
            load_dim=4,
            use_dim=use_dim,
24
            backend_args=backend_args)
jshilong's avatar
jshilong committed
25
26
27
28
29
30
31
32
        data_info = create_dummy_data_info()
        info = load_points_transform(data_info)
        self.assertIn('points', info)
        self.assertIsInstance(info['points'], LiDARPoints)
        load_points_transform = LoadPointsFromFile(
            coord_type='DEPTH',
            load_dim=4,
            use_dim=use_dim,
33
            backend_args=backend_args)
jshilong's avatar
jshilong committed
34
35
36
37
38
39
40
41
        info = load_points_transform(data_info)
        self.assertIsInstance(info['points'], DepthPoints)
        self.assertEqual(info['points'].shape[-1], use_dim)
        load_points_transform = LoadPointsFromFile(
            coord_type='DEPTH',
            load_dim=4,
            use_dim=use_dim,
            shift_height=True,
42
            backend_args=backend_args)
jshilong's avatar
jshilong committed
43
44
45
46
47
48
49
50
51
52
53
54
55
        info = load_points_transform(data_info)
        # extra height dim
        self.assertEqual(info['points'].shape[-1], use_dim + 1)

        repr_str = repr(load_points_transform)
        self.assertIn('shift_height=True', repr_str)
        self.assertIn('use_color=False', repr_str)
        self.assertIn('load_dim=4', repr_str)


class TestLoadAnnotations3D(unittest.TestCase):

    def test_load_points_from_file(self):
56
        backend_args = None
jshilong's avatar
jshilong committed
57
58
59
60

        load_anns_transform = LoadAnnotations3D(
            with_bbox_3d=True,
            with_label_3d=True,
61
62
63
            with_panoptic_3d=True,
            seg_offset=2**16,
            dataset_type='semantickitti',
64
            seg_3d_dtype='np.uint32',
65
            backend_args=backend_args)
jshilong's avatar
jshilong committed
66
67
68
69
70
71
72
73
74
75
        self.assertIs(load_anns_transform.with_seg, False)
        self.assertIs(load_anns_transform.with_bbox_3d, True)
        self.assertIs(load_anns_transform.with_label_3d, True)
        data_info = create_dummy_data_info()
        info = load_anns_transform(data_info)
        self.assertIn('gt_bboxes_3d', info)
        assert_allclose(info['gt_bboxes_3d'].tensor.sum(),
                        torch.tensor(7.2650))
        self.assertIn('gt_labels_3d', info)
        assert_allclose(info['gt_labels_3d'], torch.tensor([1]))
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
        self.assertIn('pts_semantic_mask', info)
        self.assertIn('pts_instance_mask', info)
        assert_allclose(
            info['pts_semantic_mask'],
            np.array([
                50, 50, 50, 70, 70, 50, 0, 50, 70, 50, 50, 70, 71, 52, 70, 50,
                50, 50, 50, 0, 50, 50, 50, 50, 50, 70, 50, 71, 50, 70, 70, 80,
                50, 70, 70, 70, 71, 70, 50, 50, 70, 50, 80, 70, 50, 70, 50, 70,
                70, 50
            ]))
        assert_allclose(
            info['pts_instance_mask'],
            np.array([
                50, 50, 50, 70, 70, 50, 0, 50, 70, 50, 50, 70, 71, 52, 70, 50,
                50, 50, 50, 0, 50, 50, 50, 50, 50, 70, 50, 71, 50, 70, 70, 80,
                50, 70, 70, 70, 71, 70, 50, 50, 70, 50, 80, 70, 50, 70, 50, 70,
                70, 50
            ]))
jshilong's avatar
jshilong committed
94
95
96
97
        repr_str = repr(load_anns_transform)
        self.assertIn('with_bbox_3d=True', repr_str)
        self.assertIn('with_label_3d=True', repr_str)
        self.assertIn('with_bbox_depth=False', repr_str)
98
        self.assertIn('with_panoptic_3d=True', repr_str)
99
100
101
102
103
104
105


class TestPointSegClassMapping(unittest.TestCase):

    def test_point_seg_class_mapping(self):
        results = dict()
        results['pts_semantic_mask'] = np.array([1, 2, 3, 4, 5])
106
107
        results['seg_label_mapping'] = np.array([3, 0, 1, 2, 3, 3])
        point_seg_mapping_transform = PointSegClassMapping()
108
109
110
        results = point_seg_mapping_transform(results)
        assert_allclose(results['pts_semantic_mask'], np.array([0, 1, 2, 3,
                                                                3]))