Skip to content

Commit 9d7ab10

Browse files
Misc Reorg (#68)
* reorganize geometry code * add shortcuts to common classes * move quaternion yaw back
1 parent c331e72 commit 9d7ab10

17 files changed

+88
-104
lines changed

python-sdk/nuscenes/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .nuscenes import NuScenes, NuScenesExplorer
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .main import NuScenesEval

python-sdk/nuscenes/eval/detection/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import numpy as np
1111

12-
from nuscenes.nuscenes import NuScenes
12+
from nuscenes import NuScenes
1313
from nuscenes.eval.detection.utils import dist_fcn_map
1414
from nuscenes.eval.detection.loaders import load_prediction, load_gt, add_center_dist, filter_eval_boxes
1515
from nuscenes.eval.detection.data_classes import DetectionConfig

python-sdk/nuscenes/eval/detection/render.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import numpy as np
44
from matplotlib import pyplot as plt
55
from nuscenes.eval.detection.utils import boxes_to_sensor
6-
from nuscenes.nuscenes import NuScenes
6+
from nuscenes import NuScenes
77
from nuscenes.utils.data_classes import LidarPointCloud
88
from nuscenes.utils.geometry_utils import view_points
99

python-sdk/nuscenes/eval/detection/tests/test_main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
from tqdm import tqdm
1313
import numpy as np
1414

15-
from nuscenes.eval.detection.main import NuScenesEval
15+
from nuscenes.eval.detection import NuScenesEval
1616
from nuscenes.eval.detection.utils import category_to_detection_name, detection_name_to_rel_attributes
1717
from nuscenes.eval.detection.data_classes import DetectionConfig
18-
from nuscenes.nuscenes import NuScenes
18+
from nuscenes import NuScenes
1919
from nuscenes.utils.splits import create_splits_scenes
2020

2121

python-sdk/nuscenes/eval/detection/tests/test_utils.py

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import numpy as np
88
from pyquaternion import Quaternion
99

10-
from nuscenes.eval.detection.utils import scale_iou, quaternion_yaw, yaw_diff
1110
from nuscenes.eval.detection.data_classes import EvalBox
11+
from nuscenes.eval.detection.utils import scale_iou, yaw_diff
1212

1313

1414
class TestEval(unittest.TestCase):
@@ -54,48 +54,6 @@ def test_scale_iou(self):
5454
sr = EvalBox(size=[4, -5, 4])
5555
self.assertRaises(AssertionError, scale_iou, sa, sr)
5656

57-
def test_quaternion_yaw(self):
58-
"""Test valid and invalid inputs for quaternion_yaw()."""
59-
60-
# Misc yaws.
61-
for yaw_in in np.linspace(-10, 10, 100):
62-
q = Quaternion(axis=(0, 0, 1), angle=yaw_in)
63-
yaw_true = yaw_in % (2 * np.pi)
64-
if yaw_true > np.pi:
65-
yaw_true -= 2 * np.pi
66-
yaw_test = quaternion_yaw(q)
67-
self.assertAlmostEqual(yaw_true, yaw_test)
68-
69-
# Non unit axis vector.
70-
yaw_in = np.pi/4
71-
q = Quaternion(axis=(0, 0, 0.5), angle=yaw_in)
72-
yaw_test = quaternion_yaw(q)
73-
self.assertAlmostEqual(yaw_in, yaw_test)
74-
75-
# Inverted axis vector.
76-
yaw_in = np.pi/4
77-
q = Quaternion(axis=(0, 0, -1), angle=yaw_in)
78-
yaw_test = -quaternion_yaw(q)
79-
self.assertAlmostEqual(yaw_in, yaw_test)
80-
81-
# Rotate around another axis.
82-
yaw_in = np.pi/4
83-
q = Quaternion(axis=(0, 1, 0), angle=yaw_in)
84-
yaw_test = quaternion_yaw(q)
85-
self.assertAlmostEqual(0, yaw_test)
86-
87-
# Rotate around two axes jointly.
88-
yaw_in = np.pi/2
89-
q = Quaternion(axis=(0, 1, 1), angle=yaw_in)
90-
yaw_test = quaternion_yaw(q)
91-
self.assertAlmostEqual(yaw_in, yaw_test)
92-
93-
# Rotate around two axes separately.
94-
yaw_in = np.pi/2
95-
q = Quaternion(axis=(0, 0, 1), angle=yaw_in) * Quaternion(axis=(0, 1, 0), angle=0.5821)
96-
yaw_test = quaternion_yaw(q)
97-
self.assertAlmostEqual(yaw_in, yaw_test)
98-
9957
def test_yaw_diff(self):
10058
"""Test valid and invalid inputs for yaw_diff()."""
10159

python-sdk/nuscenes/eval/detection/utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
# Code written by Holger Caesar, 2018.
33
# Licensed under the Creative Commons [see licence.txt]
44

5-
from typing import List, Dict, Optional
6-
75
import numpy as np
86
from pyquaternion import Quaternion
7+
from typing import List, Dict, Optional
98

10-
from nuscenes.utils.data_classes import Box
119
from nuscenes.eval.detection.data_classes import EvalBox
10+
from nuscenes.utils.data_classes import Box
1211

1312

1413
def category_to_detection_name(category_name: str) -> Optional[str]:

python-sdk/nuscenes/nuscenes.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,24 @@
55
from __future__ import annotations
66

77
import json
8-
import time
9-
import sys
108
import os.path as osp
9+
import sys
10+
import time
1111
from datetime import datetime
12-
from typing import Tuple, List
1312

1413
import cv2
15-
import numpy as np
1614
import matplotlib.pyplot as plt
15+
import numpy as np
16+
import sklearn.metrics
1717
from PIL import Image
1818
from matplotlib.axes import Axes
1919
from pyquaternion import Quaternion
20-
import sklearn.metrics
2120
from tqdm import tqdm
21+
from typing import Tuple, List
2222

23-
from nuscenes.utils.map_mask import MapMask
2423
from nuscenes.utils.data_classes import LidarPointCloud, RadarPointCloud, Box
25-
from nuscenes.utils.geometry_utils import view_points, box_in_image, quaternion_slerp, BoxVisibility
26-
24+
from nuscenes.utils.geometry_utils import view_points, box_in_image, BoxVisibility
25+
from nuscenes.utils.map_mask import MapMask
2726

2827
PYTHON_VERSION = sys.version_info[0]
2928

@@ -307,10 +306,10 @@ def get_boxes(self, sample_data_token: str) -> List[Box]:
307306
center = [np.interp(t, [t0, t1], [c0, c1]) for c0, c1 in zip(prev_ann_rec['translation'],
308307
curr_ann_rec['translation'])]
309308

310-
# Interpolate orientation. (There is a bug in pyquaternion.slerp() so use external method.)
311-
rotation = Quaternion(quaternion_slerp(np.array(prev_ann_rec['rotation']),
312-
np.array(curr_ann_rec['rotation']),
313-
(t - t0) / (t1 - t0)))
309+
# Interpolate orientation.
310+
rotation = Quaternion.slerp(q0=Quaternion(prev_ann_rec['rotation']),
311+
q1=Quaternion(curr_ann_rec['rotation']),
312+
amount=(t - t0) / (t1 - t0))
314313

315314
box = Box(center, curr_ann_rec['size'], rotation, name=curr_ann_rec['category_name'])
316315
else:

python-sdk/nuscenes/scripts/assert_download.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import os
77
from tqdm import tqdm
88

9-
from nuscenes.nuscenes import NuScenes
9+
from nuscenes import NuScenes
1010

1111

1212
def verify_setup(nusc: NuScenes):

python-sdk/nuscenes/scripts/export_egoposes_on_map.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import matplotlib.pyplot as plt
1111
import numpy as np
1212

13-
from nuscenes.nuscenes import NuScenes
13+
from nuscenes import NuScenes
1414

1515
# Load NuScenes class
1616
nusc = NuScenes()

0 commit comments

Comments
 (0)