xmfcx's picture
feat: add image_projection_based_fusion v5.0 artifacts (from awf.ml.dev.web.auto/perception/models/pointpainting/v5)
33119d7 verified
|
Raw
History Blame Contribute Delete
6.73 kB
---
license: apache-2.0
pipeline_tag: object-detection
tags:
- autoware
- ros2
- autonomous-driving
- lidar
- camera
- point-cloud
- sensor-fusion
- pointpainting
- pointpillars
- tensorrt
- onnx
---
# PointPainting for Autoware (`image_projection_based_fusion`)
Camera-LiDAR fusion 3D object detection model for the `pointpainting_fusion` node of the
[`autoware_image_projection_based_fusion`](https://github.com/autowarefoundation/autoware_universe/tree/main/perception/autoware_image_projection_based_fusion)
package in [Autoware](https://github.com/autowarefoundation/autoware).
Following the **PointPainting** [1] approach, LiDAR points are projected onto the output of an image-only 2D
object detector and the class scores are appended to each point. The painted point cloud is then fed to a
CenterPoint-style 3D detection network with a **PointPillars** [2] voxel encoder. The model is exported as ONNX
and runs with TensorRT inside Autoware; the TensorRT engine is built from the ONNX files on first launch.
## Model overview
| | |
| --- | --- |
| Task | 3D object detection (oriented bounding boxes) from a LiDAR point cloud painted with 2D detection class scores |
| Architecture | PointPainting point decoration + PointPillars-style voxel encoder + CenterPoint-style detection head |
| Detected classes | `CAR`, `TRUCK`, `BUS`, `BICYCLE`, `PEDESTRIAN` |
| Painted classes | `CAR`, `BICYCLE`, `PEDESTRIAN` (class scores appended to each point) |
| Runtime | TensorRT (FP16 by default, FP32 selectable) via the `pointpainting_fusion` ROS 2 node |
| Format | ONNX (Autoware builds the TensorRT engine locally on first launch) |
| License | Apache-2.0 |
The network is split into two ONNX sub-models, matching how the node consumes them:
1. **Voxel encoder**: `pts_voxel_encoder_pointpainting.onnx`
- input: `input_features` -> output: `pillar_features`
2. **Backbone / neck / head**: `pts_backbone_neck_head_pointpainting.onnx`
- input: `spatial_features` -> outputs: `heatmap`, `reg`, `height`, `dim`, `rot`, `vel`
Point painting, voxelization, and post-processing (circle NMS, IoU NMS, yaw normalization, distance-based score
thresholding) run in the node, not in the ONNX graphs.
Key model parameters (from `pointpainting_ml_package.param.yaml`): `point_feature_size: 7` (x, y, z, time-lag
and the three painted class scores), `encoder_in_feature_size: 12`, `max_voxel_size: 40000`, point cloud range
`[-121.6, -76.8, -3.0, 121.6, 76.8, 5.0]` m, voxel size `[0.32, 0.32, 8.0]` m, `downsample_factor: 1`.
## Files
| File | Description |
| --- | --- |
| `pts_voxel_encoder_pointpainting.onnx` | Voxel encoder |
| `pts_backbone_neck_head_pointpainting.onnx` | Backbone/neck/head |
| `pointpainting_ml_package.param.yaml` | Model parameters (classes, voxel grid, score thresholds) |
| `detection_class_remapper.param.yaml` | Area-based class remapping (e.g. large car -> truck/trailer) |
| `deploy_metadata.yaml` | Version marker for this artifact set (`version: v5.0`) |
> **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 files
> on first launch (or via `build_only:=true`).
## Inputs and outputs (as used by the node)
**Inputs**
| Topic | Type | Description |
| --- | --- | --- |
| `input/pointcloud` | `sensor_msgs/msg/PointCloud2` | LiDAR point cloud |
| `input/camera_info[N]` | `sensor_msgs/msg/CameraInfo` | Camera information to project 3D points onto image planes |
| `input/rois[N]` | `tier4_perception_msgs/msg/DetectedObjectsWithFeature` | ROIs from each camera's 2D object detector |
| `input/image_raw[N]` | `sensor_msgs/msg/Image` | Images for visualization (debug) |
One `camera_info`/`rois` pair per camera; the launch file defaults to 6 cameras (`input/rois_number`).
**Outputs**
| Topic | Type | Description |
| --- | --- | --- |
| `output/objects` | `autoware_perception_msgs/msg/DetectedObjects` | Detected objects (oriented 3D boxes with class and score) |
| `debug/painted_pointcloud` | `sensor_msgs/msg/PointCloud2` | Painted point cloud (debug) |
## Usage in Autoware
Autoware's setup (ansible artifacts role) downloads these artifacts to
`~/autoware_data/ml_models/image_projection_based_fusion/`; the node then launches with, e.g.:
```bash
ros2 launch autoware_image_projection_based_fusion pointpainting_fusion.launch.xml \
model_name:=pointpainting \
model_path:=$HOME/autoware_data/ml_models/image_projection_based_fusion \
model_param_path:=$(ros2 pkg prefix autoware_image_projection_based_fusion --share)/config/pointpainting.param.yaml
```
Add `build_only:=true` to build the TensorRT engine from the ONNX as a one-off pre-task.
See the [package README](https://github.com/autowarefoundation/autoware_universe/tree/main/perception/autoware_image_projection_based_fusion)
for the full parameter reference, including ROI/point cloud synchronization and matching strategies.
## Training
The model was trained by TIER IV. No public training configuration, dataset description, or training code is
available for this model.
## Provenance and versioning
| | |
| --- | --- |
| Original source | `https://awf.ml.dev.web.auto/perception/models/pointpainting/v5/` |
| Source version path | `pointpainting/v5` |
| Tag in this repository | `v5.0` |
## Limitations
- Only the five classes above are detected, and only car, pedestrian, and bicycle class scores are painted
onto the points. Other road users fall outside the label set.
- Multi-frame painting is not implemented yet (single-frame painting only).
- Fusion quality depends on accurate camera-LiDAR calibration and correct per-camera timestamp offsets
(`rois_timestamp_offsets`), as described in the package README.
- Detection accuracy depends on the upstream 2D object detector that provides the ROIs.
## Citation
```bibtex
@inproceedings{vora2020pointpainting,
title = {PointPainting: Sequential Fusion for 3D Object Detection},
author = {Vora, Sourabh and Lang, Alex H. and Helou, Bassam and Beijbom, Oscar},
booktitle = {CVPR},
year = {2020},
eprint = {1911.10150}
}
@inproceedings{lang2019pointpillars,
title = {PointPillars: Fast Encoders for Object Detection from Point Clouds},
author = {Lang, Alex H. and Vora, Sourabh and Caesar, Holger and Zhou, Lubing and Yang, Jiong and Beijbom, Oscar},
booktitle = {CVPR},
year = {2019}
}
```
## References
- [1] Vora et al., "PointPainting: Sequential Fusion for 3D Object Detection", arXiv:1911.10150, CVPR 2020.
- [2] Lang et al., "PointPillars: Fast Encoders for Object Detection from Point Clouds", CVPR 2019.