|
gtsam
|
Implementation of the "Geman-McClure" robust error model (Zhang97ivc).
Note that Geman-McClure weight function uses the parameter c == 1.0, but here it's allowed to use different values, so we actually have the generalized Geman-McClure from (Agarwal15phd).
Geman-McClure loss has two graduated forms
STANDARD [1] is the normalized form of the Yang GNC-GM surrogate. It relaxes the shape parameter by the historical \lambda = 1 / \mu, i.e. it evaluates the Geman-McClure loss above with c² replaced by c²/\mu.
SCALE_INVARIANT [2] is graduated according to the following form.
Public Member Functions | |
| GemanMcClure (double c=1.0, const ReweightScheme reweight=Block) | |
| Construct standard GemanMcClure loss. | |
| GemanMcClure (double c, const GradScheme graduation, const ReweightScheme reweight=Block) | |
| Constructor for a loss with an explicit graduation scheme. | |
| double | weight (double distance) const override |
| This method is responsible for returning the weight function for a given amount of error. | |
| double | loss (double distance) const override |
| This method is responsible for returning the total penalty for a given amount of error. | |
| double | graduatedWeight (double distance, double mu) const override |
| This method is responsible for returning the weight for a given amount of error and the current control parameter \(\mu\). | |
| double | graduatedLoss (double distance, double mu) const override |
| This method is responsible for returning the total penalty for a given amount of error and the current control parameter \(\mu\). | |
| void | print (const std::string &s) const override |
| bool | equals (const Base &expected, double tol=1e-8) const override |
| double | modelParameter () const |
| GradScheme | gradScheme () const |
| Returns the graduation scheme used by this loss. | |
| Public Member Functions inherited from gtsam::noiseModel::mEstimator::Base | |
| Base (const ReweightScheme reweight=Block) | |
| ReweightScheme | reweightScheme () const |
| Returns the reweight scheme, as explained in ReweightScheme. | |
| double | sqrtWeight (double distance) const |
| Vector | weight (const Vector &error) const |
| produce a weight vector according to an error vector and the implemented robust function | |
| Vector | sqrtWeight (const Vector &error) const |
| square root version of the weight function | |
| void | reweight (Vector &error) const |
| reweight block matrices and a vector according to their weight implementation | |
| void | reweight (std::vector< Matrix > &A, Vector &error) const |
| void | reweight (Matrix &A, Vector &error) const |
| void | reweight (Matrix &A1, Matrix &A2, Vector &error) const |
| void | reweight (Matrix &A1, Matrix &A2, Matrix &A3, Vector &error) const |
Static Public Member Functions | |
| static shared_ptr | Create (double k, const ReweightScheme reweight=Block) |
| static shared_ptr | Create (double k, const GradScheme graduation, const ReweightScheme reweight=Block) |
| Factory for a loss with an explicit graduation scheme. | |
| static double | Weight (double distance2, double c2) |
| A static helper function to compute the Geman-McClure robust weight. | |
| static double | Loss (double distance2, double c2) |
| Static implementation of GemanMcClure Loss. | |
| static double | GraduatedWeight (double distance2, double c2, double mu, GradScheme graduation) |
| Static implementation of GemanMcClure Graduated Weight. | |
| static double | GraduatedLoss (double distance2, double c2, double mu, GradScheme graduation) |
| Static implementation of GemanMcClure Graduated Loss. | |
| static double | ShapeParameterFromInfluenceThreshold (double influenceThreshold, size_t dof, double chiSquaredOutlierThreshold) |
| Static helper to compute shape param (c) using outlier influence. | |
Public Types | |
| enum | GradScheme { STANDARD , SCALE_INVARIANT } |
| typedef std::shared_ptr< GemanMcClure > | shared_ptr |
| Public Types inherited from gtsam::noiseModel::mEstimator::Base | |
| enum | ReweightScheme { Scalar , Block } |
| the rows can be weighted independently according to the error or uniformly with the norm of the right hand side | |
| typedef std::shared_ptr< Base > | shared_ptr |
Protected Attributes | |
| double | c_ |
| double | csquared_ |
| GradScheme | graduation_ |
| Protected Attributes inherited from gtsam::noiseModel::mEstimator::Base | |
| ReweightScheme | reweight_ |
| Strategy for reweighting. | |
|
overridevirtual |
Implements gtsam::noiseModel::mEstimator::Base.
|
overridevirtual |
This method is responsible for returning the total penalty for a given amount of error and the current control parameter \(\mu\).
This returns \(\rho(x, \mu)\) in mEstimator
Implements gtsam::noiseModel::mEstimator::Base.
|
overridevirtual |
This method is responsible for returning the weight for a given amount of error and the current control parameter \(\mu\).
This returns \(w(x, \mu)\) in mEstimator
Implements gtsam::noiseModel::mEstimator::Base.
|
overridevirtual |
This method is responsible for returning the total penalty for a given amount of error.
For example, this method is responsible for implementing the quadratic function for an L2 penalty, the absolute value function for an L1 penalty, etc.
TODO(mikebosse): When the loss function has as input the norm of the error vector, then it prevents implementations of asymmeric loss functions. It would be better for this function to accept the vector and internally call the norm if necessary.
This returns \(\rho(x)\) in mEstimator
Reimplemented from gtsam::noiseModel::mEstimator::Base.
|
overridevirtual |
Implements gtsam::noiseModel::mEstimator::Base.
|
static |
Static helper to compute shape param (c) using outlier influence.
Computes a shape param such that an outlier will have: d/dx(\rho(x)) <= influenceThreshold
| influenceThreshold | - The max influence permited by an outlier. Must be in (0, sqrt(chi2 quantile)) |
| dof | - The degrees of freedom of the corresponding measurement |
| chiSquaredOutlierThreshold | - The threshold for outlier (i.e. 0.95). Must be in [0,1] |
| std::invalid_argument | if influenceThreshold is outside that range. |
|
overridevirtual |
This method is responsible for returning the weight function for a given amount of error.
The weight function is related to the analytic derivative of the loss function. See https://members.loria.fr/MOBerger/Enseignement/Master2/Documents/ZhangIVC-97-01.pdf for details. This method is required when optimizing cost functions with robust penalties using iteratively re-weighted least squares.
This returns w(x) in mEstimator
Implements gtsam::noiseModel::mEstimator::Base.