Implementation of Max-Margin Markov Networks using functional gradient boosting
as described in Munoz et al., "Contextual Classification with Functional Max-Margin
Markov Networks", CVPR 2009.
The learning component of this package is under BSD License. The inference/classification
component can either use the Graph Boost Library (Boost Software License) or another
3rd party library (from Vladimir Kolmogorov) which has a "research-only" license.
functional_m3n is a package for training and classifying with Max-Margin Markov Networks using functional gradient boosting. The network structure can contain high-order cliques assuming a (Robust) Potts interaction model. This package does not have ROS dependencies, and is currently only dependent on OpenCV and Boost C++.
This package implements/heavily uses techniques/ideas described in the following publications:
[1] D. Munoz, J. A. Bagnell, N. Vandapel, and M. Hebert, "Contextual Classification with Functional Max-Margin Markov Networks", CVPR 2009
[2] B. Taskar, C. Guestrin, and D. Koller, "Max-Margin Markov Networks", NIPS 2003
[3] N. Ratliff, D. Silver, and J. A. Bagnell, "Learning to Search: Functional Gradient Techniques for Imitation Learning", Autonomous Robots 2009
[4] P. Kohli, L. Ladicky, and P. H. S. Torr, "Robust Higher Order Potentials for Enforcing Label Consistency", CVPR 2008
[5] P. Kohli, M. P. Kumar, and P. H. S. Torr, "P3 and Beyond: Solving Energies with Higher Order Cliques", CVPR 2007
[6] V. Kolmogorov and R. Zabih, "What Energy Functions can be Minimized via Graph Cuts?", PAMI 2002
[7] Y. Boykov, O. Veksler, and R. Zabih, "Fast Approximate Energy Minimization via Graph Cuts", PAMI 2001
The main two classes are
A RandomField is a data structure that wraps around pre-computed features from your application. A RandomField::Node represents the primitive (e.g. pixel in an image) that you wish to classify. A RandomField::Clique creates dependencies among multiple RandomField::Node that should try to be classified the same label (e.g. segments in an image). Once you've created (multiple) RandomField (s) you can train a M3NModel and then classify other RandomFields.
See RandomField::createNode and RandomField::createClique
See M3NModel::train
See M3NModel::infer