File size: 5,282 Bytes
ea54ddc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
---
license: apache-2.0
pipeline_tag: image-classification
tags:
  - autoware
  - ros2
  - autonomous-driving
  - lidar
  - camera
  - calibration
  - sensing
  - tensorrt
  - onnx
---

# Calibration Status Classifier for Autoware (`calibration_status_classifier`)

Deep learning model for real-time LiDAR-camera calibration validation, used by the
[`autoware_calibration_status_classifier`](https://github.com/autowarefoundation/autoware_universe/tree/main/sensing/autoware_calibration_status_classifier)
node in [Autoware](https://github.com/autowarefoundation/autoware).

The node projects the LiDAR point cloud onto the (undistorted) camera image, feeds the resulting
5-channel tensor to this network, and classifies whether the LiDAR-camera extrinsic calibration is
still valid. The model is exported as ONNX and runs with TensorRT inside Autoware; Autoware builds
the TensorRT engine from the ONNX file on first launch.

## Model overview

| | |
| --- | --- |
| Task | Binary classification of LiDAR-camera calibration status (calibrated vs. miscalibrated) |
| Input | 5-channel normalized image tensor: RGB + projected LiDAR depth + intensity |
| Output | Calibration status with a miscalibration confidence score |
| Input resolution | Dynamic; TensorRT optimization profile height `[1080, 1860, 2160]`, width `[1920, 2880, 3840]` (min, opt, max) |
| Runtime | TensorRT (FP16 by default, FP32 selectable) via the `autoware_calibration_status_classifier` ROS 2 node |
| Format | ONNX (Autoware builds the TensorRT engine locally on first launch) |
| License | Apache-2.0 |

Pre-processing runs CUDA-accelerated in the node, not in the ONNX graph: image undistortion,
projection of 3D LiDAR points onto the 2D image plane (adding depth and intensity channels), and
morphological dilation of the projected points.

## Files

| File | Description |
| --- | --- |
| `calibration_status_classifier.onnx` | Calibration status classification network |
| `ml_package_calibration_status_classifier.param.yaml` | Model parameters (max projection depth, dilation kernel size, input resolution profile) |
| `deploy_metadata.yaml` | Deployment metadata recording the artifact version of this repository |

> **TensorRT engines are not distributed here.** TensorRT engines are specific to the GPU
> architecture and TensorRT version they are built on and are not portable, so Autoware builds them
> locally from the ONNX file on first launch (or via `build_only:=true`).

## Inputs and outputs (as used by the node)

**Inputs**

- LiDAR point cloud topics (`sensor_msgs/msg/PointCloud2`, XYZIRC format with intensity)
- Camera image topics (`sensor_msgs/msg/Image`, BGR8 format)
- Camera info topics (`sensor_msgs/msg/CameraInfo`, intrinsics and distortion coefficients)

**Outputs**

- `/diagnostics` (`diagnostic_msgs/msg/DiagnosticArray`): calibration status per camera-LiDAR pair
- Preview image topics (`sensor_msgs/msg/Image`): visualization with projected points

The node supports three runtime modes: `MANUAL` (on-demand validation via a `std_srvs/srv/Trigger`
service), `PERIODIC` (validation at a configurable interval), and `ACTIVE` (continuous monitoring
with synchronized sensor data). Inference is gated by configurable prerequisite checks on vehicle
linear velocity, angular velocity, and the number of detected objects in the scene.

## Usage in Autoware

The node loads these artifacts from `~/autoware_data/ml_models/calibration_status_classifier/` and
launches with:

```bash
ros2 launch autoware_calibration_status_classifier calibration_status_classifier.launch.xml
```

Add `build_only:=true` to build the TensorRT engine from the ONNX as a one-off pre-task, and
`model_path:=...` to point at a non-default artifact directory. See the
[package README](https://github.com/autowarefoundation/autoware_universe/tree/main/sensing/autoware_calibration_status_classifier)
for the full parameter reference.

## Training

The model was trained with the AWML CalibrationStatusClassification project:
<https://github.com/tier4/AWML/tree/main/projects/CalibrationStatusClassification>.
It was trained on calibrated and miscalibrated LiDAR-camera data; the exact training datasets and
schedules are not publicly documented beyond the AWML project page.

## Provenance and versioning

| Hugging Face tag | Original source |
| --- | --- |
| `v2.0` | `https://awf.ml.dev.web.auto/sensing/models/calibration_status_classifier/v2/` |

This repository migrates the artifacts previously hosted at the URL above. Consumers should pin a
tag (`--revision v2.0`) rather than tracking `main`.

## Limitations

- Input images must be BGR8 (8-bit per channel); input point clouds must contain intensity
  (XYZIRC format).
- The classifier judges calibration from the projected overlay, so scenes must satisfy the node's
  prerequisite checks (motion and object-count gates) for reliable results.
- Sensor setups that differ substantially from the training configuration may require retraining
  via the AWML project.

## References

- AWML CalibrationStatusClassification: <https://github.com/tier4/AWML/tree/main/projects/CalibrationStatusClassification>
- Consuming package: <https://github.com/autowarefoundation/autoware_universe/tree/main/sensing/autoware_calibration_status_classifier>