Skip to content

Commit f5553ad

Browse files
committed
Update files for realsense deployment
1 parent cc9e2d6 commit f5553ad

File tree

8 files changed

+83
-63
lines changed

8 files changed

+83
-63
lines changed

avstack/geometry/datastructs.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@
77

88
from . import transformations as tforms
99
from .base import q_mult_vec
10-
from .refchoc import ReferenceDecoder, ReferenceFrame, PassiveReferenceFrame, Rotation, Vector
10+
from .refchoc import (
11+
PassiveReferenceFrame,
12+
ReferenceDecoder,
13+
ReferenceFrame,
14+
Rotation,
15+
Vector,
16+
)
1117

1218

1319
class VectorDecoder(json.JSONDecoder):
@@ -71,7 +77,9 @@ def object_hook(json_object):
7177

7278

7379
class Position(Vector):
74-
def _pull_from_reference(self, reference: Union[ReferenceFrame, PassiveReferenceFrame]):
80+
def _pull_from_reference(
81+
self, reference: Union[ReferenceFrame, PassiveReferenceFrame]
82+
):
7583
return reference.x
7684

7785
@property
@@ -84,7 +92,9 @@ def factory():
8492

8593

8694
class Velocity(Vector):
87-
def _pull_from_reference(self, reference: Union[ReferenceFrame, PassiveReferenceFrame]):
95+
def _pull_from_reference(
96+
self, reference: Union[ReferenceFrame, PassiveReferenceFrame]
97+
):
8898
return reference.v
8999

90100
@staticmethod
@@ -93,7 +103,9 @@ def factory():
93103

94104

95105
class Acceleration(Vector):
96-
def _pull_from_reference(self, reference: Union[ReferenceFrame, PassiveReferenceFrame]):
106+
def _pull_from_reference(
107+
self, reference: Union[ReferenceFrame, PassiveReferenceFrame]
108+
):
97109
return reference.acc
98110

99111
@staticmethod
@@ -102,7 +114,9 @@ def factory():
102114

103115

104116
class Attitude(Rotation):
105-
def _pull_from_reference(self, reference: Union[ReferenceFrame, PassiveReferenceFrame]):
117+
def _pull_from_reference(
118+
self, reference: Union[ReferenceFrame, PassiveReferenceFrame]
119+
):
106120
return reference.q
107121

108122
@staticmethod
@@ -111,7 +125,9 @@ def factory():
111125

112126

113127
class AngularVelocity(Rotation):
114-
def _pull_from_reference(self, reference: Union[ReferenceFrame, PassiveReferenceFrame]):
128+
def _pull_from_reference(
129+
self, reference: Union[ReferenceFrame, PassiveReferenceFrame]
130+
):
115131
return reference.ang
116132

117133
@staticmethod

avstack/modules/perception/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def map_checkpoint_to_latest(mm_root, checkpoint_file):
6565
chk_path = f.readlines()[0].rstrip()
6666
return chk_path
6767
else:
68-
return None
68+
return ""
6969

7070
def parse_mm_model(self):
7171
raise NotImplementedError("Implement this in the subclass.")

avstack/modules/perception/object2dfv.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,9 @@ def parse_mm_model_from_checkpoint(model, dataset, epoch):
176176
checkpoint_file = "checkpoints/coco/rtmdet_m_8xb32-300e_coco_20220719_112220-229f527c.pth"
177177
elif dataset == "rccars-oneclass":
178178
threshold = 0.5
179-
config_file = "configs/rccars/rtmdet_m_8xb32-300e_rccars-oneclass.py"
179+
config_file = "work_dirs/rccars/rtmdet_m_8xb32-300e_rccars-oneclass.py"
180180
checkpoint_file = (
181-
f"work_dirs/rtmdet_m_8xb32-300e_rccars-oneclass/{epoch_str}.pth"
181+
f"work_dirs/rccars/rtmdet_m_8xb32-300e_rccars-oneclass.pth"
182182
)
183183
else:
184184
raise NotImplementedError(f"{model}, {dataset} not compatible yet")
Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
from mmdeploy_runtime import Detector
1+
import argparse
22
import os
3-
import cv2
43
import time
5-
import numpy as np
6-
import argparse
74

8-
9-
from avstack.geometry import GlobalOrigin3D
5+
import cv2
6+
import numpy as np
107
from avstack.calibration import CameraCalibration
11-
from avstack.sensors import ImageData
8+
from avstack.geometry import GlobalOrigin3D
129
from avstack.modules.perception.object2dfv import MMDetObjectDetector2D
10+
from avstack.sensors import ImageData
11+
from mmdeploy_runtime import Detector
1312

