Other things on this site...

Evolutionary sound
Listen to Flat Four Internet Radio
Learn about
The Molecules of HIV
Make Oddmusic!
Make oddmusic!

Implementing the GM-PHD filter

I'm implementing the GM-PHD filter. (The what? The Gaussian mixture Probability Hypothesis Density filter, which is for tracking multiple objects.) Implementing it in python, which is nice, but I'm not completely clear if it's working as intended yet.

Here's a screenshot of progress so far. Look at the first four plots in this picture, which are:

  1. The true trajectory of two simulated objects moving in 1D over time.
  2. Observations received, with "clutter" and occasional missed detections.
  3. The "intensity" calculated by the GM-PHD filter. This is the core state variable of the filter's model.
  4. Filtered trajectories output from the PHD filter.

So what do you think? Good results?

Not sure. It's clearly got rid of lots of the clutter - good. In fact yes it's got rid of the majority of the noise, hooray hooray. But the clutter right close to the the targets is still there, seems a bit mucky, in a kind of way that suggests it's not going to be easy to clear that up.

And there's also a significant "cold start" problem - it takes up to about 20 frames for the filter to be convinced that there's anything there at all. That's no real surprise, since there's an underlying "birth" model which says that a trail could spring into being at any point, but there's no model for "pre-existing" targets. There's nothing in the PHD and GMPHD papers which I've read which even mentions this, let alone accounts for it - I'm pretty sure that we'll either need to initialise the state to account for this, or always do some kind of "warmup" before getting any results out of the filter. That's not great, especially when we might be tracking things that only have a short lifespan themselves.

One thing: this is a one-dimensional problem I'm testing it on. PHD filters are usually used for 2D or 3D problems - and maybe there needs to be enough entropy in the representation for clutter to be distinguished more clearly from signals. That would be a shame, since I'd like to use it on 1D things like spectrogram frames.

More tests needed. Any thoughts gratefully received too

Thursday 29th March 2012 | science | Permalink
Name: Patrick Flanagan
Website: http://www.jazarimusic.com
Email: jpflanagan art gmail dort com
Date: Thursday 29th March 2012 18:08
Hi Dan,

I'm curious, what kind of objects are you trying to track? Any arbitrary sonic object or just harmonic ones? Also, is the intended application sound source separation or just analysis?

Cheers, Patrick
Name: Dan
Date: Friday 30th March 2012 01:40
Hi Patrick - I'm not working on sound source separation, but recognition. I'm exploring the PHD filter as a way to help multi-object recognition in spectrograms and the like. Not necessarily harmonic sources, but that's obviously one possibility (a harmonic stack might be trickier to put into the gaussian assumptions of GM_PHD though).
Name: Graham Coleman
Date: Friday 30th March 2012 07:29
Interesting reference. Not familiar with this specific technology, but could you make it easier for this example by imposing a strong prior for sets of two objects? Would that improve your results in this case?
Name: Dan
Date: Friday 30th March 2012 17:51
Graham: the PHD filter doesn't directly represent the number of objects, so it's not so easy to impose such a prior. (You could hack it to some extent I imagine.)

There is an improved version of the PHD filter, the "cardinalised" PHD filter. This directly represents a distribution over the number of objects, and so I bet you could impose priors directly on the cardinality. The CPHD is said to be better in general, but a more complex implementation (both in terms of programmer effort and CPU effort...).

Add your comments:

I am a:
Everything is optional - and email addresses will be marmalised to protect you
Creative Commons License
Dan's blog articles may be re-used under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 License. Click the link to see what that means...