FLImaging 6.10.16.1
ComputationalGraphRegionProposalNetwork.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "DefinitionsAI.h"
6#include "ComputationalGraph.h"
7#include "Tensor.h"
8#include "BackendBCEWithLogistLoss.h"
9#include "BackendSmoothL1Loss.h"
10#include "BackendConcatenate.h"
11#include "BackendLabel.h"
12
13#include <vector>
14#include <utility>
15#include <functional>
16#include <map>
17
18namespace FLImaging
19{
20 namespace AI
21 {
22 template <typename T>
23 class FL_EXPORT CComputationalGraphRegionProposalNetwork : public CComputationalGraph<T>
24 {
25 private:
26 CComputationalGraphRegionProposalNetwork();
27
28 protected:
29 CComputationalGraphRegionProposalNetwork(const CComputationalGraphRegionProposalNetwork<T>& cg);
30
31 public:
32 CComputationalGraphRegionProposalNetwork(const CComputationalBase<T>& cbOperand, const std::vector<int64_t>* pAnchorSizeOrNull = nullptr, const std::vector<float>* pAspectRatioOrNull = nullptr);
33 CComputationalGraphRegionProposalNetwork(const std::initializer_list<const CComputationalBase<T>*>& cbOperands, const std::vector<int64_t>* pAnchorSizeOrNull = nullptr, const std::vector<float>* pAspectRatioOrNull = nullptr);
34 CComputationalGraphRegionProposalNetwork(const std::vector<const CComputationalBase<T>*>& vctOperands, const std::vector<int64_t>* pAnchorSizeOrNull = nullptr, const std::vector<float>* pAspectRatioOrNull = nullptr);
35
36 virtual ~CComputationalGraphRegionProposalNetwork();
37
38 virtual CTensor<T>& Forward() override;
39 virtual CTensor<T>* Backward() override;
40 virtual CComputationalBase<T>* Clone() const override;
41
42 virtual const std::vector<int64_t>& GetEstimatedShape(bool bRecursive = true) const override;
43
44 virtual const CResult SetForegroundIoUThreshold(T tThreshold);
45 virtual T GetForegroundIoUThreshold() const;
46
47 virtual const CResult SetBackgroundIoUThreshold(T tThreshold);
48 virtual T GetBackgroundIoUThreshold() const;
49
50 virtual const CResult SetLearningPreNMSTopN(int64_t i64PreNMSTopN);
51 virtual int64_t GetLearningPreNMSTopN() const;
52 virtual const CResult SetLearningPostNMSTopN(int64_t i64PostNMSTopN);
53 virtual int64_t GetLearningPostNMSTopN() const;
54
55 virtual const CResult SetInferencePreNMSTopN(int64_t i64PreNMSTopN);
56 virtual int64_t GetInferencePreNMSTopN() const;
57 virtual const CResult SetInferencePostNMSTopN(int64_t i64PostNMSTopN);
58 virtual int64_t GetInferencePostNMSTopN() const;
59
60 virtual const CResult SetNMSThreshold(T tNMSThreshold);
61 virtual T GetNMSThreshold() const;
62 virtual const CResult SetScoreThreshold(T tScoreThreshold);
63 virtual T GetScoreThreshold() const;
64
65 virtual const CResult SetAreaThreshold(T tAreaThreshold);
66 virtual T GetAreaThreshold() const;
67
68 virtual const CResult SetInputSize(const std::vector<int64_t>& vctInputSize);
69 virtual const std::vector<int64_t>& GetInputSize() const;
70
71 virtual const CResult SetAnchorSize(const std::vector<int64_t>& vctAnchorSize);
72 virtual const std::vector<int64_t>& GetAnchorSize() const;
73
74 virtual const CResult SetAspectRatio(const std::vector<float>& vctAspectRatio);
75 virtual const std::vector<float>& GetAspectRatio() const;
76
77 virtual const CResult EnableRevertAngle(bool bRevertAngle);
78 virtual bool IsRevertAngleEnable() const;
79
80 virtual const CResult EnableClipBox(bool bClipBox);
81 virtual bool IsClipBoxEnable() const;
82
83 virtual const CResult EnableSingleLabel(bool bSingleLabel);
84 virtual bool IsSingleLabelEnable() const;
85
86 virtual const std::vector<CTensor<T>>& GetTargetBoxes() const;
87 virtual const std::vector<CTensor<T>>& GetTargetLabels() const;
88 virtual const CResult SetAddGradientCount(int64_t i64AddGradientCount) override;
89
90 virtual T GetBoxLoss() const;
91 virtual T GetScoreLoss() const;
92
93 virtual int64_t GetFeatureCount() const;
94
95 virtual const CResult EnableComprehensiveNMS(bool bComprehensiveNMS);
96 virtual bool IsComprehensiveNMSEnable() const;
97
98 virtual CTensor<T>& GetFilterProposalResultScores();
99
100 DeclareGetClassType();
101 SupportToDuplicateObjectWithoutCreateNewObject(CComputationalGraphRegionProposalNetwork, *this);
102
103 public:
104 virtual const CResult PrintNodeParamInfo() const;
105 virtual const CResult GetBinaryData(Base::CFLData& fldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
106 virtual const CResult GetBinaryData(Base::CFLData* pFldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
107
108 virtual const CResult SetBinaryData(const Base::CFLData& fldBinary, int64_t* pI64Offset = nullptr) override;
109 virtual const CResult SetBinaryData(const Base::CFLData* pFldBinary, int64_t* pI64Offset = nullptr) override;
110
111 virtual int64_t GetRequiredTemporaryMemory(bool bTraining = false, bool bRecursively = true, int64_t i64BatchSize = 1, int64_t i64MemoryIndex = 0) const override;
112 virtual int64_t GetRequiredDedicatedMemory(bool bTraining = false, bool bRecursively = true, int64_t i64BatchSize = 1) const override;
113
114 protected:
115 virtual const CResult RPNConstructor(const std::vector<const CComputationalBase<T>*>& vctOperands);
116 virtual const CResult GenerateAnchors();
117 virtual const CResult ForwardOfAnchor();
118 virtual const CResult GenerateHead(const std::vector<const CComputationalBase<T>*>& vctOperands);
119 virtual const CResult ConcatBoxPredictionLayers(const std::vector<CComputationalBase<T>*>& vctObjectness, const std::vector<CComputationalBase<T>*>& vctPredictionBBoxDeltas, CTensor<T>* pTsrResultObjectness, CTensor<T>* pTsrResultBoxRegression);
120
121 virtual const CResult ConcatBoxPredictionLayersBackward(const CTensor<T>* pTsrConcatObjectnessDy, const CTensor<T>* pTsrConcatBBoxDeltasDy, std::vector<CComputationalBase<T>*>& vctObjectness, std::vector<CComputationalBase<T>*>& vctPredictionBBoxDeltas);
122
123 virtual const CResult FilterProposals(const CTensor<T>* pTsrProposals, const CTensor<T>* pTsrObjectness, const std::vector<std::pair<int64_t, int64_t>>& vctImageSizes, const std::vector<int64_t>& vctAnchors, CTensor<T>* pTsrResultBoxes, CTensor<T>* pTsrResultScores, CTensor<T>* pTsrBuffer, bool bComprehensiveNMS = false, CTensor<T>* pTsrComprehensiveNMSBuffer = nullptr);
124 virtual const CResult AssignTargetsToAnchors(const CTensor<T>* pTsrAnchor, const std::vector<CTensor<T>>& vctTsrTargets, CTensor<T>* pTsrResultMatchedLabel, CTensor<T>* pTsrResultAnchorMatchedTarget);
125 virtual const CResult ComputeLoss(const CTensor<T>* pTsrObjenctness, const CTensor<T>* pTsrPredBBoxDeltas, const CTensor<T>* pTsrLabel, const CTensor<T>* pTsrRegressionTargets);
126 virtual const CResult ComputeLossBackward(CTensor<T>* pTsrObjectness, CTensor<T>* pTsrPredBBoxDeltas, CTensor<T>* pTsrObjectnessDx, CTensor<T>* pTsrPredBBoxDeltasDx);
127
128 virtual const CResult IntializeMemberTensor();
129 virtual std::vector<int64_t> GetAnchorShape() const;
130
131 virtual const CResult CreateTargetBuffer();
132
133 virtual const CResult GetFeaturesVector(std::vector<CComputationalBase<T>*>& vctFeatures);
134
135 protected:
136 T m_tForegroundIoUThreshold;
137 T m_tBackgroundIoUThreshold;
138 int64_t m_i64LearningPreNMSTopN;
139 int64_t m_i64LearningPostNMSTopN;
140 int64_t m_i64InferencePreNMSTopN;
141 int64_t m_i64InferencePostNMSTopN;
142
143 T m_tNMSThreshold;
144 T m_tScoreThreshold;
145 T m_tAreaThreshold;
146 bool m_bRevertAngle;
147 bool m_bClipBox;
148 bool m_bComprehensiveNMS;
149 bool m_bSingleLabel;
150
151 std::vector<int64_t>& m_vctImageSize;
152 std::vector<int64_t>& m_vctAnchorSize;
153 std::vector<float>& m_vctAspectRatio;
154
155 std::vector<CTensor<T>>& m_vctTsrTargetBoxes;
156 std::vector<CTensor<T>>& m_vctTsrTargetLabels;
157
158 CTensor<T> m_tsrBaseAnchor;
159 CTensor<T> m_tsrAnchor;
160 CTensor<T> m_tsrConcatResultObjectness;
161 CTensor<T> m_tsrConcatResultBoxDeltas;
162 CTensor<T> m_tsrDecodeResultProposal;
163 CTensor<T> m_tsrFilterProposalResultScore;
164 CTensor<T> m_tsrBuffer;
165 CTensor<T> m_tsrComprehensiveNMSBuffer;
166 CTensor<T> m_tsrAssignTargetResultLabels;
167 CTensor<T> m_tsrAssignTargetResultGTBoxes;
168 CTensor<T> m_tsrEncodeResultRegressionTarget;
169
170 CBackendBCEWithLogistLoss<T> m_backendBCEWithLogistLoss;
171 CBackendSmoothL1Loss<T> m_backendSmoothL1Loss;
172 CBackendConcatenate<T> m_backendConcatenate;
173 CBackendLabel<T> m_backendLabel;
174
175 std::vector<uint32_t>& m_vctPositiveIndexes;
176 std::vector<uint32_t>& m_vctPositiveNegativeIndexes;
177
178 CTensor<T> m_tsrObjectnessSelected;
179 CTensor<T> m_tsrPredBBoxDeltasSelected;
180 CTensor<T> m_tsrLabelSelected;
181 CTensor<T> m_tsrTargetRegressionSelected;
182 CTensor<T> m_tsrObjectnessLoss;
183 CTensor<T> m_tsrBoxLoss;
184
185 CTensor<T> m_tsrTargetBuffer;
186
187 T m_tBoxLoss;
188 T m_tScoreLoss;
189
190 std::vector<CTensor<T>>& m_vctObjectnessPermute;
191 std::vector<CTensor<T>>& m_vctBBoxDeltasPermute;
192
193 public:
194 DeclareGetSignletonObject(CComputationalGraphRegionProposalNetwork);
195 };
196
197 #define CCGFRegionProposalNetwork(...) (*(new CComputationalGraphRegionProposalNetwork<float>(__VA_ARGS__)))
198 #define CCGDRegionProposalNetwork(...) (*(new CComputationalGraphRegionProposalNetwork<double>(__VA_ARGS__)))
199 #define CCGTRegionProposalNetwork(T, ...) (*(new CComputationalGraphRegionProposalNetwork<T>(__VA_ARGS__)))
200
201 }
202}
203
204#endif
Definition AlgorithmAIBase.h:18