1413

1514
def run_with_timing(detector, img, n_inferences):
@@ -19,17 +18,13 @@ def run_with_timing(detector, img, n_inferences):
1918
_ = detector(img)
2019
t2 = time.time()
2120
if i > 1: # just in case first two times are slow...
22-
timing.append((t2 - t1)*1000)
23-
print(f'Timing Results:\n {np.mean(timing):4.2f} +/- {np.std(timing):4.2f} ms')
21+
timing.append((t2 - t1) * 1000)
22+
print(f"Timing Results:\n {np.mean(timing):4.2f} +/- {np.std(timing):4.2f} ms")
2423

2524

2625
def main_mmdeploy(model_path, img, n_inferences=50):
27-
detector = Detector(
28-
model_path=model_path,
29-
device_name='cuda',
30-
device_id=0
31-
)
32-
print('Running mmdeploy:')
26+
detector = Detector(model_path=model_path, device_name="cuda", device_id=0)
27+
print("Running mmdeploy:")
3328
run_with_timing(detector, img, n_inferences)
3429

3530

@@ -40,28 +35,34 @@ def main_mmdet(dataset, model, img, n_inferences=50):
4035
gpu=0,
4136
)
4237
cam_calib = CameraCalibration(
43-
reference=GlobalOrigin3D,
44-
P=np.random.rand(3,4),
45-
img_shape=img.shape
38+
reference=GlobalOrigin3D, P=np.random.rand(3, 4), img_shape=img.shape
4639
)
4740
img = ImageData(timestamp=0, frame=0, data=img, calibration=cam_calib, source_ID=0)
48-
print('Running mmdetection')
41+
print("Running mmdetection")
4942
run_with_timing(detector, img, n_inferences)
5043

5144

5245
if __name__ == "__main__":
5346
parser = argparse.ArgumentParser()
54-
parser.add_argument('--dataset', default="coco", type=str, help="Name of the dataset to use")
55-
parser.add_argument('--model', default="cascade_rcnn", type=str, help="Name of the model to use")
56-
parser.add_argument('--runtime', default='tensorrt', type=str, help="NN runtime to use for deploy")
47+
parser.add_argument(
48+
"--dataset", default="coco", type=str, help="Name of the dataset to use"
49+
)
50+
parser.add_argument(
51+
"--model", default="cascade_rcnn", type=str, help="Name of the model to use"
52+
)
53+
parser.add_argument(
54+
"--runtime", default="tensorrt", type=str, help="NN runtime to use for deploy"
55+
)
5756
args = parser.parse_args()
58-
59-
mmdep_model_path = os.path.join('mmdeploy_models', f'{args.model}_{args.dataset}_{args.runtime}')
57+
58+
mmdep_model_path = os.path.join(
59+
"mmdeploy_models", f"{args.model}_{args.dataset}_{args.runtime}"
60+
)
6061
if not os.path.exists(mmdep_model_path):
6162
raise FileNotFoundError("Cannot find model for mmdeploy")
6263

6364
MMDET_BASE = "../../third_party/mmdetection"
6465
img = cv2.imread(os.path.join(MMDET_BASE, "demo", "demo.jpg"))
6566
n_inferences = 20
6667
main_mmdeploy(mmdep_model_path, img, n_inferences=n_inferences)
67-
main_mmdet(args.dataset, args.model, img, n_inferences=n_inferences)
68+
main_mmdet(args.dataset, args.model, img, n_inferences=n_inferences)
Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
1-
from mmdeploy_runtime import Detector
1+
import argparse
22
import os
3+
34
import cv2
4-
import argparse
5+
from mmdeploy_runtime import Detector
56

67

78
def main(model_path, img):
8-
detector = Detector(
9-
model_path=model_path,
10-
device_name='cuda',
11-
device_id=0
12-
)
9+
detector = Detector(model_path=model_path, device_name="cuda", device_id=0)
1310
bboxes, labels, _ = detector(img)
1411
print(bboxes, labels)
1512

1613

1714
if __name__ == "__main__":
1815
parser = argparse.ArgumentParser()
19-
parser.add_argument('model_path', type=str, help='Path to converted model')
16+
parser.add_argument("model_path", type=str, help="Path to converted model")
2017
args = parser.parse_args()
21-
18+
2219
MMDET_BASE = "../../third_party/mmdetection"
2320
img = cv2.imread(os.path.join(MMDET_BASE, "demo", "demo.jpg"))
24-
main(args.model_path, img)
21+
main(args.model_path, img)

