test_loading.py 6.03 KB
Newer Older
liyinhao's avatar
liyinhao committed
1
import mmcv
liyinhao's avatar
liyinhao committed
2
import numpy as np
zhangwenwei's avatar
zhangwenwei committed
3
import pytest
zhangwenwei's avatar
zhangwenwei committed
4
from os import path as osp
liyinhao's avatar
liyinhao committed
5

wuyuefeng's avatar
wuyuefeng committed
6
from mmdet3d.core.bbox import DepthInstance3DBoxes
7
from mmdet3d.core.points import LiDARPoints
liyinhao's avatar
liyinhao committed
8
9
from mmdet3d.datasets.pipelines import (LoadAnnotations3D, LoadPointsFromFile,
                                        LoadPointsFromMultiSweeps)
liyinhao's avatar
liyinhao committed
10
11


zhangwenwei's avatar
zhangwenwei committed
12
def test_load_points_from_indoor_file():
13
    sunrgbd_info = mmcv.load('./tests/data/sunrgbd/sunrgbd_infos.pkl')
14
15
    sunrgbd_load_points_from_file = LoadPointsFromFile(
        coord_type='DEPTH', load_dim=6, shift_height=True)
liyinhao's avatar
liyinhao committed
16
    sunrgbd_results = dict()
liyinhao's avatar
liyinhao committed
17
    data_path = './tests/data/sunrgbd'
liyinhao's avatar
liyinhao committed
18
    sunrgbd_info = sunrgbd_info[0]
liyinhao's avatar
liyinhao committed
19
20
    sunrgbd_results['pts_filename'] = osp.join(data_path,
                                               sunrgbd_info['pts_path'])
liyinhao's avatar
liyinhao committed
21
    sunrgbd_results = sunrgbd_load_points_from_file(sunrgbd_results)
22
    sunrgbd_point_cloud = sunrgbd_results['points'].tensor.numpy()
liyinhao's avatar
liyinhao committed
23
    assert sunrgbd_point_cloud.shape == (100, 4)
liyinhao's avatar
liyinhao committed
24
25

    scannet_info = mmcv.load('./tests/data/scannet/scannet_infos.pkl')
26
27
    scannet_load_data = LoadPointsFromFile(
        coord_type='DEPTH', shift_height=True)
liyinhao's avatar
liyinhao committed
28
    scannet_results = dict()
liyinhao's avatar
liyinhao committed
29
    data_path = './tests/data/scannet'
liyinhao's avatar
liyinhao committed
30
    scannet_info = scannet_info[0]
liyinhao's avatar
liyinhao committed
31

liyinhao's avatar
liyinhao committed
32
    scannet_results['pts_filename'] = osp.join(data_path,
liyinhao's avatar
liyinhao committed
33
                                               scannet_info['pts_path'])
liyinhao's avatar
liyinhao committed
34
    scannet_results = scannet_load_data(scannet_results)
35
    scannet_point_cloud = scannet_results['points'].tensor.numpy()
liyinhao's avatar
liyinhao committed
36
37
38
39
40
    repr_str = repr(scannet_load_data)
    expected_repr_str = 'LoadPointsFromFile(shift_height=True, ' \
                        'file_client_args={\'backend\': \'disk\'}), ' \
                        'load_dim=6, use_dim=[0, 1, 2])'
    assert repr_str == expected_repr_str
liyinhao's avatar
liyinhao committed
41
    assert scannet_point_cloud.shape == (100, 4)
liyinhao's avatar
liyinhao committed
42
43


zhangwenwei's avatar
zhangwenwei committed
44
45
def test_load_points_from_outdoor_file():
    data_path = 'tests/data/kitti/a.bin'
46
47
    load_points_from_file = LoadPointsFromFile(
        coord_type='LIDAR', load_dim=4, use_dim=4)
zhangwenwei's avatar
zhangwenwei committed
48
49
50
    results = dict()
    results['pts_filename'] = data_path
    results = load_points_from_file(results)
51
    points = results['points'].tensor.numpy()
zhangwenwei's avatar
zhangwenwei committed
52
53
54
    assert points.shape == (50, 4)
    assert np.allclose(points.sum(), 2637.479)

55
56
    load_points_from_file = LoadPointsFromFile(
        coord_type='LIDAR', load_dim=4, use_dim=[0, 1, 2, 3])
zhangwenwei's avatar
zhangwenwei committed
57
58
59
    results = dict()
    results['pts_filename'] = data_path
    results = load_points_from_file(results)
60
    new_points = results['points'].tensor.numpy()
zhangwenwei's avatar
zhangwenwei committed
61
62
63
    assert new_points.shape == (50, 4)
    assert np.allclose(points.sum(), 2637.479)
    np.equal(points, new_points)
liyinhao's avatar
liyinhao committed
64

zhangwenwei's avatar
zhangwenwei committed
65
    with pytest.raises(AssertionError):
66
        LoadPointsFromFile(coord_type='LIDAR', load_dim=4, use_dim=5)
zhangwenwei's avatar
zhangwenwei committed
67
68
69
70


def test_load_annotations3D():
    # Test scannet LoadAnnotations3D
liyinhao's avatar
liyinhao committed
71
    scannet_info = mmcv.load('./tests/data/scannet/scannet_infos.pkl')[0]
