FLImaging 7.2.4.2
ValidatorForObjectDetection.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "ValidatorBase.h"
6
7namespace FLImaging
8{
9 namespace AI
10 {
11 template<typename T>
12 class CObjectBox;
13
14 template <typename T>
15 class CDetectionInfo
16 {
17 public:
18 int64_t i64UniqueTruthIndex;
19 int64_t i64TruthFlag;
20 int64_t i64ClassId;
21 T tIoU;
22 T tScore;
23
24 public:
25 CDetectionInfo();
26 };
27
28 template <typename T>
29 class CPrecisionRecall
30 {
31 public:
32 int64_t i64TP;
33 int64_t i64FP;
34 int64_t i64FN;
35 T tScore;
36 double f64Precision;
37 double f64Recall;
38
39 public:
40 CPrecisionRecall();
41 };
42
43 template <typename T>
44 class FL_EXPORT CValidatorForObjectDetection : public CValidatorBase<T>
45 {
46 public:
47 enum EModel
48 {
49 EModel_RFLNet = 0,
50 };
51
52 enum ETruthLabelMode
53 {
54 ETruthLabelMode_Rect = 0,
55 ETruthLabelMode_Angle,
56 ETruthLabelMode_MERAngle,
57 ETruthLabelMode_Region,
58 };
59
60 public:
61 CValidatorForObjectDetection();
62 CValidatorForObjectDetection(const CValidatorForObjectDetection<T>& validator);
63 CValidatorForObjectDetection(const CValidatorForObjectDetection<T>* pValidator);
64 virtual ~CValidatorForObjectDetection();
65
66 const CValidatorForObjectDetection<T>& operator=(const CValidatorForObjectDetection<T>& validator);
67
68 virtual const CResult Assign(const CValidatorForObjectDetection<T>& validator);
69 virtual const CResult Assign(const CValidatorForObjectDetection<T>* pValidator);
70
71 virtual const CResult Clear() override;
72 virtual const CResult ClearResultBox();
73
74 virtual const CResult SetNumOfClasses(int64_t i64ClassCount);
75 virtual int64_t GetNumOfClasses() const;
76
77 virtual const CResult SetNonMaximumSuppressionType(ENonMaximumSuppressionType eNMS = ENonMaximumSuppressionType_Greedy);
78 virtual ENonMaximumSuppressionType GetNonMaximumSuppressionType() const;
79 virtual const CResult SetBetaNMS(T tBetaNMS = .6);
80 virtual T GetBetaNMS() const;
81 virtual const CResult SetNMSIoUThreshold(T tNMSIoUThreshold = 0.45);
82 virtual T GetNMSIoUThreshold() const;
83 virtual const CResult SetObjectnessThreshold(T tObjectnessThreshold = .005);
84 virtual T GetObjectnessThreshold() const;
85
86 virtual const CResult SetIoUThreshold(T tIoUThreshold = .5);
87 virtual T GetIoUThreshold() const;
88 virtual const CResult SetAverageIoUThreshold(T tCalcAvgIoUThreshold = .25);
89 virtual T GetAverageIoUThreshold() const;
90
91 virtual const CResult SetRealClassIdToValidClassId(const std::vector<int64_t>& vctRealClassId);
92 virtual const CResult GetRealClassIdToValidClassId(std::vector<int64_t>& vctRealClassId);
93
94 virtual const std::vector<std::vector<std::vector<std::tuple<CObjectBox<T>, T, int64_t>>>>* GetResultBox() const;
95
96 virtual T Validate(int32_t* pI32IterationFeedback = nullptr) override;
97
98 static T CalculateMap(std::vector<CDetectionInfo<T>>& vctDetectionInfo, const int64_t* pI64TruthClassesCount, int64_t i64UniqueTruthCount, int64_t i64ClassCount, std::vector<T>& vctResultPrecisionPerClass, std::vector<T>& vctResultRecallPerClass, std::vector<T>& vctResultAPClass);
99
100 static const CResult CalculateEvaluation(const std::vector<CDetectionInfo<T>>& vctDetectionInfo, const int64_t* pI64TruthClassesCount, int64_t i64UniqueTruthCount, int64_t i64ClassCount, Base::CFLArray<uint8_t>& flaResultCorrectness, Base::CFLArray<double>& flaResultIoU, Base::CFLArray<int64_t>& flaFalseNegativeTargetIndexes);
101
102 static const CResult MakeDetectionInfo(const Foundation::CFLFigureArray& flfa2Figure, const Base::CFLArray<Base::CFLArray<int32_t>>& fla2ClassNum, const Base::CFLArray<Base::CFLArray<double>>& fla2Score, const Foundation::CFLFigureArray& flfa2Target, int64_t i64TotalClass, T tIoUThrehsold, std::vector<CDetectionInfo<T>>& vctResultDetectionInfoFlatten, std::vector<int64_t>& vctResultTruthClassesCountFlatten, int64_t& i64ResultUniqueTruthTotal, ETruthLabelMode eTruthLabelMode = ETruthLabelMode::ETruthLabelMode_Region);
103
104 virtual const CResult SetTruthLabelMode(ETruthLabelMode eTruthLabelMode);
105 virtual ETruthLabelMode GetTruthLabelModel() const;
106
107 virtual const CResult SetModel(EModel eModel);
108 virtual EModel GetModel() const;
109
110 virtual const CResult EnableIOUThresholdUpdate(bool bIOUThresholdUpdate = true);
111 virtual bool IsIOUThresholdUpdateEnabled() const;
112
113 virtual const CResult EnableAngleReflection(bool bAngleReflection = false);
114 virtual bool IsAngleReflectionEnabled() const;
115
116 virtual const CResult EnableSingleLabel(bool bSingleLabel);
117 virtual bool IsSingleLabelEnable() const;
118
119 virtual const std::vector<T>& GetRecallPerClass() const;
120 virtual const std::vector<T>& GetPrecisionPerClass() const;
121 virtual const std::vector<T>& GetAPPerClass() const;
122
123 virtual const int64_t* GetTruthClassesCount() const;
124 virtual const std::vector< CDetectionInfo<T>>& GetDetectionInstances();
125 virtual int64_t GetUniqueTruthCount() const;
126
127 DeclareGetClassType();
128 SupportToDuplicateObject(CValidatorForObjectDetection<T>, *this);
129
130 protected:
131 virtual const CResult ResetComputationPerClass();
132 virtual const CResult SetModelParams();
133 virtual const CResult SetModelParams(const Base::CFLData& fldData);
134 virtual const CResult BackupModelParams(Base::CFLData& fldData);
135
136 std::vector<int64_t>& m_vctRealClassIdToValidClassId;
137
138 ENonMaximumSuppressionType m_eValidationNMS;
139 T m_tValidationBetaNMS;
140 T m_tValidationNMSIoUThreshold;
141 T m_tValidationObjectnessThreshold;
142
143 T m_tValidationIoUThreshold;
144 T m_tValidationCalcAvgIoUThreshold;
145 T m_tLastValidation;
146
147 int64_t m_i64TruthLabelSize;
148 T* m_pTTruthLabels;
149
150 int64_t m_i64ClassCount;
151 int64_t* m_pI64TruthClassesCount;
152 int64_t* m_pI64TPForThresholdPerClass;
153 int64_t* m_pI64FPForThresholdPerClass;
154 int64_t m_i64UniqueTruthCount;
155 T* m_pTAvgIoUPerClass;
156
157 EModel m_eModel;
158 ETruthLabelMode m_eTruthLabelMode;
159
160 bool m_bIOUThresholdUpdate;
161 bool m_bAngleReflection;
162 bool m_bSingleLabel;
163 std::vector<std::vector<std::vector<std::tuple<CObjectBox<T>, T, int64_t>>>>& m_vct3BoxResult;
164
165 std::vector<T>& m_vctPrecisionPerClass;
166 std::vector<T>& m_vctRecallPerClass;
167 std::vector<T>& m_vctAPPerClass;
168 std::vector<CDetectionInfo<T>>& m_vctDetectionInstances;
169 };
170
171
172 typedef CValidatorForObjectDetection<float> CValidatorForObjectDetectionF;
173 typedef CValidatorForObjectDetection<double> CValidatorForObjectDetectionD;
174 }
175}
176
177#endif
Definition AlgorithmAIBase.h:18
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
Definition DefinitionsGUIView3D.h:2930
@ Clear
Clear all the figure objects.
Definition DefinitionsGUI.h:2158