FLImaging 7.10.21.1
Evaluator.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "ComputationalGraphObjectDetection.h"
6#include "ComputationalGraphMaskRCNN.h"
7#include "Tensor.h"
8#include <atomic>
9
10namespace FLImaging
11{
12 namespace AI
13 {
14 template <typename T>
15 class CComputationalGraph;
16
17 template <typename T>
18 class CComputationalGraphPlaceholder;
19
20 template<typename T>
21 class CBackendEvaluatorBase;
22
23 template<typename T>
24 class CBackendEvaluatorForObjectDetection;
25
26 template<typename T>
27 class CBackendEvaluatorForInstanceSegmentation;
28
29 template <typename T>
30 class FL_EXPORT CEvaluator : public CAlgorithmAIBase
31 {
32 public:
33 enum EModelType
34 {
35 EModelType_Classifier = 0,
36 EModelType_SemanticSegmentation,
37 EModelType_ObjectDetection,
38 EModelType_InstanceSegmentation,
39 EModelType_AnomalyDetection,
40 EModelType_SuperResolution,
41 EModelType_DenoisingDiffusion,
42 EModelType_StringBasedOCR,
43 };
44
45 CEvaluator();
46 CEvaluator(const CEvaluator<T>& evaluator);
47 CEvaluator(const CEvaluator<T>* pEvaluator);
48 virtual ~CEvaluator();
49
50 virtual const CResult Assign(const CEvaluator<T>& evaluator);
51 virtual const CResult Assign(const CEvaluator<T>* pEvaluator);
52
53 virtual const CResult Clear();
54
55 virtual const CResult Initialize();
56 virtual bool IsInitialized() const;
57
58 virtual const CResult SetFunction(const CComputationalGraph<T>* pCgEvaluationLayer);
59 virtual const CComputationalGraph<T>& GetFunction() const;
60
61 virtual const CResult SetDeviceIndex(int32_t i32DeviceIndex);
62 virtual const CResult SetDeviceIndex(const std::vector<int32_t>& vctDeviceIndices);
63 virtual const CResult SetDeviceIndex(const std::vector<uint32_t>& vctDeviceIndices);
64 virtual const CResult SetDeviceIndex(const Base::CFLArray<int32_t>& flaDeviceIndices);
65 virtual const CResult SetDeviceIndex(const Base::CFLArray<uint32_t>& flaDeviceIndices);
66 virtual const std::vector<int32_t>& GetDeviceIndex() const;
67 virtual const CResult ResetDeviceIndex();
68
69 virtual const CResult SetModelType(EModelType eModelType = EModelType_Classifier);
70 virtual EModelType GetModelType();
71
72 virtual const CResult SetMemoryLimitRatio(double f64MemoryLimitRatio = 1.);
73 virtual double GetMemoryLimitRatio() const;
74
75 virtual const CResult EnableDecoder(bool bDecoder = false);
76 virtual bool IsDecoderEnabled() const;
77
78 virtual const CResult Evaluate(Base::CFLArray<int32_t>* pFlaIterationFeedback = nullptr, bool* pBStopImmediatedly = nullptr, std::vector<bool>* pVctEvaluatedIndex = nullptr);
79
80 virtual const CTensor<T>* GetResultEvaluation() const;
81 virtual const std::vector<std::vector<std::vector<std::tuple<CObjectBox<float>, float, int64_t>>>>* GetResultBox() const;
82 virtual const CInstanceSegmentationResult<T>* GetInstanceSegmentationResult() const;
83 virtual int64_t GetTotalIteration() const;
84 virtual int64_t GetActualTotalBatchSize() const;
85
86 virtual const Base::CFLArray<uint32_t> GetInvolvedDeviceIndices() const;
87
88 virtual const CResult SetTotalSamplingStep(int32_t i32TotalSamplingStep = 1000);
89 virtual int32_t GetTotalSamplingStep() const;
90 virtual const Base::CFLArray<int32_t> GetCurrentSamplingStep() const;
91
92
93 DeclareGetClassType();
94 SupportToDuplicateAbstractObject(CEvaluator<T>);
95
96 protected:
97 virtual const CResult CopyBatchParams(bool bDifferent);
98 virtual CBackendEvaluatorBase<T>* CreateNewBackendEvaluator();
99
100 protected:
101 std::vector<int32_t>& m_vctDeviceIndices;
102 std::vector<int32_t>& m_vctActiveDeviceIndices;
103 std::vector<int32_t>& m_vctDeviceInUse;
104 std::vector<int32_t>& m_vctPrevDeviceIndices;
105
106 CComputationalGraph<T>* m_pCgEvaluationLayer;
107 CTensor<T> m_tsrResult;
108
109 std::vector<CComputationalGraph<T>*>& m_vctFunctions;
110
111 bool m_bGPUDevice;
112 bool m_bDifferent;
113 bool m_bInitialized;
114 int64_t m_i64InitialBatch;
115
116 int32_t m_i32DeviceCount;
117
118 int64_t m_i64ActualMiniBatchSize;
119 int64_t m_i64TotalIteration;
120 int64_t m_i64TotalIterationPerDevice;
121 int64_t m_i64TotalBatchSize;
122 int64_t m_i64CurrentIteration;
123
124 std::vector<CBackendEvaluatorBase<T>*>& m_vctEvaluator;
125 EModelType m_eModelType;
126 EModelType m_ePrevModelType;
127
128 std::vector<std::vector<std::vector<std::tuple<CObjectBox<float>, float, int64_t>>>>& m_vct3BoxResult;
129 CInstanceSegmentationResult<T> m_instanceSegmentationResult;
130
131 double m_f64MemoryLimitRatio;
132 double m_f64PrevMemoryLimitRatio;
133
134 int32_t m_i32TotalSamplingStep;
135 bool m_bDecoder;
136 private:
137 template<typename T>
138 friend class CBackendEvaluatorBase;
139
140 template<typename T>
141 friend class CBackendEvaluatorForObjectDetection;
142
143 template<typename T>
144 friend class CBackendEvaluatorForInstanceSegmentation;
145
146 template<typename T>
147 friend class CBackendEvaluatorForDenoisingDiffusion;
148
149 template<typename T>
150 friend class CBackendEvaluatorForStringBasedOCR;
151 };
152
153
154 typedef CEvaluator<float> CEvaluatorF;
155 typedef CEvaluator<double> CEvaluatorD;
156 }
157}
158
159#endif
Processing unit AI class required by algorithm.
Definition FLImagingImgProcBase/AlgorithmAIBase.h:27
Definition FLImagingImgProcBase/AlgorithmAIBase.h:18
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
Definition FLImagingGUICLR/DefinitionsGUIView3D.h:3539
@ Clear
Clear all the figure objects.
Definition FLImagingGUICLR/DefinitionsGUI.h:5069