File size: 6,179 Bytes
e6218be
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
---
license: apache-2.0
pipeline_tag: robotics
tags:
  - autoware
  - ros2
  - autonomous-driving
  - motion-prediction
  - trajectory-prediction
  - simpl
  - tensorrt
  - onnx
---

# SIMPL for Autoware (`simpl_prediction`)

Multi-agent motion prediction model for autonomous driving, used by the
[`autoware_simpl_prediction`](https://github.com/autowarefoundation/autoware_universe/tree/main/perception/autoware_simpl_prediction)
node in [Autoware](https://github.com/autowarefoundation/autoware).

The model follows the **SIMPL** [1] architecture (A Simple and Efficient Multi-agent Motion Prediction
Baseline for Autonomous Driving) and runs with TensorRT inside Autoware. It is exported as ONNX so it can be
deployed across hardware; Autoware builds the TensorRT engine from the ONNX file on first launch.

## Model overview

| | |
| --- | --- |
| Task | Multi-modal trajectory prediction for tracked traffic agents |
| Architecture | SIMPL [1] |
| Predicted agent classes | `VEHICLE`, `PEDESTRIAN`, `MOTORCYCLIST`, `CYCLIST`, `LARGE_VEHICLE` |
| Runtime | TensorRT (FP32 by default) via the `autoware_simpl_prediction` ROS 2 node |
| Format | ONNX (Autoware builds the TensorRT engine locally on first launch) |
| License | Apache-2.0 |

Autoware object labels are mapped to the model's agent classes as follows: `CAR` to `VEHICLE`, `PEDESTRIAN`
to `PEDESTRIAN`, `BICYCLE` to `CYCLIST`, `MOTORCYCLE` to `MOTORCYCLIST`, and `TRUCK` / `TRAILER` / `BUS` to
`LARGE_VEHICLE`. Only agents whose mapped label is listed in the node's `preprocess.labels` parameter are
predicted and published.

The following dimensions are fixed at ONNX export time (dynamic shape inference is not supported yet), and
the default node configuration matches them:

| Parameter | Symbol | Value |
| --- | --- | --- |
| Maximum number of agents | N | 50 |
| Past history length | T_past | 8 |
| Maximum number of map polylines | K | 300 |
| Maximum points per polyline | P | 10 |
| Number of prediction modes | M | 6 |
| Future horizon length | T_future | 80 |

## Files

| File | Description |
| --- | --- |
| `simpl.onnx` | SIMPL motion prediction network (ONNX) |
| `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

**Network inputs**

- Agent histories: `N x D_agent x T_past` (past states of the tracked agents)
- Map points: `K x P x D_map` (lanelet map polylines)
- Relative pose encoding: `(N + K) x (N + K) x D_rpe`

**Network outputs**

- Predicted scores: `N x M` (confidence per agent and mode)
- Predicted trajectories: `N x M x T_future x D_trajectory`, where `D_trajectory` is `(x, y, vx, vy)` in the
  agent local coordinate frame

**Node topics (as used by `autoware_simpl_prediction`)**

| Topic | Type | Direction |
| --- | --- | --- |
| `~/input/objects` | `autoware_perception_msgs/msg/TrackedObjects` | input |
| `~/input/vector_map` | `autoware_map_msgs/msg/LaneletMapBin` | input |
| `/localization/kinematic_state` | `nav_msgs/msg/Odometry` | input |
| `~/output/objects` | `autoware_perception_msgs/msg/PredictedObjects` | output |

Pre-processing (agent history accumulation, lanelet-to-polyline conversion) and post-processing (mode score
thresholding) run in the node, not in the ONNX graph.

## Usage in Autoware

The node expects the artifacts under `~/autoware_data/ml_models/simpl_prediction/` and launches with:

```bash
ros2 launch autoware_simpl_prediction simpl.launch.xml
```

Add `build_only:=true` to build the TensorRT engine from the ONNX as a one-off pre-task. The default
parameters (`config/simpl.param.yaml`) point to `simpl.onnx` in the data directory and use `fp32` precision.
See the [package README](https://github.com/autowarefoundation/autoware_universe/tree/main/perception/autoware_simpl_prediction)
for the full parameter reference.

## Training

The SIMPL architecture and reference training code originate from the upstream project:

- Original implementation: <https://github.com/HKUST-Aerial-Robotics/SIMPL>
- Paper: "SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving",
  arXiv:2402.02519

An Autoware library to train and deploy SIMPL and other motion prediction models is work in progress, as
noted in the package README. The training data and training configuration used to produce the released
`simpl.onnx` weights are not publicly documented.

## Limitations

- The number of predictable agents is fixed at export time (`max_num_agent: 50`); dynamic shape inference is
  not supported yet.
- Only agents whose label is contained in `preprocess.labels` are published; other road users are ignored.
- Predicted modes with a confidence score below `postprocess.score_threshold` are filtered out. If all modes
  of an object are filtered, the published object contains no path, and the remaining mode confidences are
  not guaranteed to sum to 100%.
- Agent history that is no longer observed in incoming callbacks is dropped, which resets prediction context
  for reappearing agents.

## Provenance

| | |
| --- | --- |
| Original artifact source | `https://awf.ml.dev.web.auto/perception/models/simpl/v0.1.0/simpl.onnx` |
| Source version string | `simpl/v0.1.0` |
| Tag in this repository | `v0.1` (normalized from `v0.1.0`) |
| `simpl.onnx` SHA-256 | `ad5e03983193c4d188432f314334697d6a216e7ffc91fb651eee5d6e4c42f492` |

## Citation

```bibtex
@article{zhang2024simpl,
  title   = {SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving},
  author  = {Zhang, Lu and Li, Peiliang and Liu, Sikang and Shen, Shaojie},
  journal = {arXiv preprint arXiv:2402.02519},
  year    = {2024}
}
```

## References

- [1] Zhang et al., "SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving", arXiv:2402.02519, 2024.
- [2] Original implementation: <https://github.com/HKUST-Aerial-Robotics/SIMPL>