dstl / Stone-Soup

A software project to provide the target tracking community with a framework for the development and testing of tracking algorithms.
https://stonesoup.rtfd.io
MIT License
384 stars 126 forks source link

Adding an example showing an explicit MHT application using MFA components #954

Closed A-acuto closed 1 week ago

A-acuto commented 4 months ago

This PR adds an example of a Multi-Hypothesis tracking using the Multi-frame assignment components. This example was supposed to rely more on Stone Soup components (e.g., GaussianMixtureInitiator and MultiTargetTracker), however the current implementation of such components is not aligned with the MFA components making complex to deal with it (e.g. #896).

This example shows how to set up this type of simulations in a more general way than the example present in the documentation.

A-acuto commented 4 months ago

Hi @orosoman-dstl and @sdhiscocks : I have applied the suggested changes to the text and references. Now all tracks follows the ground-truths better and there is no more track drifting.

Regarding @sdhiscocks question about the number of tracks: I tried using the GaussianMixtureInitiator with unknown number of tracks (e.g. using the MultiTargetGroundTruthSimulator) but I was not able to make it work properly with the tracking loop needed for the MFA data associator. Hence my approach of fixing the number of targets and start the tracks in this way.

Happy to discuss a more general solution (if possible with the current setup).

sdhiscocks commented 4 months ago

Regarding @sdhiscocks question about the number of tracks: I tried using the GaussianMixtureInitiator with unknown number of tracks (e.g. using the MultiTargetGroundTruthSimulator) but I was not able to make it work properly with the tracking loop needed for the MFA data associator. Hence my approach of fixing the number of targets and start the tracks in this way.

To be honest, I wasn't sure if there was a limitation in the actual algorithm itself that means it assumes fixed number of targets, or limitation of the implementation. I've found when trying to use with varying targets, you can get an RuntimeError due to "Infeasible primal problem", which I suspected could be related to varying the number of tracks.