models/config/mmseg/unet_fov.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
_base_ = [
2-
"../../../third_party/mmsegmentation/configs/" + '_base_/datasets/fov_bev.py',
3-
"../../../third_party/mmsegmentation/configs/" + '_base_/default_runtime.py',
4-
"../../../third_party/mmsegmentation/configs/" + '_base_/schedules/schedule_5k.py'
2+
"../../../third_party/mmsegmentation/configs/" + "_base_/datasets/fov_bev.py",
3+
"../../../third_party/mmsegmentation/configs/" + "_base_/default_runtime.py",
4+
"../../../third_party/mmsegmentation/configs/" + "_base_/schedules/schedule_5k.py",
55
]
66

77
# model settings
88
crop_size = (256, 256)
9-
norm_cfg = dict(type='SyncBN', requires_grad=True)
10-
data_preprocessor = dict(type='SegDataPreProcessor')
9+
norm_cfg = dict(type="SyncBN", requires_grad=True)
10+
data_preprocessor = dict(type="SegDataPreProcessor")
1111
model = dict(
12-
type='EncoderDecoder',
12+
type="EncoderDecoder",
1313
data_preprocessor=data_preprocessor,
1414
pretrained=None,
1515
backbone=dict(
16-
type='UNet',
16+
type="UNet",
1717
in_channels=1,
1818
base_channels=64,
1919
num_stages=5,
@@ -26,11 +26,12 @@
2626
with_cp=False,
2727
conv_cfg=None,
2828
norm_cfg=norm_cfg,
29-
act_cfg=dict(type='ReLU'),
30-
upsample_cfg=dict(type='InterpConv'),
31-
norm_eval=False),
29+
act_cfg=dict(type="ReLU"),
30+
upsample_cfg=dict(type="InterpConv"),
31+
norm_eval=False,
32+
),
3233
decode_head=dict(
33-
type='FCNHead',
34+
type="FCNHead",
3435
in_channels=64,
3536
in_index=4,
3637
channels=64,
@@ -40,10 +41,10 @@
4041
num_classes=2,
4142
norm_cfg=norm_cfg,
4243
align_corners=False,
43-
loss_decode=dict(
44-
type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)),
44+
loss_decode=dict(type="CrossEntropyLoss", use_sigmoid=False, loss_weight=1.0),
45+
),
4546
auxiliary_head=dict(
46-
type='FCNHead',
47+
type="FCNHead",
4748
in_channels=128,
4849
in_index=3,
4950
channels=64,
@@ -53,14 +54,15 @@
5354
num_classes=2,
5455
norm_cfg=norm_cfg,
5556
align_corners=False,
56-
loss_decode=dict(
57-
type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)),
57+
loss_decode=dict(type="CrossEntropyLoss", use_sigmoid=False, loss_weight=0.4),
58+
),
5859
# model training and testing settings
5960
train_cfg=dict(),
60-
test_cfg=dict(mode='slide', crop_size=crop_size))
61+
test_cfg=dict(mode="slide", crop_size=crop_size),
62+
)
6163

6264

6365
# scheduling configuration
6466
# train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=36, val_interval=36)
6567
# val_cfg = dict(type='ValLoop')
66-
# test_cfg = dict(type='TestLoop')
68+
# test_cfg = dict(type='TestLoop')

models/download_mmdet_models.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ download_models "coco" "v2.0" "cascade_rcnn" "$COCO_CMRCNN"
9696
# CARLA_CRCNN_INF="cascade-rcnn_r50_fpn_1x_carla_infrastructure"
9797
# download_custom_models "carla" "carla" "$CARLA_CRCNN_INF"
9898

99+
RCCARS_RTMDET="rtmdet_m_8xb32-300e_rccars-oneclass"
100+
download_custom_models "rccars" "rccars" "$RCCARS_RTMDET"
101+
99102

100103
echo "Adding symbolic link to mmdet directory"
101104
ln -sfnT $(realpath "$MMDET_CKPT") "$THISDIR/../third_party/mmdetection/checkpoints"

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22

33
import setuptools
44

5+
56
if __name__ == "__main__":
6-
setuptools.setup()
7+
setuptools.setup()

0 commit comments

Comments
 (0)