FLImaging 6.5.16.1
ComputationalGraphMultiScaleRoIAlign.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "ComputationalGraph.h"
6#include "BackendMultiScaleRoIAlign.h"
7#include "DefinitionsAI.h"
8
9namespace FLImaging
10{
11 namespace AI
12 {
13 template<typename T>
14 class FL_EXPORT CBackendMultiScaleRoIAlign;
15
16 template <typename T>
17 class FL_EXPORT CComputationalGraphMultiScaleRoIAlign : public CComputationalGraph<T>
18 {
19
20 private:
21 CComputationalGraphMultiScaleRoIAlign();
22
23 protected:
24 CComputationalGraphMultiScaleRoIAlign(const CComputationalGraphMultiScaleRoIAlign<T>& cg);
25
26 public:
27 CComputationalGraphMultiScaleRoIAlign(const std::vector<const CComputationalBase<T>*>& vctFeatures, const CComputationalBase<T>& cgBoxes, int64_t i64OutputWidth, int64_t i64OutputHeight, int64_t i64SamplingRatio, int64_t i64ImageWidth, int64_t i64ImageHeight, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
28 CComputationalGraphMultiScaleRoIAlign(const std::initializer_list<const CComputationalBase<T>*>& ilFeatures, const CComputationalBase<T>& cgBoxes, int64_t i64OutputWidth, int64_t i64OutputHeight, int64_t i64SamplingRatio, int64_t i64ImageWidth, int64_t i64ImageHeight, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
29
30 virtual ~CComputationalGraphMultiScaleRoIAlign();
31
32 virtual CTensor<T>& Forward() override;
33 virtual CTensor<T>* Backward() override;
34 virtual CComputationalBase<T>* Clone() const override;
35
36 virtual const std::vector<int64_t>& GetEstimatedShape(bool bRecursive = true) const override;
37 virtual const CResult PrintNodeParamInfo() const override;
38
39 virtual const CResult GetBinaryData(Base::CFLData& fldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
40 virtual const CResult GetBinaryData(Base::CFLData* pFldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
41
42 virtual const CResult SetBinaryData(const Base::CFLData& fldBinary, int64_t* pI64Offset = nullptr) override;
43 virtual const CResult SetBinaryData(const Base::CFLData* pFldBinary, int64_t* pI64Offset = nullptr) override;
44
45 virtual int64_t GetRequiredDedicatedMemory(bool bTraining = false, bool bRecursively = true, int64_t i64BatchSize = 1) const override;
46 virtual int64_t GetRequiredTemporaryMemory(bool bTraining = false , bool bRecursively = true, int64_t i64BatchSize = 1, int64_t i64MemoryIndex = 0) const override;
47
48 const CResult SetOutputWidth(int64_t i64OutputWidth);
49 int64_t GetOutputWidth() const;
50 const CResult SetOutputHeight(int64_t i64OutputHeight);
51 int64_t GetOutputHeight() const;
52 const CResult SetSamplingRatio(int64_t i64SamplingRatio);
53 int64_t GetSamplingRatio() const;
54 const CResult SetImageWidth(int64_t i64ImageWidth);
55 int64_t GetImageWidth() const;
56 const CResult SetImageHeight(int64_t i64ImageHeight);
57 int64_t GetImageHeight() const;
58 const CResult SetCanonicalScale(int64_t i64CanonicalScale);
59 int64_t GetCanonicalScale() const;
60 const CResult SetCanonicalLevel(int64_t i64CanonicalLevel);
61 int64_t GetCanonicalLevel() const;
62
63 DeclareGetClassType();
64 SupportToDuplicateObjectWithoutCreateNewObject(CComputationalGraphMultiScaleRoIAlign, *this);
65
66 protected:
67 const CResult CheckShape() const;
68
69 private:
70 int64_t m_i64OutputWidth;
71 int64_t m_i64OutputHeight;
72 int64_t m_i64SamplingRatio;
73 int64_t m_i64ImageWidth;
74 int64_t m_i64ImageHeight;
75 int64_t m_i64CanonicalScale;
76 int64_t m_i64CanonicalLevel;
77
78 CBackendMultiScaleRoIAlign<T> m_backendMultiScaleRoIAlign;
79 public:
80 DeclareGetSignletonObject(CComputationalGraphMultiScaleRoIAlign);
81 };
82
83 #define CCGFMultiScaleRoIAlign(...) (*(new CComputationalGraphMultiScaleRoIAlign<float>(__VA_ARGS__)))
84 #define CCGDMultiScaleRoIAlign(...) (*(new CComputationalGraphMultiScaleRoIAlign<double>(__VA_ARGS__)))
85
86 #define CCGTMultiScaleRoIAlign(T, ...) (*(new CComputationalGraphMultiScaleRoIAlign<T>(__VA_ARGS__)))
87 }
88}
89
90#endif