/usr/include/ITK-4.9/itkLBFGSOptimizerBasev4.h is in libinsighttoolkit4-dev 4.9.0-4ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | /*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef itkLBFGSOptimizerBasev4_h
#define itkLBFGSOptimizerBasev4_h
#include "itkSingleValuedNonLinearVnlOptimizerv4.h"
#include "vnl/algo/vnl_lbfgs.h"
#include "vnl/algo/vnl_lbfgsb.h"
#include "itkAutoPointer.h"
#include "ITKOptimizersv4Export.h"
namespace itk
{
/* Necessary forward declaration see below for definition */
/** \class LBFGSOptimizerBaseHelperv4
* \brief Wrapper helper around vnl optimizer.
*
* This class is used to translate iteration events, etc, from
* vnl_lbfgsb into iteration events in ITK.
*
* \ingroup ITKOptimizersv4
*/
template< typename TInternalVnlOptimizerType >
class LBFGSOptimizerBaseHelperv4;
/** \class LBFGSOptimizerBasev4
* \brief Abstract base for vnl lbfgs algorithm optimizers in ITKv4 registration framework.
*
* \note The StopConditionDescription returned by this class is directly from the vnl
* optimizer by calling <tt> m_VnlOptimizer->get_failure_code() </tt>. This seems to
* return "Failure" even when no error has occured. The same behavior is observed
* in the ITKv3 version of this optimizer.
*
* \note Local-support (high-density) transforms.
* Local-support transforms are not supported. To add support for these,
* the class must be modified thusly:
*
* \note 1) Parameter updates:
* In SingleValuedNonLinearCostFunctionAdaptor, the handling of the gradient
* must be changed to accomodate the fact that local-support transforms expect
* a gradient to be added to the transform parameters using the
* UpdateTransformParameters method of the local support transform. Other optimizers
* in the v4 framework use this method, but the use of the vnl optimizers here
* complicates it.
*
* \note 2) Efficiency
* To work efficiently with local-support transforms, this class should be
* modified to use a single parameter object to avoid the multiple
* parameter copies that are currently performed. It should work to use
* the transform parameters pointer.
*
* This code has been adapted for the ITKv4 registration framework from the
* v3 version, itkLBFGSOptimizer.
*
* \ingroup ITKOptimizersv4
*/
template< typename TInternalVnlOptimizerType >
class LBFGSOptimizerBasev4:
public SingleValuedNonLinearVnlOptimizerv4
{
public:
/** Standard "Self" typedef. */
typedef LBFGSOptimizerBasev4 Self;
typedef SingleValuedNonLinearVnlOptimizerv4 Superclass;
typedef SmartPointer< Self > Pointer;
typedef SmartPointer< const Self > ConstPointer;
/** Run-time type information (and related methods). */
itkTypeMacro(LBFGSOptimizerBasev4, SingleValuedNonLinearVnlOptimizerv4);
typedef Superclass::MetricType MetricType;
typedef Superclass::ParametersType ParametersType;
typedef Superclass::ScalesType ScalesType;
/** Stop condition return string type */
typedef Superclass::StopConditionReturnStringType StopConditionReturnStringType;
/** Stop condition internal string type */
typedef Superclass::StopConditionDescriptionType StopConditionDescriptionType;
/** The vnl optimizer */
typedef LBFGSOptimizerBaseHelperv4<TInternalVnlOptimizerType> InternalOptimizerType;
/** Method for getting access to the internal optimizer. */
InternalOptimizerType * GetOptimizer();
/** Start optimization with an initial value. */
virtual void StartOptimization(bool doOnlyInitialization = false) ITK_OVERRIDE;
/** Plug in a Cost Function into the optimizer */
virtual void SetMetric(MetricType *metric) ITK_OVERRIDE;
/** Set/Get the optimizer trace flag. If set to true, the optimizer
* prints out information every iteration.
*/
virtual void SetTrace(bool flag);
itkGetConstMacro(Trace, bool);
itkBooleanMacro(Trace);
/** Set/Get the maximum number of function evaluations allowed. */
virtual void SetMaximumNumberOfFunctionEvaluations(unsigned int n);
itkGetConstMacro(MaximumNumberOfFunctionEvaluations, unsigned int);
/** Set/Get the gradient convergence tolerance. This is a positive
* real number that determines the accuracy with which the solution is to
* be found. The optimization terminates when:
* ||G|| < gtol max(1,||X||) where ||.|| denotes the Euclidean norm.
*/
virtual void SetGradientConvergenceTolerance(double gtol);
itkGetConstMacro(GradientConvergenceTolerance, double);
/** Get the reason for termination */
virtual const StopConditionReturnStringType GetStopConditionDescription() const ITK_OVERRIDE;
protected:
LBFGSOptimizerBasev4();
virtual ~LBFGSOptimizerBasev4();
virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE;
typedef Superclass::CostFunctionAdaptorType CostFunctionAdaptorType;
bool m_OptimizerInitialized;
typedef AutoPointer<InternalOptimizerType> InternalOptimizerAutoPointer;
InternalOptimizerAutoPointer m_VnlOptimizer;
mutable std::ostringstream m_StopConditionDescription;
bool m_Trace;
unsigned int m_MaximumNumberOfFunctionEvaluations;
double m_GradientConvergenceTolerance;
double m_InfinityNormOfProjectedGradient;
double m_CostFunctionConvergenceFactor;
// give the helper access to member variables, to update iteration
// counts, etc.
friend class LBFGSOptimizerBaseHelperv4<TInternalVnlOptimizerType>;
friend class LBFGSBOptimizerHelperv4;
private:
LBFGSOptimizerBasev4(const Self &) ITK_DELETE_FUNCTION;
void operator=(const Self &) ITK_DELETE_FUNCTION;
};
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkLBFGSOptimizerBasev4.hxx"
#endif
#endif
|