FLImaging 6.5.16.1
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 tScore;
22
23 public:
24 CDetectionInfo();
25 };
26
27 template <typename T>
28 class CPrecisionRecall
29 {
30 public:
31 int64_t i64TP;
32 int64_t i64FP;
33 int64_t i64FN;
34 T tScore;
35 double f64Precision;
36 double f64Recall;
37
38 public:
39 CPrecisionRecall();
40 };
41
42 template <typename T>
43 class FL_EXPORT CValidatorForObjectDetection : public CValidatorBase<T>
44 {
45 public:
46 enum EModel
47 {
48 EModel_RFLNet = 0,
49 /* EModel_Yolo_V4 = 1000,*/
50 };
51
52 public:
53 CValidatorForObjectDetection();
54 CValidatorForObjectDetection(const CValidatorForObjectDetection<T>& validator);
55 CValidatorForObjectDetection(const CValidatorForObjectDetection<T>* pValidator);
56 virtual ~CValidatorForObjectDetection();
57
58 const CValidatorForObjectDetection<T>& operator=(const CValidatorForObjectDetection<T>& validator);
59
60 virtual const CResult Assign(const CValidatorForObjectDetection<T>& validator);
61 virtual const CResult Assign(const CValidatorForObjectDetection<T>* pValidator);
62
63 virtual const CResult Clear() override;
64 virtual const CResult ClearResultBox();
65
66 virtual const CResult SetNumOfClasses(int64_t i64ClassCount);
67 virtual int64_t GetNumOfClasses() const;
68
69 virtual const CResult SetNonMaximumSuppressionType(ENonMaximumSuppressionType eNMS = ENonMaximumSuppressionType_Greedy);
70 virtual ENonMaximumSuppressionType GetNonMaximumSuppressionType() const;
71 virtual const CResult SetBetaNMS(T tBetaNMS = .6);
72 virtual T GetBetaNMS() const;
73 virtual const CResult SetNMSIoUThreshold(T tNMSIoUThreshold = 0.45);
74 virtual T GetNMSIoUThreshold() const;
75 virtual const CResult SetObjectnessThreshold(T tObjectnessThreshold = .005);
76 virtual T GetObjectnessThreshold() const;
77
78 virtual const CResult SetIoUThreshold(T tIoUThreshold = .5);
79 virtual T GetIoUThreshold() const;
80 virtual const CResult SetAverageIoUThreshold(T tCalcAvgIoUThreshold = .25);
81 virtual T GetAverageIoUThreshold() const;
82
83 // 실제 유효한 class 개수가 label class num 과 다른 경우를 위해 존재
84 virtual const CResult SetRealClassIdToValidClassId(const std::vector<int64_t>& vctRealClassId);
85 virtual const CResult GetRealClassIdToValidClassId(std::vector<int64_t>& vctRealClassId);
86
87 virtual const std::vector<std::vector<std::vector<std::tuple<CObjectBox<T>, T, int64_t>>>>* GetResultBox() const;
88
89 virtual T Validate(int32_t* pI32IterationFeedback = nullptr) override;
90
91 static T CalculateMap(std::vector<CDetectionInfo<T>>& vctDetectionInfo, const int64_t* pI64TruthClassesCount, int64_t i64UniqueTruthCount, int64_t i64ClassCount);
92
93 virtual const CResult SetModel(EModel eModel);
94 virtual EModel GetModel() const;
95
96 virtual const CResult EnableIOUThresholdUpdate(bool bIOUThresholdUpdate = true);
97 virtual bool IsIOUThresholdUpdateEnabled() const;
98
99 virtual const CResult EnableAngleReflection(bool bAngleReflection = false);
100 virtual bool IsAngleReflectionEnabled() const;
101
102 DeclareGetClassType();
103 SupportToDuplicateObject(CValidatorForObjectDetection<T>, *this);
104
105 protected:
106 virtual const CResult ResetComputationPerClass();
107 virtual const CResult SetModelParams();
108 virtual const CResult SetModelParams(const Base::CFLData& fldData);
109 virtual const CResult BackupModelParams(Base::CFLData& fldData);
110
111 std::vector<int64_t>& m_vctRealClassIdToValidClassId;
112
113 ENonMaximumSuppressionType m_eValidationNMS;
114 T m_tValidationBetaNMS;
115 T m_tValidationNMSIoUThreshold;
116 T m_tValidationObjectnessThreshold;
117
118 T m_tValidationIoUThreshold;
119 T m_tValidationCalcAvgIoUThreshold;
120 T m_tLastValidation;
121
122 int64_t m_i64TruthLabelSize;
123 T* m_pTTruthLabels;
124
125 int64_t m_i64ClassCount;
126 int64_t* m_pI64TruthClassesCount;
127 int64_t* m_pI64TPForThresholdPerClass;
128 int64_t* m_pI64FPForThresholdPerClass;
129 T* m_pTAvgIoUPerClass;
130
131 EModel m_eModel;
132
133 bool m_bIOUThresholdUpdate;
134 bool m_bAngleReflection;
135 std::vector<std::vector<std::vector<std::tuple<CObjectBox<T>, T, int64_t>>>>& m_vct3BoxResult;
136 };
137
138
139 typedef CValidatorForObjectDetection<float> CValidatorForObjectDetectionF;
140 typedef CValidatorForObjectDetection<double> CValidatorForObjectDetectionD;
141 }
142}
143
144#endif
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
@ Clear
Clear all the figure objects.