3#if _MSC_VER >= 1900 && defined(_M_X64)
5#include "DefinitionsAI.h"
6#include "ComputationalGraph.h"
8#include "BackendBCEWithLogistLoss.h"
9#include "BackendSmoothL1Loss.h"
10#include "BackendConcatenate.h"
11#include "BackendLabel.h"
25 class FL_EXPORT CComputationalGraphRegionProposalNetwork :
public CComputationalGraph<T>
28 CComputationalGraphRegionProposalNetwork();
31 CComputationalGraphRegionProposalNetwork(
const CComputationalGraphRegionProposalNetwork<T>& cg);
34 CComputationalGraphRegionProposalNetwork(
const CComputationalBase<T>& cbOperand,
const std::vector<int64_t>* pAnchorSizeOrNull =
nullptr,
const std::vector<float>* pAspectRatioOrNull =
nullptr);
35 CComputationalGraphRegionProposalNetwork(
const std::initializer_list<
const CComputationalBase<T>*>& cbOperands,
const std::vector<int64_t>* pAnchorSizeOrNull =
nullptr,
const std::vector<float>* pAspectRatioOrNull =
nullptr);
36 CComputationalGraphRegionProposalNetwork(
const std::vector<
const CComputationalBase<T>*>& vctOperands,
const std::vector<int64_t>* pAnchorSizeOrNull =
nullptr,
const std::vector<float>* pAspectRatioOrNull =
nullptr);
38 virtual ~CComputationalGraphRegionProposalNetwork();
40 virtual CTensor<T>& Forward()
override;
41 virtual CTensor<T>* Backward()
override;
42 virtual CComputationalBase<T>* Clone()
const override;
44 virtual const std::vector<int64_t>& GetEstimatedShape(
bool bRecursive =
true)
const override;
46 virtual const CResult SetForegroundIoUThreshold(T tThreshold);
47 virtual T GetForegroundIoUThreshold()
const;
49 virtual const CResult SetBackgroundIoUThreshold(T tThreshold);
50 virtual T GetBackgroundIoUThreshold()
const;
52 virtual const CResult SetLearningPreNMSTopN(int64_t i64PreNMSTopN);
53 virtual T GetLearningPreNMSTopN()
const;
54 virtual const CResult SetLearningPostNMSTopN(int64_t i64PostNMSTopN);
55 virtual T GetLearningPostNMSTopN()
const;
57 virtual const CResult SetInferencePreNMSTopN(int64_t i64PreNMSTopN);
58 virtual T GetInferencePreNMSTopN()
const;
59 virtual const CResult SetInferencePostNMSTopN(int64_t i64PostNMSTopN);
60 virtual T GetInferencePostNMSTopN()
const;
62 virtual const CResult SetNMSThreshold(T tNMSThreshold);
63 virtual T GetNMSThreshold()
const;
64 virtual const CResult SetScoreThreshold(T tScoreThreshold);
65 virtual T GetScoreThreshold()
const;
67 virtual const CResult SetAreaThreshold(T tAreaThreshold);
68 virtual T GetAreaThreshold()
const;
70 virtual const CResult SetInputSize(
const std::vector<int64_t>& vctInputSize);
71 virtual const std::vector<int64_t>& GetInputSize()
const;
73 virtual const CResult SetAnchorSize(
const std::vector<int64_t>& vctAnchorSize);
74 virtual const std::vector<int64_t>& GetAnchorSize()
const;
76 virtual const CResult SetAspectRatio(
const std::vector<float>& vctAspectRatio);
77 virtual const std::vector<float>& GetAspectRatio()
const;
79 virtual const CResult EnableRevertAngle(
bool bRevertAngle);
80 virtual bool IsRevertAngleEnable()
const;
82 virtual const CResult EnableClipBox(
bool bClipBox);
83 virtual bool IsClipBoxEnable()
const;
85 virtual const std::vector<CTensor<T>>& GetTargetBoxes()
const;
86 virtual const std::vector<CTensor<T>>& GetTargetLabels()
const;
87 virtual const CResult SetAddGradientCount(int64_t i64AddGradientCount)
override;
89 virtual T GetBoxLoss()
const;
90 virtual T GetScoreLoss()
const;
92 virtual int64_t GetFeatureCount()
const;
95 virtual CTensor<T>& GetFilterProposalResultBoxes();
97 virtual CTensor<T>& GetFilterProposalResultScores();
99 virtual const CResult SetTargetBoxes(
const std::vector<CTensor<T>>& tsrTraget);
100 virtual const CResult SetObjectnessTsr(
const CTensor<T>* pTsrObjectness);
101 virtual const CResult SetProposalTsr(
const CTensor<T>* pTsrProposal);
103 DeclareGetClassType();
104 SupportToDuplicateObjectWithoutCreateNewObject(CComputationalGraphRegionProposalNetwork, *
this);
107 virtual const CResult PrintNodeParamInfo()
const;
108 virtual const CResult GetBinaryData(Base::CFLData& fldBinary,
bool bSuperClass =
false, int32_t i32Version = -1,
bool bDumpMode =
false)
const override;
109 virtual const CResult GetBinaryData(Base::CFLData* pFldBinary,
bool bSuperClass =
false, int32_t i32Version = -1,
bool bDumpMode =
false)
const override;
111 virtual const CResult SetBinaryData(
const Base::CFLData& fldBinary, int64_t* pI64Offset =
nullptr)
override;
112 virtual const CResult SetBinaryData(
const Base::CFLData* pFldBinary, int64_t* pI64Offset =
nullptr)
override;
114 virtual int64_t GetRequiredDedicatedMemory(
bool bTraining =
false,
bool bRecursively =
true, int64_t i64BatchSize = 1)
const override;
117 virtual const CResult RPNConstructor(
const std::vector<
const CComputationalBase<T>*>& vctOperands);
118 virtual const CResult GenerateAnchors();
119 virtual const CResult ForwardOfAnchor();
120 virtual const CResult GenerateHead(
const std::vector<
const CComputationalBase<T>*>& vctOperands);
121 virtual const CResult ConcatBoxPredictionLayers(
const std::vector<CComputationalBase<T>*>& vctObjectness,
const std::vector<CComputationalBase<T>*>& vctPredictionBBoxDeltas, CTensor<T>* pTsrResultObjectness, CTensor<T>* pTsrResultBoxRegression);
123 virtual const CResult ConcatBoxPredictionLayersBackward(
const CTensor<T>* pTsrConcatObjectnessDy,
const CTensor<T>* pTsrConcatBBoxDeltasDy, std::vector<CComputationalBase<T>*>& vctObjectness, std::vector<CComputationalBase<T>*>& vctPredictionBBoxDeltas);
125 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);
126 virtual const CResult AssignTargetsToAnchors(
const CTensor<T>* pTsrAnchor,
const std::vector<CTensor<T>>& vctTsrTargets, CTensor<T>* pTsrResultMatchedLabel, CTensor<T>* pTsrResultAnchorMatchedTarget);
127 virtual const CResult ComputeLoss(
const CTensor<T>* pTsrObjenctness,
const CTensor<T>* pTsrPredBBoxDeltas,
const CTensor<T>* pTsrLabel,
const CTensor<T>* pTsrRegressionTargets);
128 virtual const CResult ComputeLossBackward(CTensor<T>* pTsrObjectness, CTensor<T>* pTsrPredBBoxDeltas, CTensor<T>* pTsrObjectnessDx, CTensor<T>* pTsrPredBBoxDeltasDx);
130 virtual const CResult IntializeMemberTensor();
131 virtual std::vector<int64_t> GetAnchorShape()
const;
133 virtual const CResult CreateTargetBuffer();
135 virtual const CResult GetFeaturesVector(std::vector<CComputationalBase<T>*>& vctFeatures);
139 CTensor<T>* m_pTsrObjecntessPy;
140 CTensor<T>* m_pTsrProposalPy;
144 T m_tForegroundIoUThreshold;
145 T m_tBackgroundIoUThreshold;
146 int64_t m_i64LearningPreNMSTopN;
147 int64_t m_i64LearningPostNMSTopN;
148 int64_t m_i64InferencePreNMSTopN;
149 int64_t m_i64InferencePostNMSTopN;
157 std::vector<int64_t>& m_vctImageSize;
158 std::vector<int64_t>& m_vctAnchorSize;
159 std::vector<float>& m_vctAspectRatio;
161 std::vector<CTensor<T>>& m_vctTsrTargetBoxes;
162 std::vector<CTensor<T>>& m_vctTsrTargetLabels;
164 CTensor<T> m_tsrBaseAnchor;
165 CTensor<T> m_tsrAnchor;
166 CTensor<T> m_tsrConcatResultObjectness;
167 CTensor<T> m_tsrConcatResultBoxDeltas;
168 CTensor<T> m_tsrDecodeResultProposal;
169 CTensor<T> m_tsrFilterProposalResultScore;
171 CTensor<T> m_tsrFilterProposalResultBoxes;
173 CTensor<T> m_tsrBuffer;
174 CTensor<T> m_tsrAssignTargetResultLabels;
175 CTensor<T> m_tsrAssignTargetResultGTBoxes;
176 CTensor<T> m_tsrEncodeResultRegressionTarget;
178 CBackendBCEWithLogistLoss<T> m_backendBCEWithLogistLoss;
179 CBackendSmoothL1Loss<T> m_backendSmoothL1Loss;
180 CBackendConcatenate<T> m_backendConcatenate;
181 CBackendLabel<T> m_backendLabel;
183 std::vector<uint32_t>& m_vctPositiveIndexes;
184 std::vector<uint32_t>& m_vctPositiveNegativeIndexes;
186 CTensor<T> m_tsrObjectnessSelected;
187 CTensor<T> m_tsrPredBBoxDeltasSelected;
188 CTensor<T> m_tsrLabelSelected;
189 CTensor<T> m_tsrTargetRegressionSelected;
190 CTensor<T> m_tsrObjectnessLoss;
191 CTensor<T> m_tsrBoxLoss;
193 CTensor<T> m_tsrTargetBuffer;
198 std::vector<CTensor<T>>& m_vctObjectnessPermute;
199 std::vector<CTensor<T>>& m_vctBBoxDeltasPermute;
202 DeclareGetSignletonObject(CComputationalGraphRegionProposalNetwork);
205 #define CCGFRegionProposalNetwork(...) (*(new CComputationalGraphRegionProposalNetwork<float>(__VA_ARGS__)))
206 #define CCGDRegionProposalNetwork(...) (*(new CComputationalGraphRegionProposalNetwork<double>(__VA_ARGS__)))
207 #define CCGTRegionProposalNetwork(T, ...) (*(new CComputationalGraphRegionProposalNetwork<T>(__VA_ARGS__)))
Definition AlgorithmAIBase.h:16