test_loading.py 5.69 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
liyinhao's avatar
liyinhao committed
7
8
from mmdet3d.datasets.pipelines import (LoadAnnotations3D, LoadPointsFromFile,
                                        LoadPointsFromMultiSweeps)
liyinhao's avatar
liyinhao committed
9
10


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

    scannet_info = mmcv.load('./tests/data/scannet/scannet_infos.pkl')
zhangwenwei's avatar
zhangwenwei committed
24
    scannet_load_data = LoadPointsFromFile(shift_height=True)
liyinhao's avatar
liyinhao committed
25
    scannet_results = dict()
liyinhao's avatar
liyinhao committed
26
    data_path = './tests/data/scannet'
liyinhao's avatar
liyinhao committed
27
    scannet_info = scannet_info[0]
liyinhao's avatar
liyinhao committed
28

liyinhao's avatar
liyinhao committed
29
    scannet_results['pts_filename'] = osp.join(data_path,
liyinhao's avatar
liyinhao committed
30
                                               scannet_info['pts_path'])
liyinhao's avatar
liyinhao committed
31
    scannet_results = scannet_load_data(scannet_results)
32
    scannet_point_cloud = scannet_results['points']
liyinhao's avatar
liyinhao committed
33
34
35
36
37
    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
38
    assert scannet_point_cloud.shape == (100, 4)
liyinhao's avatar
liyinhao committed
39
40


zhangwenwei's avatar
zhangwenwei committed
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
def test_load_points_from_outdoor_file():
    data_path = 'tests/data/kitti/a.bin'
    load_points_from_file = LoadPointsFromFile(4, 4)
    results = dict()
    results['pts_filename'] = data_path
    results = load_points_from_file(results)
    points = results['points']
    assert points.shape == (50, 4)
    assert np.allclose(points.sum(), 2637.479)

    load_points_from_file = LoadPointsFromFile(4, [0, 1, 2, 3])
    results = dict()
    results['pts_filename'] = data_path
    results = load_points_from_file(results)
    new_points = results['points']
    assert new_points.shape == (50, 4)
    assert np.allclose(points.sum(), 2637.479)
    np.equal(points, new_points)
liyinhao's avatar
liyinhao committed
59

zhangwenwei's avatar
zhangwenwei committed
60
61
62
63
64
65
    with pytest.raises(AssertionError):
        LoadPointsFromFile(4, 5)


def test_load_annotations3D():
    # Test scannet LoadAnnotations3D
liyinhao's avatar
liyinhao committed
66
    scannet_info = mmcv.load('./tests/data/scannet/scannet_infos.pkl')[0]
zhangwenwei's avatar
zhangwenwei committed
67
68
69
70
71
    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
72
    scannet_results = dict()
liyinhao's avatar
liyinhao committed
73
    data_path = './tests/data/scannet'
zhangwenwei's avatar
zhangwenwei committed
74

liyinhao's avatar
liyinhao committed
75
76
    if scannet_info['annos']['gt_num'] != 0:
        scannet_gt_bboxes_3d = scannet_info['annos']['gt_boxes_upright_depth']
liyinhao's avatar
liyinhao committed
77
        scannet_gt_labels_3d = scannet_info['annos']['class']
liyinhao's avatar
liyinhao committed
78
79
    else:
        scannet_gt_bboxes_3d = np.zeros((1, 6), dtype=np.float32)
liyinhao's avatar
liyinhao committed
80
        scannet_gt_labels_3d = np.zeros((1, ))
zhangwenwei's avatar
zhangwenwei committed
81
82
83
84

    # 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
85
        data_path, scannet_info['pts_instance_mask_path'])
zhangwenwei's avatar
zhangwenwei committed
86
    scannet_results['ann_info']['pts_semantic_mask_path'] = osp.join(
liyinhao's avatar
liyinhao committed
87
        data_path, scannet_info['pts_semantic_mask_path'])
wuyuefeng's avatar
wuyuefeng committed
88
89
    scannet_results['ann_info']['gt_bboxes_3d'] = DepthInstance3DBoxes(
        scannet_gt_bboxes_3d, box_dim=6, with_yaw=False)
zhangwenwei's avatar
zhangwenwei committed
90
91
92
93
94
95
    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
96
    scannet_results = scannet_load_annotations3D(scannet_results)
97
    scannet_gt_boxes = scannet_results['gt_bboxes_3d']
liyinhao's avatar
liyinhao committed
98
    scannet_gt_lbaels = scannet_results['gt_labels_3d']
zhangwenwei's avatar
zhangwenwei committed
99

100
101
    scannet_pts_instance_mask = scannet_results['pts_instance_mask']
    scannet_pts_semantic_mask = scannet_results['pts_semantic_mask']
liyinhao's avatar
liyinhao committed
102
103
104
105
106
107
108
    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
109
    assert scannet_gt_boxes.tensor.shape == (27, 7)
110
    assert scannet_gt_lbaels.shape == (27, )
liyinhao's avatar
liyinhao committed
111
112
    assert scannet_pts_instance_mask.shape == (100, )
    assert scannet_pts_semantic_mask.shape == (100, )
liyinhao's avatar
liyinhao committed
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137


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]]))
    results = dict(
        points=np.array([[1., 2., 3., 4., 5.], [1., 2., 3., 4., 5.],
                         [1., 2., 3., 4., 5.]]),
        timestamp=1537290014899034,
        sweeps=[sweep])

    results = load_points_from_multi_sweeps(results)
    points = results['points']
    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)