OpenGM

OpenGM is a C++ template library for discrete factor graph models and distributive
operations on these models. It includes state-of-the-art optimization and inference
algorithms beyond message passing.
OpenGM handles large models efficiently, since (i) functions that
occur repeatedly need to be stored only once and (ii) when functions require
different parametric or non-parametric encodings, multiple encodings can be used
alongside each other, in the same model, using included and custom C++ code.
No restrictions are imposed on the factor graph or the operations of the model.
OpenGM is modular and extendible. Elementary data types can be chosen to maximize
efficiency. The graphical model data structure, inference algorithms and different
encodings of functions inter-operate through well-defined interfaces. The binary
OpenGM file format is based on the HDF5 standard and incorporates user extensions
automatically.

Features

Factor Graph Models:
Our implementation can deal with factor graphs [55]
of any order and structure, from second order grid graphs to irregular higher-order models. We support
arbitrary (commutative and associative) operations, including sum, product, conjunction and disjunction,
flexible number of labels (different variables can have differently many labels), and
function sharing across factors.
The example graph on the right illustrate a second factor graph with 5 variable nodes, a single unary factor connected to each variable node and
10 second order factors. The corresponding objective function factorize according to this structure and the operation addition into

J(x) = sum_f \varphi_f(x_{ne(f)}

Functions:
Our function type abstraction enables different (built-in and custom) encodings to be used alongside each other.
Naitively OpenGM provides:
Explicit function (multi-dimensional table),
sparse function (sparse multi-dimensional table),
Potts functions (different types, including higher-order),
truncated absolute difference,
truncated squared difference, and
views that treat one graphical model as a function within another graphical model.
Furthermore, functions can be easyly included into OpenGM with full support and efficient storage.
As illustrated in the right, each factor is associated to a function out of a predefined list of different function types.

Algorithms:
OpenGM comes with an uniform inference algorithm framework, which makes developing of new algorithms quite easy and allready provides several state of the art methods or wrappers to existing code: