Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]
Messages
Services
Plugins
Recent questions tagged autoware_traffic_light_classifier at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yukihiro Saito
- Yoshi Ri
- Tao Zhong
- Masato Saeki
- Taekjin Lee
- Masaki Baba
Authors
autoware_traffic_light_classifier
Purpose
autoware_traffic_light_classifier is a package for classifying traffic light labels using cropped image around a traffic light. This package has two classifier models: cnn_classifier and hsv_classifier.
Inner-workings / Algorithms
If height and width of ~/input/rois is 0, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, CIRCLE, and 0.0.
If ~/input/rois is judged as backlight, color, shape, and confidence of ~/output/traffic_signals become UNKNOWN, UNKNOWN, and 0.0.
cnn_classifier
Traffic light labels are classified by EfficientNet-b1 or MobileNet-v2.
We trained classifiers for vehicular signals and pedestrian signals separately.
For vehicular signals, a total of 83400 (58600 for training, 14800 for evaluation and 10000 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 99.76% |
| MobileNet-v2 | 224 x 224 | 99.81% |
For pedestrian signals, a total of 21199 (17860 for training, 2114 for evaluation and 1225 for test) TIER IV internal images of Japanese traffic lights were used for fine-tuning.
The information of the models is listed here:
| Name | Input Size | Test Accuracy |
|---|---|---|
| EfficientNet-b1 | 128 x 128 | 97.89% |
| MobileNet-v2 | 224 x 224 | 99.10% |
hsv_classifier
Traffic light colors (green, yellow and red) are classified in HSV model.
About Label
The message type is designed to comply with the unified road signs proposed at the Vienna Convention. This idea has been also proposed in Autoware.Auto.
There are rules for naming labels that nodes receive. One traffic light is represented by the following character string separated by commas. color1-shape1, color2-shape2 .
For example, the simple red and red cross traffic light label must be expressed as “red-circle, red-cross”.
These colors and shapes are assigned to the message as follows:

Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/image |
sensor_msgs::msg::Image |
input image |
~/input/rois |
tier4_perception_msgs::msg::TrafficLightRoiArray |
rois of traffic lights |
Output
| Name | Type | Description |
|---|---|---|
~/output/traffic_signals |
tier4_perception_msgs::msg::TrafficLightArray |
classified signals |
~/output/debug/image |
sensor_msgs::msg::Image |
image for debugging |
Parameters
Node Parameters
car_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/car_traffic_light_classifier.schema.json”) }}
pedestrian_traffic_light_classifier
{{ json_to_markdown(“perception/autoware_traffic_light_classifier/schema/pedestrian_traffic_light_classifier.schema.json”) }}
Core Parameters
cnn_classifier
Including this section
hsv_classifier
| Name | Type | Description |
|---|---|---|
green_min_h |
int | the minimum hue of green color |
green_min_s |
int | the minimum saturation of green color |
green_min_v |
int | the minimum value (brightness) of green color |
green_max_h |
int | the maximum hue of green color |
green_max_s |
int | the maximum saturation of green color |
green_max_v |
int | the maximum value (brightness) of green color |
yellow_min_h |
int | the minimum hue of yellow color |
yellow_min_s |
int | the minimum saturation of yellow color |
yellow_min_v |
int | the minimum value (brightness) of yellow color |
yellow_max_h |
int | the maximum hue of yellow color |
yellow_max_s |
int | the maximum saturation of yellow color |
yellow_max_v |
int | the maximum value (brightness) of yellow color |
red_min_h |
int | the minimum hue of red color |
red_min_s |
int | the minimum saturation of red color |
red_min_v |
int | the minimum value (brightness) of red color |
red_max_h |
int | the maximum hue of red color |
red_max_s |
int | the maximum saturation of red color |
File truncated at 100 lines see the full file
Changelog for package autoware_traffic_light_classifier
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
build(autoware_traffic_light_classifier): move classifier headers to public include directory (#13361) refactor(autoware_traffic_light_classifier): publicize CNNClassifier headers Move classifier_interface.hpp and cnn_classifier.hpp from src/classifier/ to include/autoware/traffic_light_classifier/classifier/ so that other packages can construct a CNNClassifier against the extracted classification core, the way they already can against TrafficLightClassifier. The remaining backends (cnn_lamp_recognizer, color_classifier) stay private; only their include of the now-public ClassifierInterface changes. No behavior change.
-
build(traffic_light_perception): split core/node CMake targets and expose public core headers (#13325)
* refactor(autoware_traffic_light_category_merger): expose core header, split core/node CMake targets Move traffic_light_category_merger.hpp into include/autoware/traffic_light_category_merger/, and split the CMake target into ${PROJECT_NAME} (core) and ${PROJECT_NAME}_node (Node adapter linking the core). The Node header stays in src/. No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_selector): expose core header, split core/node CMake targets Move traffic_light_selector.hpp into include/autoware/traffic_light_selector/, keeping traffic_light_selector_utils.hpp private in src/ (not part of the public API). Split the CMake target into ${PROJECT_NAME} (core: selector + utils) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_traffic_light_map_based_detector): expose core header, split core/node CMake targets Move traffic_light_map_based_detector.hpp into include/autoware/traffic_light_map_based_detector/, keeping traffic_light_map_based_detector_process.hpp private in src/ (not part of the public API). Since the public header declares functions taking image_geometry::PinholeCameraModel, add that include directly to the header instead of pulling it in transitively via the private process header. Split the CMake target into ${PROJECT_NAME} (core: detector + process) and ${PROJECT_NAME}_node (Node adapter linking the core). No behavior change; colcon build + colcon test pass (7 tests, 0 failures).
* refactor(autoware_tensorrt_yolox): build TrtYoloXDetector as part of the core library tensorrt_yolox_detector.cpp implements core detection logic and was being compiled into ${PROJECT_NAME}_node (the Node adapter target) instead of ${PROJECT_NAME} (the core library). Move it to the core target so the core library does not depend on the node target for its own logic.
- refactor(autoware_traffic_light_classifier): expose TrafficLightClassifier as the sole public header
- Move traffic_light_classifier.hpp to include/autoware/traffic_light_classifier/ and forward-declare ClassifierInterface instead of including classifier/classifier_interface.hpp, so the classifier/*.hpp backends and classifier_params.hpp / traffic_light_classifier_node.hpp stay private under src/.
- Split the CMake library target into ${PROJECT_NAME} (ROS-free classification core) and ${PROJECT_NAME}_node (rclcpp::Node adapter layer), mirroring the core/node separation already present in src/.
- single_image_debug_inference_node and the node-level integration test now link against both libraries instead of recompiling every source file.
- refactor(autoware_traffic_light_multi_camera_fusion): move headers under include/, split core/node CMake targets
- refactor(autoware_traffic_light_arbiter): split core/node CMake targets
- refactor(autoware_image_transport_decompressor): move core logic header to include, node header to src
* refactor(autoware_crosswalk_traffic_light_estimator): move core logic header to include, node header to src, split core/node CMake targets ---------
-
refactor(autoware_traffic_light_classifier): pass ROS 2 message types through classify() and make_debug_image() (#13240)
* refactor(autoware_traffic_light_classifier): pass raw image message into classify() Move the sensor_msgs::msg::Image decode (cv_bridge) into TrafficLightClassifier::classify(), so the node passes the raw ROS message instead of a pre-decoded cv::Mat.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/car_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/car_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels.txt]
- build_only [default: false]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- launch/pedestrian_traffic_light_classifier.launch.xml
-
- data_path [default: $(env HOME)/autoware_data/ml_models]
- input/image [default: ~/image_raw]
- input/rois [default: ~/rois]
- output/traffic_signals [default: classified/traffic_signals]
- param_path [default: $(find-pkg-share autoware_traffic_light_classifier)/config/pedestrian_traffic_light_classifier.param.yaml]
- classifier_type [default: 1]
- label_path [default: $(var data_path)/traffic_light_classifier/lamp_labels_ped.txt]
- lamp_recognizer_ml [default: $(var data_path)/traffic_light_classifier/lamp_recognizer_ml.param.yaml]
- build_only [default: false]