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"
23 class FL_EXPORT CComputationalGraphRegionProposalNetwork :
public CComputationalGraph<T>
26 CComputationalGraphRegionProposalNetwork();
29 CComputationalGraphRegionProposalNetwork(
const CComputationalGraphRegionProposalNetwork<T>& cg);
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);
36 virtual ~CComputationalGraphRegionProposalNetwork();
38 virtual CTensor<T>& Forward()
override;
39 virtual CTensor<T>* Backward()
override;
40 virtual CComputationalBase<T>* Clone()
const override;
42 virtual const std::vector<int64_t>& GetEstimatedShape(
bool bRecursive =
true)
const override;
44 virtual const CResult SetForegroundIoUThreshold(T tThreshold);
45 virtual T GetForegroundIoUThreshold()
const;
47 virtual const CResult SetBackgroundIoUThreshold(T tThreshold);
48 virtual T GetBackgroundIoUThreshold()
const;
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;
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;
60 virtual const CResult SetNMSThreshold(T tNMSThreshold);
61 virtual T GetNMSThreshold()
const;
62 virtual const CResult SetScoreThreshold(T tScoreThreshold);
63 virtual T GetScoreThreshold()
const;
65 virtual const CResult SetAreaThreshold(T tAreaThreshold);
66 virtual T GetAreaThreshold()
const;
68 virtual const CResult SetInputSize(
const std::vector<int64_t>& vctInputSize);
69 virtual const std::vector<int64_t>& GetInputSize()
const;
71 virtual const CResult SetAnchorSize(
const std::vector<int64_t>& vctAnchorSize);
72 virtual const std::vector<int64_t>& GetAnchorSize()
const;
74 virtual const CResult SetAspectRatio(
const std::vector<float>& vctAspectRatio);
75 virtual const std::vector<float>& GetAspectRatio()
const;
77 virtual const CResult EnableRevertAngle(
bool bRevertAngle);
78 virtual bool IsRevertAngleEnable()
const;
80 virtual const CResult EnableClipBox(
bool bClipBox);
81 virtual bool IsClipBoxEnable()
const;
83 virtual const CResult EnableSingleLabel(
bool bSingleLabel);
84 virtual bool IsSingleLabelEnable()
const;
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;
90 virtual T GetBoxLoss()
const;
91 virtual T GetScoreLoss()
const;
93 virtual int64_t GetFeatureCount()
const;
95 virtual const CResult EnableComprehensiveNMS(
bool bComprehensiveNMS);
96 virtual bool IsComprehensiveNMSEnable()
const;
98 virtual CTensor<T>& GetFilterProposalResultScores();
100 DeclareGetClassType();
101 SupportToDuplicateObjectWithoutCreateNewObject(CComputationalGraphRegionProposalNetwork, *
this);
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;
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;
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;
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);
121 virtual const CResult ConcatBoxPredictionLayersBackward(
const CTensor<T>* pTsrConcatObjectnessDy,
const CTensor<T>* pTsrConcatBBoxDeltasDy, std::vector<CComputationalBase<T>*>& vctObjectness, std::vector<CComputationalBase<T>*>& vctPredictionBBoxDeltas);
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);
128 virtual const CResult IntializeMemberTensor();
129 virtual std::vector<int64_t> GetAnchorShape()
const;
131 virtual const CResult CreateTargetBuffer();
133 virtual const CResult GetFeaturesVector(std::vector<CComputationalBase<T>*>& vctFeatures);
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;
148 bool m_bComprehensiveNMS;
151 std::vector<int64_t>& m_vctImageSize;
152 std::vector<int64_t>& m_vctAnchorSize;
153 std::vector<float>& m_vctAspectRatio;
155 std::vector<CTensor<T>>& m_vctTsrTargetBoxes;
156 std::vector<CTensor<T>>& m_vctTsrTargetLabels;
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;
170 CBackendBCEWithLogistLoss<T> m_backendBCEWithLogistLoss;
171 CBackendSmoothL1Loss<T> m_backendSmoothL1Loss;
172 CBackendConcatenate<T> m_backendConcatenate;
173 CBackendLabel<T> m_backendLabel;
175 std::vector<uint32_t>& m_vctPositiveIndexes;
176 std::vector<uint32_t>& m_vctPositiveNegativeIndexes;
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;
185 CTensor<T> m_tsrTargetBuffer;
190 std::vector<CTensor<T>>& m_vctObjectnessPermute;
191 std::vector<CTensor<T>>& m_vctBBoxDeltasPermute;
194 DeclareGetSignletonObject(CComputationalGraphRegionProposalNetwork);
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__)))
Definition AlgorithmAIBase.h:18