Skip to content

Commit 1af9352

Browse files
chore(traffic_light_fine_detector_and_classifier): rework parameters (#6216)
* chore: use config Signed-off-by: tzhong518 <sworgun@gmail.com> * style(pre-commit): autofix * chore: move build only back Signed-off-by: tzhong518 <sworgun@gmail.com> --------- Signed-off-by: tzhong518 <sworgun@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 8992d05 commit 1af9352

File tree

9 files changed

+123
-163
lines changed

9 files changed

+123
-163
lines changed

launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml

+9-18
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,9 @@
2424
<let name="all_camera_namespaces" value="[$(var namespace1)]" if="$(eval &quot; '$(var image_number)' == '1' &quot;)"/>
2525
<let name="all_camera_namespaces" value="[$(var namespace1), $(var namespace2)]" if="$(eval &quot; '$(var image_number)' >= '2' &quot;)"/>
2626

27-
<arg name="fine_detector_label_path" default="$(var traffic_light_fine_detector_model_path)/$(var traffic_light_fine_detector_label_name)"/>
28-
<arg name="fine_detector_model_path" default="$(var traffic_light_fine_detector_model_path)/$(var traffic_light_fine_detector_model_name).onnx"/>
29-
<arg name="car_classifier_label_path" default="$(var traffic_light_classifier_model_path)/$(var car_traffic_light_classifier_label_name)"/>
30-
<arg name="pedestrian_classifier_label_path" default="$(var traffic_light_classifier_model_path)/$(var pedestrian_traffic_light_classifier_label_name)"/>
31-
<arg name="car_classifier_model_path" default="$(var traffic_light_classifier_model_path)/$(var car_traffic_light_classifier_model_name).onnx"/>
32-
<arg name="pedestrian_classifier_model_path" default="$(var traffic_light_classifier_model_path)/$(var pedestrian_traffic_light_classifier_model_name).onnx"/>
27+
<arg name="fine_detector_param_path" default="$(find-pkg-share traffic_light_fine_detector)/config/traffic_light_fine_detector.param.yaml"/>
28+
<arg name="car_classifier_param_path" default="$(find-pkg-share traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml"/>
29+
<arg name="pedestrian_classifier_param_path" default="$(find-pkg-share traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml"/>
3330

3431
<!-- namespace1 camera TLR pipeline -->
3532
<group>
@@ -62,12 +59,9 @@
6259
<arg name="enable_fine_detection" value="$(var enable_fine_detection)"/>
6360
<arg name="use_intra_process" value="true"/>
6461
<arg name="use_multithread" value="true"/>
65-
<arg name="fine_detector_label_path" value="$(var fine_detector_label_path)"/>
66-
<arg name="fine_detector_model_path" value="$(var fine_detector_model_path)"/>
67-
<arg name="car_classifier_label_path" value="$(var car_classifier_label_path)"/>
68-
<arg name="pedestrian_classifier_label_path" value="$(var pedestrian_classifier_label_path)"/>
69-
<arg name="car_classifier_model_path" value="$(var car_classifier_model_path)"/>
70-
<arg name="pedestrian_classifier_model_path" value="$(var pedestrian_classifier_model_path)"/>
62+
<arg name="fine_detector_param_path" value="$(var fine_detector_param_path)"/>
63+
<arg name="car_classifier_param_path" value="$(var car_classifier_param_path)"/>
64+
<arg name="pedestrian_classifier_param_path" value="$(var pedestrian_classifier_param_path)"/>
7165
<arg name="output/rois" value="$(var output/rois1)"/>
7266
<arg name="output/traffic_signals" value="$(var output/traffic_signals1)"/>
7367
<arg name="output/car/traffic_signals" value="$(var output/car/traffic_signals1)"/>
@@ -119,12 +113,9 @@
119113
<arg name="enable_fine_detection" value="$(var enable_fine_detection)"/>
120114
<arg name="use_intra_process" value="true"/>
121115
<arg name="use_multithread" value="true"/>
122-
<arg name="fine_detector_label_path" value="$(var fine_detector_label_path)"/>
123-
<arg name="fine_detector_model_path" value="$(var fine_detector_model_path)"/>
124-
<arg name="car_classifier_label_path" value="$(var car_classifier_label_path)"/>
125-
<arg name="pedestrian_classifier_label_path" value="$(var pedestrian_classifier_label_path)"/>
126-
<arg name="car_classifier_model_path" value="$(var car_classifier_model_path)"/>
127-
<arg name="pedestrian_classifier_model_path" value="$(var pedestrian_classifier_model_path)"/>
116+
<arg name="fine_detector_param_path" value="$(var fine_detector_param_path)"/>
117+
<arg name="car_classifier_param_path" value="$(var car_classifier_param_path)"/>
118+
<arg name="pedestrian_classifier_param_path" value="$(var pedestrian_classifier_param_path)"/>
128119
<arg name="output/rois" value="$(var output/rois2)"/>
129120
<arg name="output/traffic_signals" value="$(var output/traffic_signals2)"/>
130121
<arg name="output/car/traffic_signals" value="$(var output/car/traffic_signals2)"/>

launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py

+75-111
Original file line numberDiff line numberDiff line change
@@ -17,90 +17,37 @@
1717
from ament_index_python.packages import get_package_share_directory
1818
from launch import LaunchDescription
1919
from launch.actions import DeclareLaunchArgument
20+
from launch.actions import OpaqueFunction
2021
from launch.actions import SetLaunchConfiguration
2122
from launch.conditions import IfCondition
2223
from launch.conditions import UnlessCondition
2324
from launch.substitutions import LaunchConfiguration
2425
from launch_ros.actions import ComposableNodeContainer
2526
from launch_ros.actions import LoadComposableNodes
2627
from launch_ros.descriptions import ComposableNode
28+
from launch_ros.parameter_descriptions import ParameterFile
2729

2830

29-
def generate_launch_description():
30-
launch_arguments = []
31-
32-
def add_launch_arg(name: str, default_value=None, description=None):
33-
# a default_value of None is equivalent to not passing that kwarg at all
34-
launch_arguments.append(
35-
DeclareLaunchArgument(name, default_value=default_value, description=description)
36-
)
37-
38-
fine_detector_share_dir = get_package_share_directory("traffic_light_fine_detector")
39-
classifier_share_dir = get_package_share_directory("traffic_light_classifier")
40-
add_launch_arg("enable_image_decompressor", "True")
41-
add_launch_arg("enable_fine_detection", "True")
42-
add_launch_arg("input/image", "/sensing/camera/traffic_light/image_raw")
43-
add_launch_arg("output/rois", "/perception/traffic_light_recognition/rois")
44-
add_launch_arg(
45-
"output/traffic_signals",
46-
"/perception/traffic_light_recognition/traffic_signals",
47-
)
48-
add_launch_arg(
49-
"output/car/traffic_signals", "/perception/traffic_light_recognition/car/traffic_signals"
50-
)
51-
add_launch_arg(
52-
"output/pedestrian/traffic_signals",
53-
"/perception/traffic_light_recognition/pedestrian/traffic_signals",
54-
)
55-
56-
# traffic_light_fine_detector
57-
add_launch_arg(
58-
"fine_detector_model_path",
59-
os.path.join(fine_detector_share_dir, "data", "tlr_yolox_s.onnx"),
60-
)
61-
add_launch_arg(
62-
"fine_detector_label_path",
63-
os.path.join(fine_detector_share_dir, "data", "tlr_labels.txt"),
64-
)
65-
add_launch_arg("fine_detector_precision", "fp16")
66-
add_launch_arg("fine_detector_score_thresh", "0.3")
67-
add_launch_arg("fine_detector_nms_thresh", "0.65")
68-
69-
add_launch_arg("approximate_sync", "False")
70-
71-
# traffic_light_classifier
72-
add_launch_arg("classifier_type", "1")
73-
add_launch_arg(
74-
"car_classifier_model_path",
75-
os.path.join(classifier_share_dir, "data", "traffic_light_classifier_efficientNet_b1.onnx"),
76-
)
77-
add_launch_arg(
78-
"pedestrian_classifier_model_path",
79-
os.path.join(
80-
classifier_share_dir, "data", "pedestrian_traffic_light_classifier_efficientNet_b1.onnx"
81-
),
82-
)
83-
add_launch_arg(
84-
"car_classifier_label_path", os.path.join(classifier_share_dir, "data", "lamp_labels.txt")
85-
)
86-
add_launch_arg(
87-
"pedestrian_classifier_label_path",
88-
os.path.join(classifier_share_dir, "data", "lamp_labels_ped.txt"),
89-
)
90-
add_launch_arg("classifier_precision", "fp16")
91-
add_launch_arg("classifier_mean", "[123.675, 116.28, 103.53]")
92-
add_launch_arg("classifier_std", "[58.395, 57.12, 57.375]")
93-
add_launch_arg("backlight_threshold", "0.85")
94-
95-
add_launch_arg("use_intra_process", "False")
96-
add_launch_arg("use_multithread", "False")
97-
31+
def launch_setup(context, *args, **kwargs):
9832
def create_parameter_dict(*args):
9933
result = {}
10034
for x in args:
10135
result[x] = LaunchConfiguration(x)
10236
return result
10337

38+
fine_detector_model_param = ParameterFile(
39+
param_file=LaunchConfiguration("fine_detector_param_path").perform(context),
40+
allow_substs=True,
41+
)
42+
car_traffic_light_classifier_model_param = ParameterFile(
43+
param_file=LaunchConfiguration("car_classifier_param_path").perform(context),
44+
allow_substs=True,
45+
)
46+
pedestrian_traffic_light_classifier_model_param = ParameterFile(
47+
param_file=LaunchConfiguration("pedestrian_classifier_param_path").perform(context),
48+
allow_substs=True,
49+
)
50+
10451
container = ComposableNodeContainer(
10552
name="traffic_light_node_container",
10653
namespace="",
@@ -112,19 +59,7 @@ def create_parameter_dict(*args):
11259
plugin="traffic_light::TrafficLightClassifierNodelet",
11360
name="car_traffic_light_classifier",
11461
namespace="classification",
115-
parameters=[
116-
{
117-
"approximate_sync": LaunchConfiguration("approximate_sync"),
118-
"classifier_type": LaunchConfiguration("classifier_type"),
119-
"classify_traffic_light_type": 0,
120-
"classifier_model_path": LaunchConfiguration("car_classifier_model_path"),
121-
"classifier_label_path": LaunchConfiguration("car_classifier_label_path"),
122-
"classifier_precision": LaunchConfiguration("classifier_precision"),
123-
"classifier_mean": LaunchConfiguration("classifier_mean"),
124-
"classifier_std": LaunchConfiguration("classifier_std"),
125-
"backlight_threshold": LaunchConfiguration("backlight_threshold"),
126-
}
127-
],
62+
parameters=[car_traffic_light_classifier_model_param],
12863
remappings=[
12964
("~/input/image", LaunchConfiguration("input/image")),
13065
("~/input/rois", LaunchConfiguration("output/rois")),
@@ -139,23 +74,7 @@ def create_parameter_dict(*args):
13974
plugin="traffic_light::TrafficLightClassifierNodelet",
14075
name="pedestrian_traffic_light_classifier",
14176
namespace="classification",
142-
parameters=[
143-
{
144-
"approximate_sync": LaunchConfiguration("approximate_sync"),
145-
"classifier_type": LaunchConfiguration("classifier_type"),
146-
"classify_traffic_light_type": 1,
147-
"classifier_model_path": LaunchConfiguration(
148-
"pedestrian_classifier_model_path"
149-
),
150-
"classifier_label_path": LaunchConfiguration(
151-
"pedestrian_classifier_label_path"
152-
),
153-
"classifier_precision": LaunchConfiguration("classifier_precision"),
154-
"classifier_mean": LaunchConfiguration("classifier_mean"),
155-
"classifier_std": LaunchConfiguration("classifier_std"),
156-
"backlight_threshold": LaunchConfiguration("backlight_threshold"),
157-
}
158-
],
77+
parameters=[pedestrian_traffic_light_classifier_model_param],
15978
remappings=[
16079
("~/input/image", LaunchConfiguration("input/image")),
16180
("~/input/rois", LaunchConfiguration("output/rois")),
@@ -214,22 +133,14 @@ def create_parameter_dict(*args):
214133
condition=IfCondition(LaunchConfiguration("enable_image_decompressor")),
215134
)
216135

217-
fine_detector_param = create_parameter_dict(
218-
"fine_detector_model_path",
219-
"fine_detector_label_path",
220-
"fine_detector_precision",
221-
"fine_detector_score_thresh",
222-
"fine_detector_nms_thresh",
223-
)
224-
225136
fine_detector_loader = LoadComposableNodes(
226137
composable_node_descriptions=[
227138
ComposableNode(
228139
package="traffic_light_fine_detector",
229140
plugin="traffic_light::TrafficLightFineDetectorNodelet",
230141
name="traffic_light_fine_detector",
231142
namespace="detection",
232-
parameters=[fine_detector_param],
143+
parameters=[fine_detector_model_param],
233144
remappings=[
234145
("~/input/image", LaunchConfiguration("input/image")),
235146
("~/input/rois", "rough/rois"),
@@ -245,6 +156,61 @@ def create_parameter_dict(*args):
245156
condition=IfCondition(LaunchConfiguration("enable_fine_detection")),
246157
)
247158

159+
return [container, decompressor_loader, fine_detector_loader]
160+
161+
162+
def generate_launch_description():
163+
launch_arguments = []
164+
165+
def add_launch_arg(name: str, default_value=None, description=None):
166+
# a default_value of None is equivalent to not passing that kwarg at all
167+
launch_arguments.append(
168+
DeclareLaunchArgument(name, default_value=default_value, description=description)
169+
)
170+
171+
fine_detector_share_dir = get_package_share_directory("traffic_light_fine_detector")
172+
classifier_share_dir = get_package_share_directory("traffic_light_classifier")
173+
add_launch_arg("enable_image_decompressor", "True")
174+
add_launch_arg("enable_fine_detection", "True")
175+
add_launch_arg("input/image", "/sensing/camera/traffic_light/image_raw")
176+
add_launch_arg("output/rois", "/perception/traffic_light_recognition/rois")
177+
add_launch_arg(
178+
"output/traffic_signals",
179+
"/perception/traffic_light_recognition/traffic_signals",
180+
)
181+
add_launch_arg(
182+
"output/car/traffic_signals", "/perception/traffic_light_recognition/car/traffic_signals"
183+
)
184+
add_launch_arg(
185+
"output/pedestrian/traffic_signals",
186+
"/perception/traffic_light_recognition/pedestrian/traffic_signals",
187+
)
188+
189+
# traffic_light_fine_detector
190+
add_launch_arg(
191+
"fine_detector_param_path",
192+
os.path.join(fine_detector_share_dir, "config", "traffic_light_fine_detector.param.yaml"),
193+
)
194+
195+
# traffic_light_classifier
196+
add_launch_arg(
197+
"car_classifier_param_path",
198+
os.path.join(
199+
classifier_share_dir, "config", "car_traffic_light_classifier_efficientNet.param.yaml"
200+
),
201+
)
202+
add_launch_arg(
203+
"pedestrian_classifier_param_path",
204+
os.path.join(
205+
classifier_share_dir,
206+
"config",
207+
"pedestrian_traffic_light_classifier_efficientNet.param.yaml",
208+
),
209+
)
210+
211+
add_launch_arg("use_intra_process", "False")
212+
add_launch_arg("use_multithread", "False")
213+
248214
set_container_executable = SetLaunchConfiguration(
249215
"container_executable",
250216
"component_container",
@@ -262,8 +228,6 @@ def create_parameter_dict(*args):
262228
*launch_arguments,
263229
set_container_executable,
264230
set_container_mt_executable,
265-
container,
266-
decompressor_loader,
267-
fine_detector_loader,
231+
OpaqueFunction(function=launch_setup),
268232
]
269233
)

perception/traffic_light_classifier/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL)
123123

124124
ament_auto_package(INSTALL_TO_SHARE
125125
launch
126+
config
126127
)
127128

128129
else()
@@ -147,6 +148,7 @@ else()
147148

148149
ament_auto_package(INSTALL_TO_SHARE
149150
launch
151+
config
150152
)
151153

152154
endif()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/**:
2+
ros__parameters:
3+
approximate_sync: false
4+
classifier_label_path: "$(var traffic_light_classifier_model_path)/$(var car_traffic_light_classifier_label_name)"
5+
classifier_model_path: "$(var traffic_light_classifier_model_path)/$(var car_traffic_light_classifier_model_name).onnx"
6+
classifier_precision: fp16
7+
classifier_mean: [123.675, 116.28, 103.53]
8+
classifier_std: [58.395, 57.12, 57.375]
9+
backlight_threshold: 0.85
10+
classifier_type: 1 #classifier_type {hsv_filter: 0, cnn: 1}
11+
classify_traffic_light_type: 0 #classify_traffic_light_type {car: 0, pedestrian:1}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/**:
2+
ros__parameters:
3+
approximate_sync: false
4+
classifier_label_path: "$(var traffic_light_classifier_model_path)/$(var pedestrian_traffic_light_classifier_label_name)"
5+
classifier_model_path: "$(var traffic_light_classifier_model_path)/$(var pedestrian_traffic_light_classifier_model_name).onnx"
6+
classifier_precision: fp16
7+
classifier_mean: [123.675, 116.28, 103.53]
8+
classifier_std: [58.395, 57.12, 57.375]
9+
backlight_threshold: 0.85
10+
classifier_type: 1 #classifier_type {hsv_filter: 0, cnn: 1}
11+
classify_traffic_light_type: 1 #classify_traffic_light_type {car: 0, pedestrian:1}

perception/traffic_light_classifier/launch/traffic_light_classifier.launch.xml

+3-21
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,14 @@
22
<arg name="input/image" default="~/image_raw"/>
33
<arg name="input/rois" default="~/rois"/>
44
<arg name="output/traffic_signals" default="classified/traffic_signals"/>
5-
<arg name="data_path" default="$(env HOME)/autoware_data" description="packages data and artifacts directory path"/>
6-
<arg name="classifier_label_path" default="$(var data_path)/traffic_light_classifier/lamp_labels.txt" description="classifier label path"/>
7-
<arg name="classifier_model_path" default="$(var data_path)/traffic_light_classifier/traffic_light_classifier_mobilenetv2_batch_6.onnx" description="classifier onnx model path"/>
8-
<arg name="classifier_precision" default="fp16"/>
9-
10-
<arg name="use_gpu" default="true"/>
11-
<!-- classifier_type {hsv_filter: 0, cnn: 1} -->
12-
<arg name="classifier_type" default="1" if="$(var use_gpu)"/>
13-
<arg name="classifier_type" default="0" unless="$(var use_gpu)"/>
14-
<!-- classify_traffic_light_type {car: 0, pedestrian:1} -->
15-
<arg name="classify_traffic_light_type" default="0"/>
16-
17-
<arg name="build_only" default="false" description="shutdown node after TensorRT engine file is built"/>
18-
<arg name="backlight_threshold" default="0.85" description="overwrite signals if the RoI image intensity is greater than this value"/>
5+
<arg name="traffic_light_classifier_param_path" default="$(find-pkg-share traffic_light_classifier)/config/traffic_light_classifier.param.yaml" description="classifier param path"/>
6+
<arg name="build_only" default="false" description="exit after trt engine is built"/>
197

208
<node pkg="traffic_light_classifier" exec="traffic_light_classifier_node" name="traffic_light_classifier" output="screen">
219
<remap from="~/input/image" to="$(var input/image)"/>
2210
<remap from="~/input/rois" to="$(var input/rois)"/>
2311
<remap from="~/output/traffic_signals" to="$(var output/traffic_signals)"/>
24-
<param name="approximate_sync" value="false"/>
25-
<param name="classifier_type" value="$(var classifier_type)"/>
26-
<param name="classify_traffic_light_type" value="$(var classify_traffic_light_type)"/>
27-
<param name="classifier_label_path" value="$(var classifier_label_path)"/>
28-
<param name="classifier_model_path" value="$(var classifier_model_path)"/>
29-
<param name="classifier_precision" value="$(var classifier_precision)"/>
12+
<param from="$(var traffic_light_classifier_param_path)" allow_substs="true"/>
3013
<param name="build_only" value="$(var build_only)"/>
31-
<param name="backlight_threshold" value="$(var backlight_threshold)"/>
3214
</node>
3315
</launch>

perception/traffic_light_fine_detector/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,14 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL)
101101

102102
ament_auto_package(INSTALL_TO_SHARE
103103
launch
104+
config
104105
)
105106

106107
else()
107108
message(STATUS "TrafficLightFineDetector won't be built, CUDA and/or TensorRT were not found.")
108109
# to avoid launch file missing without a gpu
109110
ament_auto_package(INSTALL_TO_SHARE
110111
launch
112+
config
111113
)
112114
endif()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/**:
2+
ros__parameters:
3+
fine_detector_label_path: "$(var traffic_light_fine_detector_model_path)/$(var traffic_light_fine_detector_label_name)"
4+
fine_detector_model_path: "$(var traffic_light_fine_detector_model_path)/$(var traffic_light_fine_detector_model_name).onnx"
5+
fine_detector_precision: fp16
6+
fine_detector_score_thresh: 0.3
7+
fine_detector_nms_thresh: 0.65

0 commit comments

Comments
 (0)