FLImaging 6.5.16.1
BackendMultiScaleRoIAlign.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "BackendBase.h"
6#include <vector>
7
8namespace FLImaging
9{
10 namespace AI
11 {
12 template <typename T>
13 class FL_EXPORT CTensor;
14
15 template <typename T>
16 class FL_EXPORT CBackendMultiScaleRoIAlign : public CBackendBase<T>
17 {
18 public:
19 CBackendMultiScaleRoIAlign();
20 CBackendMultiScaleRoIAlign(const CBackendMultiScaleRoIAlign<T>& bl);
21 virtual ~CBackendMultiScaleRoIAlign();
22
23 virtual const CResult MultiScaleRoIAlign(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, CTensor<T>* pTsrResult, int64_t i64SamplingRatio, int64_t i64OutputSizeW, int64_t i64OutputSizeH, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
24 virtual const CResult MultiScaleRoIAlignBackward(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, const CTensor<T>* pTsrDy, std::vector<CTensor<T>*>& vctTsrDx, const std::vector<bool>& vctAddGradients, int64_t i64SamplingRatio, int64_t i64OutputSizeW, int64_t i64OutputSizeH, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
25 virtual const CResult RoIAlignCPU(const CTensor<T>* pTsrInput, const CTensor<T>* pTsrBoxes, CTensor<T>* pTsrResult, T tSpatialScale, int64_t i64OutputW, int64_t i64OutputH, int64_t i64SamplingRatio, bool bAligned);
26 virtual const CResult RoIAlign_Backward(const CTensor<T>* pTsrX, const CTensor<T>* pTsrDy, const CTensor<T>* pTsrBoxes, CTensor<T>* pTsrDx, T tSpatialScale, int64_t i64OutputW, int64_t i64OutputH, int64_t i64SamplingRatio, bool bAligned);
27
28 virtual const CResult RoIAlignGPU(const CTensor<T>* pTsrInput, const CTensor<T>* pTsrBoxes, CTensor<T>* pTsrResult, T tSpatialScale, int64_t i64OutputW, int64_t i64OutputH, int64_t i64SamplingRatio, bool bAligned);
29 virtual const CResult RoIAlignGPU_Backward(const CTensor<T>* pTsrX, const CTensor<T>* pTsrDy, const CTensor<T>* pTsrBoxes, CTensor<T>* pTsrDx, T tSpatialScale, int64_t i64OutputW, int64_t i64OutputH, int64_t i64SamplingRatio, bool bAligned);
30
31
32 protected:
33 virtual const CResult CheckShape(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes);
34 virtual const CResult InitializeData(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalLevel, int64_t i64CanonicalScale, CTensor<T>& tsrResultBoxCoverted, std::vector<T>& vctResultScales, std::vector<std::vector<uint32_t>>& vctResultIndexPerLevel);
35 virtual const CResult InitializeData_GPU(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalLevel, int64_t i64CanonicalScale, CTensor<T>& tsrResultBoxCoverted, std::vector<T>& vctResultScales, std::vector<std::vector<uint32_t>>& vctResultIndexPerLevel);
36
37 virtual const CResult InitializeScale(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, std::vector<T>& vctResultScales);
38
39 virtual const CResult MultiScaleRoIAlignGPU(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, CTensor<T>* pTsrResult, int64_t i64SamplingRatio, int64_t i64OutputSizeW, int64_t i64OutputSizeH, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
40 virtual const CResult MultiScaleRoIAlignBackwardGPU(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, const CTensor<T>* pTsrDy, std::vector<CTensor<T>*>& vctTsrDx, const std::vector<bool>& vctAddGradients, int64_t i64SamplingRatio, int64_t i64OutputSizeW, int64_t i64OutputSizeH, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
41
42 virtual const CResult MultiScaleRoIAlignCPU(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, CTensor<T>* pTsrResult, int64_t i64SamplingRatio, int64_t i64OutputSizeW, int64_t i64OutputSizeH, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
43 virtual const CResult MultiScaleRoIAlignBackwardCPU(const std::vector<CTensor<T>*>& vctTsrInput, const std::vector<CTensor<T>*>& vctTsrBoxes, const CTensor<T>* pTsrDy, std::vector<CTensor<T>*>& vctTsrDx, const std::vector<bool>& vctAddGradients, int64_t i64SamplingRatio, int64_t i64OutputSizeW, int64_t i64OutputSizeH, const std::vector<T>& vctScales, const std::vector<std::pair<int64_t, int64_t>>& vctImageShapes, int64_t i64CanonicalScale = 224, int64_t i64CanonicalLevel = 4);
44
45 DeclareGetClassType();
46 SupportToDuplicateObjectWithoutCreateNewObject(CBackendMultiScaleRoIAlign<T>, *this);
47 };
48 }
49}
50
51#endif