SOMModel.h 4.72 KB
Newer Older
1
2
3
#ifndef SOMModel_h
#define SOMModel_h

4
//#include "DimensionalityReductionModel.h"
5
6
7
8
9
10
11
12
13
#include "otbSOMMap.h"

#include "otbSOM.h"

#include "itkEuclideanDistanceMetric.h" // the distance function

#include "otbCzihoSOMLearningBehaviorFunctor.h"
#include "otbCzihoSOMNeighborhoodBehaviorFunctor.h"

14
15
#include "otbMachineLearningModelTraits.h"
#include "otbMachineLearningModel.h"
16
17
18

namespace otb
{
19
template <class TInputValue, unsigned int MapDimension>
20
class ITK_EXPORT SOMModel: public  MachineLearningModel<itk::VariableLengthVector< TInputValue> , itk::VariableLengthVector< TInputValue>>   
21
22
23
24
25
{

public:
	
	typedef SOMModel Self;
26
	typedef MachineLearningModel<itk::VariableLengthVector< TInputValue> , itk::VariableLengthVector< TInputValue>> Superclass;
27
28
29
	typedef itk::SmartPointer<Self> Pointer;
	typedef itk::SmartPointer<const Self> ConstPointer;

30
31
32
33
34
35
36
	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;
37

38
	/// Confidence map related typedefs
39
	
40
41
42
	typedef typename Superclass::ConfidenceValueType  				ConfidenceValueType;
	typedef typename Superclass::ConfidenceSampleType 				ConfidenceSampleType;
	typedef typename Superclass::ConfidenceListSampleType      		ConfidenceListSampleType;
43

44
45
46
47
48


	typedef SOMMap<itk::VariableLengthVector<TInputValue>,itk::Statistics::EuclideanDistanceMetric<itk::VariableLengthVector<TInputValue>>, MapDimension> MapType;
	typedef typename MapType::SizeType       				SizeType;
	typedef typename MapType::SpacingType       			SpacingType;
49
	//typedef otb::SOM<InputListSampleType, MapType> 			EstimatorType;
50
51
52
53
	typedef otb::SOM<InputListSampleType, MapType> 			EstimatorType;

	typedef Functor::CzihoSOMLearningBehaviorFunctor    	SOMLearningBehaviorFunctorType;
	typedef Functor::CzihoSOMNeighborhoodBehaviorFunctor 	SOMNeighborhoodBehaviorFunctorType;
54
55
56
57
58
59
60
61
62

	itkNewMacro(Self);
	itkTypeMacro(SOMModel, DimensionalityReductionModel);
	 
	/** Accessors */
	itkSetMacro(NumberOfIterations, unsigned int);
	itkGetMacro(NumberOfIterations, unsigned int);
    itkSetMacro(BetaInit, double);
	itkGetMacro(BetaInit, double);
63
64
	itkSetMacro(WriteMap, bool);
	itkGetMacro(WriteMap, bool);
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
	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);

85
86
	void Save(const std::string & filename, const std::string & name="") ;
	void Load(const std::string & filename, const std::string & name="") ;
87
88
89
90

	void Train() ITK_OVERRIDE;
	//void Dimensionality_reduction()  {}; // Dimensionality reduction is done by DoPredict
	 
91
	//unsigned int GetDimension() { return MapType::ImageDimension;};
92
93
94
95
96
97
protected:
	SOMModel();	
	~SOMModel() ITK_OVERRIDE;
 
private:
	typename MapType::Pointer m_SOMMap;
98
99
	
	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;
126
127
	/** Write the SOM Map vectors in a txt file */
	bool m_WriteMap;
128
129
130
131
132
133
134
135
136
137
138
139
140
};


} // end namespace otb


#ifndef OTB_MANUAL_INSTANTIATION
#include "SOMModel.txx"
#endif


#endif