zhangwenwei's avatar
zhangwenwei committed
72
73
74
75
76
    scannet_load_annotations3D = LoadAnnotations3D(
        with_bbox_3d=True,
        with_label_3d=True,
        with_mask_3d=True,
        with_seg_3d=True)
liyinhao's avatar
liyinhao committed
77
    scannet_results = dict()
liyinhao's avatar
liyinhao committed
78
    data_path = './tests/data/scannet'
zhangwenwei's avatar
zhangwenwei committed
79

liyinhao's avatar
liyinhao committed
80
81
    if scannet_info['annos']['gt_num'] != 0:
        scannet_gt_bboxes_3d = scannet_info['annos']['gt_boxes_upright_depth']
liyinhao's avatar
liyinhao committed
82
        scannet_gt_labels_3d = scannet_info['annos']['class']
liyinhao's avatar
liyinhao committed
83
84
    else:
        scannet_gt_bboxes_3d = np.zeros((1, 6), dtype=np.float32)
liyinhao's avatar
liyinhao committed
85
        scannet_gt_labels_3d = np.zeros((1, ))
zhangwenwei's avatar
zhangwenwei committed
86
87
88
89

    # prepare input of loading pipeline
    scannet_results['ann_info'] = dict()
    scannet_results['ann_info']['pts_instance_mask_path'] = osp.join(
liyinhao's avatar
liyinhao committed
90
        data_path, scannet_info['pts_instance_mask_path'])
zhangwenwei's avatar
zhangwenwei committed
91
    scannet_results['ann_info']['pts_semantic_mask_path'] = osp.join(
liyinhao's avatar
liyinhao committed
92
        data_path, scannet_info['pts_semantic_mask_path'])
wuyuefeng's avatar
wuyuefeng committed
93
94
    scannet_results['ann_info']['gt_bboxes_3d'] = DepthInstance3DBoxes(
        scannet_gt_bboxes_3d, box_dim=6, with_yaw=False)
zhangwenwei's avatar
zhangwenwei committed
95
96
97
98
99
100
    scannet_results['ann_info']['gt_labels_3d'] = scannet_gt_labels_3d

    scannet_results['bbox3d_fields'] = []
    scannet_results['pts_mask_fields'] = []
    scannet_results['pts_seg_fields'] = []

liyinhao's avatar
liyinhao committed
101
    scannet_results = scannet_load_annotations3D(scannet_results)
102
    scannet_gt_boxes = scannet_results['gt_bboxes_3d']
liyinhao's avatar
liyinhao committed
103
    scannet_gt_lbaels = scannet_results['gt_labels_3d']
zhangwenwei's avatar
zhangwenwei committed
104

105
106
    scannet_pts_instance_mask = scannet_results['pts_instance_mask']
    scannet_pts_semantic_mask = scannet_results['pts_semantic_mask']
liyinhao's avatar
liyinhao committed
107
108
109
110
111
112
113
    repr_str = repr(scannet_load_annotations3D)
    expected_repr_str = 'LoadAnnotations3D(\n    with_bbox_3d=True,     ' \
                        'with_label_3d=True,     with_mask_3d=True,     ' \
                        'with_seg_3d=True,     with_bbox=False,     ' \
                        'with_label=False,     with_mask=False,     ' \
                        'with_seg=False,     poly2mask=True)'
    assert repr_str == expected_repr_str
wuyuefeng's avatar
wuyuefeng committed
114
    assert scannet_gt_boxes.tensor.shape == (27, 7)
115
    assert scannet_gt_lbaels.shape == (27, )
liyinhao's avatar
liyinhao committed
116
117
    assert scannet_pts_instance_mask.shape == (100, )
    assert scannet_pts_semantic_mask.shape == (100, )
liyinhao's avatar
liyinhao committed
118
119
120
121
122
123
124
125
126
127
128
129
130


def test_load_points_from_multi_sweeps():
    load_points_from_multi_sweeps = LoadPointsFromMultiSweeps()
    sweep = dict(
        data_path='./tests/data/nuscenes/sweeps/LIDAR_TOP/'
        'n008-2018-09-18-12-07-26-0400__LIDAR_TOP__1537287083900561.pcd.bin',
        timestamp=1537290014899034,
        sensor2lidar_translation=[-0.02344713, -3.88266051, -0.17151584],
        sensor2lidar_rotation=np.array(
            [[9.99979347e-01, 3.99870769e-04, 6.41441690e-03],
             [-4.42034222e-04, 9.99978299e-01, 6.57316197e-03],
             [-6.41164929e-03, -6.57586161e-03, 9.99957824e-01]]))
131
132
133
134
135
    points = LiDARPoints(
        np.array([[1., 2., 3., 4., 5.], [1., 2., 3., 4., 5.],
                  [1., 2., 3., 4., 5.]]),
        points_dim=5)
    results = dict(points=points, timestamp=1537290014899034, sweeps=[sweep])
liyinhao's avatar
liyinhao committed
136
137

    results = load_points_from_multi_sweeps(results)
138
    points = results['points'].tensor.numpy()
liyinhao's avatar
liyinhao committed
139
140
141
142
    repr_str = repr(load_points_from_multi_sweeps)
    expected_repr_str = 'LoadPointsFromMultiSweeps(sweeps_num=10)'
    assert repr_str == expected_repr_str
    assert points.shape == (403, 4)