| |
| import unittest |
|
|
| import numpy as np |
| import torch |
| from mmengine.testing import assert_allclose |
|
|
| from mmdet3d.datasets.transforms import PointSegClassMapping |
| from mmdet3d.datasets.transforms.loading import (LoadAnnotations3D, |
| LoadPointsFromFile) |
| from mmdet3d.structures import DepthPoints, LiDARPoints |
| from mmdet3d.testing import create_dummy_data_info |
|
|
|
|
| class TestLoadPointsFromFile(unittest.TestCase): |
|
|
| def test_load_points_from_file(self): |
| use_dim = 3 |
| backend_args = None |
| load_points_transform = LoadPointsFromFile( |
| coord_type='LIDAR', |
| load_dim=4, |
| use_dim=use_dim, |
| backend_args=backend_args) |
| 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, |
| backend_args=backend_args) |
| 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, |
| backend_args=backend_args) |
| info = load_points_transform(data_info) |
| |
| 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): |
| backend_args = None |
|
|
| load_anns_transform = LoadAnnotations3D( |
| with_bbox_3d=True, |
| with_label_3d=True, |
| with_panoptic_3d=True, |
| seg_offset=2**16, |
| dataset_type='semantickitti', |
| seg_3d_dtype='np.uint32', |
| backend_args=backend_args) |
| 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])) |
| 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 |
| ])) |
| 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) |
| self.assertIn('with_panoptic_3d=True', repr_str) |
|
|
|
|
| class TestPointSegClassMapping(unittest.TestCase): |
|
|
| def test_point_seg_class_mapping(self): |
| results = dict() |
| results['pts_semantic_mask'] = np.array([1, 2, 3, 4, 5]) |
| results['seg_label_mapping'] = np.array([3, 0, 1, 2, 3, 3]) |
| point_seg_mapping_transform = PointSegClassMapping() |
| results = point_seg_mapping_transform(results) |
| assert_allclose(results['pts_semantic_mask'], np.array([0, 1, 2, 3, |
| 3])) |
|
|