Newer
Older
#ifndef SOMModel_h
#define SOMModel_h
//#include "DimensionalityReductionModel.h"
#include "otbSOMMap.h"
#include "otbSOM.h"
#include "itkEuclideanDistanceMetric.h" // the distance function
#include "otbCzihoSOMLearningBehaviorFunctor.h"
#include "otbCzihoSOMNeighborhoodBehaviorFunctor.h"
#include "otbMachineLearningModelTraits.h"
#include "otbMachineLearningModel.h"
namespace otb
{
template <class TInputValue, unsigned int MapDimension>
class ITK_EXPORT SOMModel: public MachineLearningModel<itk::VariableLengthVector< TInputValue> , itk::VariableLengthVector< TInputValue>>
{
public:
typedef SOMModel Self;
typedef MachineLearningModel<itk::VariableLengthVector< TInputValue> , itk::VariableLengthVector< TInputValue>> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
typedef typename Superclass::InputValueType InputValueType;
typedef typename Superclass::InputSampleType InputSampleType;
typedef typename Superclass::InputListSampleType InputListSampleType;
typedef typename InputListSampleType::Pointer ListSamplePointerType;
typedef typename Superclass::TargetValueType TargetValueType;
typedef typename Superclass::TargetSampleType TargetSampleType;
typedef typename Superclass::TargetListSampleType TargetListSampleType;
/// Confidence map related typedefs
typedef typename Superclass::ConfidenceValueType ConfidenceValueType;
typedef typename Superclass::ConfidenceSampleType ConfidenceSampleType;
typedef typename Superclass::ConfidenceListSampleType ConfidenceListSampleType;
typedef SOMMap<itk::VariableLengthVector<TInputValue>,itk::Statistics::EuclideanDistanceMetric<itk::VariableLengthVector<TInputValue>>, MapDimension> MapType;
typedef typename MapType::SizeType SizeType;
typedef typename MapType::SpacingType SpacingType;
//typedef otb::SOM<InputListSampleType, MapType> EstimatorType;
typedef otb::SOM<InputListSampleType, MapType> EstimatorType;
typedef Functor::CzihoSOMLearningBehaviorFunctor SOMLearningBehaviorFunctorType;
typedef Functor::CzihoSOMNeighborhoodBehaviorFunctor SOMNeighborhoodBehaviorFunctorType;
itkNewMacro(Self);
itkTypeMacro(SOMModel, DimensionalityReductionModel);
/** Accessors */
itkSetMacro(NumberOfIterations, unsigned int);
itkGetMacro(NumberOfIterations, unsigned int);
itkSetMacro(BetaInit, double);
itkGetMacro(BetaInit, double);
itkSetMacro(WriteMap, bool);
itkGetMacro(WriteMap, bool);
itkSetMacro(BetaEnd, double);
itkGetMacro(BetaEnd, double);
itkSetMacro(MinWeight, InputValueType);
itkGetMacro(MinWeight, InputValueType);
itkSetMacro(MaxWeight, InputValueType);
itkGetMacro(MaxWeight, InputValueType);
itkSetMacro(MapSize, SizeType);
itkGetMacro(MapSize, SizeType);
itkSetMacro(NeighborhoodSizeInit, SizeType);
itkGetMacro(NeighborhoodSizeInit, SizeType);
itkSetMacro(RandomInit, bool);
itkGetMacro(RandomInit, bool);
itkSetMacro(Seed, unsigned int);
itkGetMacro(Seed, unsigned int);
itkGetObjectMacro(ListSample, InputListSampleType);
itkSetObjectMacro(ListSample, InputListSampleType);
bool CanReadFile(const std::string & filename);
bool CanWriteFile(const std::string & filename);
void Save(const std::string & filename, const std::string & name="") ;
void Load(const std::string & filename, const std::string & name="") ;
void Train() ITK_OVERRIDE;
//void Dimensionality_reduction() {}; // Dimensionality reduction is done by DoPredict
Cédric Traizet
committed
//unsigned int GetDimension() { return MapType::ImageDimension;};
protected:
SOMModel();
~SOMModel() ITK_OVERRIDE;
private:
typename MapType::Pointer m_SOMMap;
virtual TargetSampleType DoPredict(const InputSampleType& input, ConfidenceValueType * quality = ITK_NULLPTR) const;
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
/** Map Parameters used for training */
SizeType m_MapSize;
/** Number of iterations */
unsigned int m_NumberOfIterations;
/** Initial learning coefficient */
double m_BetaInit;
/** Final learning coefficient */
double m_BetaEnd;
/** Initial neighborhood size */
SizeType m_NeighborhoodSizeInit;
/** Minimum initial neuron weights */
InputValueType m_MinWeight;
/** Maximum initial neuron weights */
InputValueType m_MaxWeight;
/** Random initialization bool */
bool m_RandomInit;
/** Seed for random initialization */
unsigned int m_Seed;
/** The input list sample */
ListSamplePointerType m_ListSample;
/** Behavior of the Learning weightening (link to the beta coefficient) */
SOMLearningBehaviorFunctorType m_BetaFunctor;
/** Behavior of the Neighborhood extent */
SOMNeighborhoodBehaviorFunctorType m_NeighborhoodSizeFunctor;
/** Write the SOM Map vectors in a txt file */
bool m_WriteMap;