nachiket92 / PGP

Code for "Multimodal Trajectory Prediction Conditioned on Lane-Graph Traversals," CoRL 2021.
https://proceedings.mlr.press/v164/deo22a.html
MIT License
217 stars 36 forks source link

Is it really necessary to get indefinite future trajectory in get_visited_edges()? #3

Closed ultimatedigiman closed 2 years ago

ultimatedigiman commented 2 years ago

Hi!

I found that you retrieved indefinite future trajectory while generating the ground truth node sequence and look-up table of visited edges for training behavior cloning: https://github.com/nachiket92/PGP/blob/1dadaf3109212e14f34eb3eb20cf745dec5d7602/datasets/nuScenes/nuScenes_graphs.py#L285

As an experiment, I modified the line above to: fut_xy = self.helper.get_future_for_agent(i_t, s_t, 6, True) Nothing has changed except the time range, I just changed the length of the future trajectory to 6 seconds which is equal to the prediction horizon(t_f in preprocess_nuscenes.yml).

After this modification, I re-preprocessed the dataset and re-trained the model. Here are the metrics I got on nuScenes validation set with 6s for ground truth traversal:

MinADE_5: 1.29 MinADE_10: 0.95 MinFDE_1: 7.26 MissRate_5: 0.52 MissRate_10: 0.34

nachiket92 commented 2 years ago

Interesting! Thanks for running the experiment.

The indefinite future trajectory for getting ground truth traversals is an artifact of my previous work P2T, which uses grid based traversals rather than graphs. I had used the Stanford drone dataset in that work which primarily has pedestrian tracks, many of which are stationary over the prediction horizon. This can throw off the discrete policy, especially when it comes to inferring goals.

Based on your results, it looks like this isn't as much of an issue for nuScenes. I appreciate the effort - helps to have a fresh pair of eyes to correct faulty intuition.

I'd like to reproduce the results and see how it affects the goals inferred by the policy before I make the change.

nachiket92 commented 2 years ago

Finally found some time for this. I managed to reproduce your results. I've made the change to get_visited_edges(). Thanks again!