3#if _MSC_VER >= 1900 && defined(_M_X64)
5#include "ComputationalBase.h"
12#include "DefinitionsAI.h"
20 class CCuda_Tensor_Cudnn;
25 class CCuda_ComputationalGraphMatMul_Cublas;
29 class FL_EXPORT CTensor :
public CComputationalBase<T>
34 CTensor(
const CTensor<float >& tsr,
bool bDeepCopy =
true);
35 CTensor(
const CTensor<double>& tsr,
bool bDeepCopy =
true);
37 CTensor(
const T& tScalar);
38 CTensor(
const std::vector<int64_t>& vctShapeDesc);
39 CTensor(
const std::initializer_list<int64_t>& ilShapeDesc);
43 static const CResult GetClassNumFromImages(
const Base::CFLImage* pFli, Base::CFLArray<int32_t>& flaClassNum);
45 virtual const CResult
Load(
const wchar_t* pWcsFileName)
override;
46 virtual const CResult
Save(
const wchar_t* pWcsFileName)
override;
48 virtual const CResult GetBinaryData(Base::CFLData& fldBinary,
bool bSuperClass =
false, int32_t i32Version = -1,
bool bDumpMode =
false)
const override;
49 virtual const CResult GetBinaryData(Base::CFLData* pFldBinary,
bool bSuperClass =
false, int32_t i32Version = -1,
bool bDumpMode =
false)
const override;
51 virtual const CResult SetBinaryData(
const Base::CFLData& fldBinary, int64_t* pI64Offset =
nullptr)
override;
52 virtual const CResult SetBinaryData(
const Base::CFLData* pFldBinary, int64_t* pI64Offset =
nullptr)
override;
54 virtual const CResult
Clear()
override;
56 virtual const CResult CopyHostToDevice();
57 virtual const CResult CopyDeviceToHost();
59 virtual const CResult SetMemory(
const T* pTMemory,
const std::vector<int64_t>& vctShape,
bool bOrderByDesc =
true,
bool bDeepCopy =
false);
60 virtual const CResult SetMemory(
const T* pTMemory,
const std::initializer_list<int64_t>& vctShape,
bool bOrderByDesc =
true,
bool bDeepCopy =
false);
62 virtual const CResult SetDeviceMemory(
const T* pTMemory,
const std::vector<int64_t>& vctShape,
bool bOrderByDesc =
true,
bool bDeepCopy =
false);
63 virtual const CResult SetDeviceMemory(
const T* pTMemory,
const std::initializer_list<int64_t>& vctShape,
bool bOrderByDesc =
true,
bool bDeepCopy =
false);
65 virtual const T* GetMemory()
const;
66 virtual const T* GetDeviceMemory()
const;
68 virtual bool IsAutoDestroyCPUMemoryEnabled()
const;
69 virtual bool IsAutoDestroyDeviceMemoryEnabled()
const;
71 virtual const CResult
Assign(
const Base::CFLImage& fli,
bool bNormalize =
true);
72 virtual const CResult
Assign(
const Base::CFLImage* pFli,
bool bNormalize =
true);
73 virtual const CResult
Assign(
const CTensor<float>& tsr,
bool bDeepCopy =
true);
74 virtual const CResult
Assign(
const CTensor<float>* pTsr,
bool bDeepCopy =
true);
75 virtual const CResult
Assign(
const CTensor<double>& tsr,
bool bDeepCopy =
true);
76 virtual const CResult
Assign(
const CTensor<double>* pTsr,
bool bDeepCopy =
true);
77 virtual const CResult
Assign(
const T tScalar);
78 virtual const CResult
Assign(
const CComputationalBase<T>& cb);
79 virtual const CResult
Assign(
const Base::CFLImage* pFli,
const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
80 virtual const CResult
Assign(
const Base::CFLImage& fli,
const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
81 virtual const CResult
Assign(
const Base::CFLImage* pFli,
const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
82 virtual const CResult
Assign(
const Base::CFLImage& fli,
const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
84 virtual const CResult Create(
const std::vector<int64_t>& vctShape,
bool bOrderByDesc =
true,
bool bDeviceAllocation =
true);
85 virtual const CResult Create(
const std::initializer_list<int64_t>& ilShape,
bool bOrderByDesc =
true,
bool bDeviceAllocation =
true);
86 virtual const CResult Create(
const Base::CFLImage& fli,
bool bNormalize =
true, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
87 virtual const CResult Create(
const Base::CFLImage* pFli,
bool bNormalize =
true, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
88 virtual const CResult Create(
const Base::CFLImage* pFli,
const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
89 virtual const CResult Create(
const Base::CFLImage& fli,
const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
90 virtual const CResult Create(
const Base::CFLImage* pFli,
const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
91 virtual const CResult Create(
const Base::CFLImage& fli,
const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
93 virtual const CResult
Append(
const Base::CFLImage* pFli, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
94 virtual const CResult
Append(
const Base::CFLImage& fli, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
96 virtual const CResult SetLabels(Foundation::CFLFigureArray& flfaSourceLabel,
bool bDeepCopy =
false);
97 virtual const CResult SetLabels(Foundation::CFLFigureArray* pFlfaSourceLabel,
bool bDeepCopy =
false);
98 virtual Foundation::CFLFigureArray* GetLabels()
const;
99 virtual const CResult SetObjectRegions(Foundation::CFLFigureArray& flfaSourceObjectRegions,
bool bDeepCopy =
false);
100 virtual const CResult SetObjectRegions(Foundation::CFLFigureArray* pFlfaSourceObjectRegions,
bool bDeepCopy =
false);
101 virtual Foundation::CFLFigureArray* GetObjectRegions()
const;
102 virtual const CResult SetOriginBoundaryLabels(Foundation::CFLFigureArray& flfaSourceLabel,
bool bDeepCopy =
false);
103 virtual const CResult SetOriginBoundaryLabels(Foundation::CFLFigureArray* pFlfaSourceLabel,
bool bDeepCopy =
false);
104 virtual Foundation::CFLFigureArray* GetOriginBoundaryLabels()
const;
106 virtual const CResult EnableObjectAugmentationRegionMode(
bool bEnable);
107 virtual bool IsObjectAugmentationRegionModeEnabled()
const;
109 virtual const CResult MakeMiniBatch(
const CTensor<T>& tsrSrc, int64_t i64Start, int64_t i64End);
111 virtual const CResult CreateDeviceMemory();
112 virtual const CResult ClearDeviceMemory();
114 virtual const CResult Reshape(
const std::vector<int64_t>& vctAxes = { },
bool bOrderByDesc =
true);
116 virtual const CResult FillZero();
117 virtual const CResult Fill(T tFillValue);
118 virtual const CResult FillRandom(T tRangeMin, T tRangeMax);
119 virtual const CResult FillUniformRandom(T tRangeMin, T tRangeMax);
120 virtual const CResult FillNormalRandom(T tMean = 0, T tStdev = 1);
121 virtual const CResult FillSeries(T tStartValue, T tInterval);
122 virtual const CResult FillXavier();
123 virtual const CResult FillHe();
124 virtual const CResult FillHe(int64_t i64InputSize);
126 virtual const CResult ConvertFloatToUint(int32_t i32Depth, CTensor<T>* pTsrResult =
nullptr);
127 virtual const CResult ConvertFloatToUint(int32_t i32Depth, uint8_t* pU8Result);
129 virtual const CResult ConvertUintToFloat(int32_t i32Depth, CTensor<T>* pTsrResult =
nullptr);
130 virtual const CResult ConvertUintToFloat(int32_t i32Depth, T* pTResult);
132 virtual CTensor<T>& Evaluate()
override;
133 virtual CTensor<T>& Forward()
override;
134 virtual CTensor<T>* Backward()
override;
136 virtual int64_t GetRequiredDedicatedMemory(
bool bTraining =
false,
bool bRecursively =
true, int64_t i64BatchSize = 1)
const override;
137 virtual int64_t GetRequiredTemporaryMemory(
bool bTraining =
false,
bool bRecursively =
true, int64_t i64BatchSize = 1, int64_t i64MemoryIndex = 0)
const override;
139 virtual CTensor<T>& GetValue()
const override;
140 virtual const int64_t& GetRank()
const;
141 virtual const std::vector<int64_t>& GetEstimatedShape(
bool bRecursive =
true)
const override;
142 virtual const std::vector<int64_t>& GetShapeAsc()
const override;
144 virtual const std::vector<int64_t>& GetPitchByRank()
const;
145 virtual const std::vector<int64_t>& GetPitchByRankAsc()
const;
146 virtual const int64_t& GetTotalElement()
const;
147 virtual const int64_t& GetTotalSizeByte()
const;
149 virtual const CResult SetBatchParameters(
const CTensor<T>& tsr);
151 operator const T& ()
const;
152 operator const T* ()
const;
153 const CTensor<T>& operator=(
const CTensor<float>& tsr);
154 const CTensor<T>& operator=(
const CTensor<double>& tsr);
155 const CTensor<T>& operator=(
const std::initializer_list<T>& ilRank1st);
156 const CTensor<T>& operator=(
const std::initializer_list<
const std::initializer_list<T>>& ilRank2nd);
157 const CTensor<T>& operator=(
const std::initializer_list<
const std::initializer_list<
const std::initializer_list<T> > >& ilRank3rd);
158 const CTensor<T>& operator=(
const std::initializer_list<
const std::initializer_list<
const std::initializer_list<
const std::initializer_list<T> > > >& ilRank4th);
159 const T operator=(
const T tScalar);
160 CScalar<T> operator[](int32_t i32Index)
const;
161 CScalar<T> operator[](uint32_t u32Index)
const;
162 CScalar<T> operator[](int64_t i64Index)
const;
163 CScalar<T> operator[](uint64_t u64Index)
const;
165 virtual const CTensor<T>& operator+=(
const CTensor<T>& tsr);
166 virtual const CTensor<T>& operator+=(
const float& f32Scalar);
167 virtual const CTensor<T>& operator+=(
const double& f64Scalar);
168 virtual const CTensor<T>& operator-=(
const CTensor<T>& tsr);
169 virtual const CTensor<T>& operator-=(
const float& f32Scalar);
170 virtual const CTensor<T>& operator-=(
const double& f64Scalar);
171 virtual const CTensor<T>& operator*=(
const CTensor<T>& tsr);
172 virtual const CTensor<T>& operator*=(
const float& f32Scalar);
173 virtual const CTensor<T>& operator*=(
const double& f64Scalar);
174 virtual const CTensor<T>& operator/=(
const CTensor<T>& tsr);
175 virtual const CTensor<T>& operator/=(
const float& f32Scalar);
176 virtual const CTensor<T>& operator/=(
const double& f64Scalar);
178 CTensor<T> operator+(
const CTensor<T>& tsr)
const;
179 CTensor<T> operator+(
const float& f32Scalar)
const;
180 CTensor<T> operator+(
const double& f64Scalar)
const;
181 CTensor<T> operator-(
const CTensor<T>& tsr)
const;
182 CTensor<T> operator-(
const float& f32Scalar)
const;
183 CTensor<T> operator-(
const double& f64Scalar)
const;
184 CTensor<T> operator*(
const CTensor<T>& tsr)
const;
185 CTensor<T> operator*(
const float& f32Scalar)
const;
186 CTensor<T> operator*(
const double& f64Scalar)
const;
187 CTensor<T> operator/(
const CTensor<T>& tsr)
const;
188 CTensor<T> operator/(
const float& f32Scalar)
const;
189 CTensor<T> operator/(
const double& f64Scalar)
const;
191 friend CTensor<T> operator+(
const float& f32Scalar,
const CTensor<T>& tsr)
193 CTensor<T> tsrReturn((T)f32Scalar);
199 friend CTensor<T> operator+(
const double& f64Scalar,
const CTensor<T>& tsr)
201 CTensor<T> tsrReturn((T)f64Scalar);
207 friend CTensor<T> operator-(
const float& f32Scalar,
const CTensor<T>& tsr)
209 CTensor<T> tsrReturn((T)f32Scalar);
215 friend CTensor<T> operator-(
const double& f64Scalar,
const CTensor<T>& tsr)
217 CTensor<T> tsrReturn((T)f64Scalar);
223 friend CTensor<T> operator*(
const float& f32Scalar,
const CTensor<T>& tsr)
225 CTensor<T> tsrReturn((T)f32Scalar);
231 friend CTensor<T> operator*(
const double& f64Scalar,
const CTensor<T>& tsr)
233 CTensor<T> tsrReturn((T)f64Scalar);
239 friend CTensor<T> operator/(
const float& f32Scalar,
const CTensor<T>& tsr)
241 CTensor<T> tsrReturn((T)f32Scalar);
247 friend CTensor<T> operator/(
const double& f64Scalar,
const CTensor<T>& tsr)
249 CTensor<T> tsrReturn((T)f64Scalar);
255 CTensor<T> operator>(
const CTensor<T>& tsr);
256 CTensor<T> operator>(
const float& f32Scalar);
257 CTensor<T> operator>(
const double& f64Scalar);
258 CTensor<T> operator>=(
const CTensor<T>& tsr);
259 CTensor<T> operator>=(
const float& f32Scalar);
260 CTensor<T> operator>=(
const double& f64Scalar);
261 CTensor<T> operator==(
const CTensor<T>& tsr);
262 CTensor<T> operator==(
const float& f32Scalar);
263 CTensor<T> operator==(
const double& f64Scalar);
264 CTensor<T> operator!=(
const CTensor<T>& tsr);
265 CTensor<T> operator!=(
const float& f32Scalar);
266 CTensor<T> operator!=(
const double& f64Scalar);
267 CTensor<T> operator<=(
const CTensor<T>& tsr);
268 CTensor<T> operator<=(
const float& f32Scalar);
269 CTensor<T> operator<=(
const double& f64Scalar);
270 CTensor<T> operator<(
const CTensor<T>& tsr);
271 CTensor<T> operator<(
const float& f32Scalar);
272 CTensor<T> operator<(
const double& f64Scalar);
274 bool Equals(
const CTensor<float>& tsr);
275 bool Equals(
const CTensor<double>& tsr);
277 virtual const CResult
Add(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
278 virtual const CResult Subtract(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
279 virtual const CResult Multiply(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
280 virtual const CResult MatMul(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
281 virtual const CResult Divide(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
282 virtual const CResult
Dot(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
283 virtual const CResult Pow(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
284 virtual const CResult Compare(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult, Base::ELogicalCondition eConditon);
285 virtual const CResult PNormDistance(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult, T tP = (T)2.);
287 virtual const CResult Chunk(std::vector<CTensor<T>>& vctResult, int64_t i64ChunkCount, int64_t i64Axis = -1);
288 virtual const CResult Chunk(CTensor<T>* pTsrResult, int64_t i64ChunkCount, int64_t i64Axis = -1);
289 virtual const CResult Chunk(CTensor<T>* pTsrResult, std::vector<CTensor<T>>& vctResult, int64_t i64ChunkCount, int64_t i64Axis = -1);
291 virtual const CResult Stack(
const std::initializer_list<CTensor<T>*>& tsrTarget, CTensor<T>* pTsrResult, int64_t i64Axis = -1);
292 virtual const CResult Stack(
const std::vector<CTensor<T>*>& vctTarget, CTensor<T>* pTsrResult, int64_t i64Axis = -1);
293 virtual const CResult HStack(
const std::initializer_list<CTensor<T>*>& tsrTarget, CTensor<T>* pTsrResult);
294 virtual const CResult HStack(
const std::vector<CTensor<T>*>& vctTarget, CTensor<T>* pTsrResult);
295 virtual const CResult VStack(
const std::initializer_list<CTensor<T>*>& tsrTarget, CTensor<T>* pTsrResult);
296 virtual const CResult VStack(
const std::vector<CTensor<T>*>& vctTarget, CTensor<T>* pTsrResult);
297 virtual const CResult Concatenate(
const std::initializer_list<CTensor<T>*>& ilTarget, CTensor<T>* pTsrResult, int64_t i64Axis = -1);
298 virtual const CResult Concatenate(
const std::vector<CTensor<T>*>& vctTarget, CTensor<T>* pTsrResult, int64_t i64Axis = -1);
300 virtual const CResult Transpose(CTensor<T>* pTsrResult);
301 virtual const CResult Transpose(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctTransDesc);
302 virtual const CResult Repeat(CTensor<T>* pTsrResult, int64_t i64Count, int64_t i64Axis = 0);
304 virtual const CResult ReduceSum(CTensor<T>* pTsrResult,
bool bKeepDim =
false);
305 virtual const CResult ReduceSum(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes,
bool bKeepDim =
false);
306 virtual const CResult ReduceSum(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes,
bool bKeepDim =
false);
307 virtual const CResult ReduceMean(CTensor<T>* pTsrResult,
bool bKeepDim =
false);
308 virtual const CResult ReduceMean(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes,
bool bKeepDim =
false);
309 virtual const CResult ReduceMean(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes,
bool bKeepDim =
false);
310 virtual const CResult ReduceMin(CTensor<T>* pTsrResult,
bool bKeepDim =
false);
311 virtual const CResult ReduceMin(CTensor<T>* pTsrResult,
const std::vector<int64_t>& ilAxes,
bool bKeepDim =
false);
312 virtual const CResult ReduceMin(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes,
bool bKeepDim =
false);
313 virtual const CResult ReduceMax(CTensor<T>* pTsrResult,
bool bKeepDim =
false);
314 virtual const CResult ReduceMax(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes,
bool bKeepDim =
false);
315 virtual const CResult ReduceMax(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes,
bool bKeepDim =
false);
317 virtual const CResult ReduceVar(CTensor<T>* pTsrResult,
bool bUnBiased =
true,
bool bKeepDim =
false);
318 virtual const CResult ReduceVar(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes,
bool bUnBiased =
true,
bool bKeepDim =
false);
319 virtual const CResult ReduceVar(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes,
bool bUnBiased =
true,
bool bKeepDim =
false);
320 virtual const CResult ReduceVarMean(CTensor<T>* pTsrVarResult, CTensor<T>* pTsrMeanResult,
bool bUnBiased =
true,
bool bKeepDim =
false);
321 virtual const CResult ReduceVarMean(CTensor<T>* pTsrVarResult, CTensor<T>* pTsrMeanResult,
const std::vector<int64_t>& vctAxes,
bool bUnBiased =
true,
bool bKeepDim =
false);
322 virtual const CResult ReduceVarMean(CTensor<T>* pTsrVarResult, CTensor<T>* pTsrMeanResult,
const std::initializer_list<int64_t>& ilAxes,
bool bUnBiased =
true,
bool bKeepDim =
false);
324 virtual const CResult ReduceStdev(CTensor<T>* pTsrResult,
bool bUnBiased =
true,
bool bKeepDim =
false);
325 virtual const CResult ReduceStdev(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes,
bool bUnBiased =
true,
bool bKeepDim =
false);
326 virtual const CResult ReduceStdev(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes,
bool bUnBiased =
true,
bool bKeepDim =
false);
328 virtual const CResult ReduceAny(CTensor<T>* pTsrResult,
bool bKeepDim =
false);
329 virtual const CResult ReduceAny(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes,
bool bKeepDim =
false);
330 virtual const CResult ReduceAny(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes,
bool bKeepDim =
false);
332 virtual const CResult ArgMax(CTensor<T>* pTsrResult);
333 virtual const CResult ArgMax(CTensor<T>* pTsrResult, int64_t i64Axis);
335 virtual const CResult Square(CTensor<T>* pTsrResult);
336 virtual const CResult Sqrt(CTensor<T>* pTsrResult);
338 virtual const CResult Sigmoid(CTensor<T>* pTsrResult);
339 virtual const CResult
Log(CTensor<T>* pTsrResult);
340 virtual const CResult Log10(CTensor<T>* pTsrResult);
341 virtual const CResult Log1p(CTensor<T>* pTsrResult);
342 virtual const CResult Tanh(CTensor<T>* pTsrResult);
343 virtual const CResult Absolute(CTensor<T>* pTsrResult);
345 virtual const CResult Sin(CTensor<T>* pTsrResult);
346 virtual const CResult Cos(CTensor<T>* pTsrResult);
347 virtual const CResult ArcCos(CTensor<T>* pTsrResult);
348 virtual const CResult ArcTan2(
const CTensor<T>& tsrTarget, CTensor<T>* pTsrResult);
349 virtual const CResult Degrees(CTensor<T>* pTsrResult);
351 virtual CComputationalBase<T>* Clone()
const override;
353 virtual const CResult ArgMin(CTensor<T>* pTsrResult);
354 virtual const CResult ArgMin(CTensor<T>* pTsrResult, int64_t i64Axis);
356 virtual const CResult Ceil(CTensor<T>* pTsrResult);
357 virtual const CResult
Floor(CTensor<T>* pTsrResult);
359 virtual const CResult Clip(
const CTensor<T>& tsrMin,
const CTensor<T>& tsrMax = -std::numeric_limits<T>::lowest());
360 virtual const CResult Clip(CTensor<T>* pTsrResult,
const CTensor<T>& tsrMin,
const CTensor<T>& tsrMax = -std::numeric_limits<T>::lowest());
362 virtual const CResult FillZero_Like(CTensor<T>& pTsrOpr);
364 virtual const CResult LinSpace(T tStart, T tEnd, int64_t i64Num = 50,
bool bEndPoint =
true, int64_t i64Axis = 0);
366 virtual const CResult Diff(CTensor<T>* pTsrResult, int64_t i64RepeatNum = 1, int64_t i64Axis = -1);
367 virtual const CResult Diff(CTensor<T>* pTsrResult, int64_t i64RepeatNum, int64_t i64Axis,
const CTensor<T>& tsrPrepend,
const CTensor<T>& tsrAppend = CTensor());
369 virtual const CResult Product(CTensor<T>* pTsrResult,
bool bKeepDim =
false,
const CTensor<T>& tsrInitial = CTensor<T>());
370 virtual const CResult Product(CTensor<T>* pTsrResult, int64_t i64Axis,
bool bKeepDim =
false,
const CTensor<T>& tsrInitial = CTensor<T>());
371 virtual const CResult Product(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes,
bool bKeepDim =
false,
const CTensor<T>& tsrInitial = CTensor<T>());
373 virtual const CResult ArgSort(CTensor<T>* pTsrResult,
bool bDecrease =
false,
bool bStable =
false);
374 virtual const CResult ArgSort(CTensor<T>* pTsrResult, int64_t i64Axis,
bool bDecrease =
false,
bool bStable =
false);
375 virtual const CResult
Sort(CTensor<T>* pTsrResult,
const bool bDecrease =
false);
376 virtual const CResult
Sort(CTensor<T>* pTsrResult, int64_t i64Axis,
bool bDecrease =
false);
377 virtual const CResult
Sort(CTensor<T>* pTsrResult, std::vector<uint32_t>* pVtIndices,
bool bDecrease =
false,
bool bStable =
false);
378 virtual const CResult
Sort(CTensor<T>* pTsrResult, std::vector<uint32_t>* pVtIndices, int64_t i64Axis,
bool bDecrease =
false,
bool bStable =
false);
380 virtual const CResult TopK(CTensor<T>* pTsrResult, int64_t i64K = 3,
bool bDec =
true);
381 virtual const CResult TopK(CTensor<T>* pTsrResult, int64_t i64K, int64_t i64Axis,
bool bDec =
true);
382 virtual const CResult TopK(CTensor<T>* pTsrResult, std::vector<uint32_t>* pVtIndices, int64_t i64K = 3,
bool bDec =
true,
bool bStable =
false);
383 virtual const CResult TopK(CTensor<T>* pTsrResult, std::vector<uint32_t>* pVtIndices, int64_t i64K, int64_t i64Axis,
bool bDec =
true,
bool bStable =
false);
385 virtual const CResult Gather(
const CTensor<T>& tsrIndex, CTensor<T>* pTsrResult, int64_t i64Axis = 0);
386 virtual const CResult Gather(CTensor<T>* pTsrResult, std::vector<std::pair<int64_t, std::vector<int64_t>>> vtGatherPoint);
389 virtual const CResult Cross(
const CTensor<T>& tsrOprand, CTensor<T>* pTsrResult, int64_t i64AxisA = -1, int64_t i64AxisB = -1, int64_t i64AxisC = -1);
390 virtual const CResult Cross(
const CTensor<T>& tsrOprand, CTensor<T>* pTsrResultconst, std::vector<int64_t>& vctAxes);
392 virtual const CResult Ones();
393 virtual const CResult Sum(CTensor<T>* pTsrResult, int64_t i64Axis = -1,
bool bKeepDim =
false,
const CTensor<T>& tsrInitial = CTensor<T>());
394 virtual const CResult Sum(CTensor<T>* pTsrResult, std::vector<int64_t> vtAxis,
bool bKeepDim =
false,
const CTensor<T>& tsrInitial = CTensor<T>());
396 virtual const CResult
Maximum(
const CTensor<T>& tsrOpr2, CTensor<T>* pTsrResult);
397 virtual const CResult
Minimum(
const CTensor<T>& tsrOpr2, CTensor<T>* pTsrResult);
399 virtual const CResult Swap(CComputationalBase<T>& cbSwap)
override;
400 virtual const CResult SwapMemory(CComputationalBase<T>& cbSwap);
401 virtual const CResult SwapAxes(CTensor<T>* pTsrResult, int64_t i64AxisOne, int64_t i64AxisOther);
403 virtual const CResult Permute(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilShape);
404 virtual const CResult Permute(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctShape);
406 virtual const CResult Unique(CTensor<T>* pTsrResult);
407 virtual const CResult Unique(CTensor<T>* pTsrResult, int64_t i64Axis);
408 virtual const CResult Unique(CTensor<T>* pTsrResult, std::vector<int64_t>* pVctAdditionalResult, EUniqueResultSettings eResultSettings);
409 virtual const CResult Unique(CTensor<T>* pTsrResult, std::vector<int64_t>* pVctAdditionalResult, EUniqueResultSettings eResultSettings, int64_t i64Axis);
410 virtual const CResult Unique(CTensor<T>* pTsrResult, std::vector<int64_t>* pVctAdditionalResult0, std::vector<int64_t>* pVctAdditionalResult1, EUniqueResultSettings eResultSettings);
411 virtual const CResult Unique(CTensor<T>* pTsrResult, std::vector<int64_t>* pVctAdditionalResult0, std::vector<int64_t>* pVctAdditionalResult1, EUniqueResultSettings eResultSettings, int64_t i64Axis);
412 virtual const CResult Unique(CTensor<T>* pTsrResult, std::vector<int64_t>* pVctAdditionalResult0, std::vector<int64_t>* pVctAdditionalResult1, std::vector<int64_t>* pVctAdditionalResult2, EUniqueResultSettings eResultSettings);
413 virtual const CResult Unique(CTensor<T>* pTsrResult, std::vector<int64_t>* pVctAdditionalResult0, std::vector<int64_t>* pVctAdditionalResult1, std::vector<int64_t>* pVctAdditionalResult2, EUniqueResultSettings eResultSettings, int64_t i64Axis);
415 virtual const CResult Norm(CTensor<T>* pTsrResult, ENormOrder eNormOrder = ENormOrder_Frobenius,
bool bKeepDim =
false);
416 virtual const CResult Norm(CTensor<T>* pTsrResult, int64_t i64Order,
bool bKeepDim =
false);
418 virtual const CResult Norm(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes, ENormOrder eNormOrder = ENormOrder_Frobenius,
bool bKeepDim =
false);
419 virtual const CResult Norm(CTensor<T>* pTsrResult,
const std::vector<int64_t>& vctAxes, int64_t i64Order = 0,
bool bKeepDim =
false);
421 virtual const CResult Norm(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes, ENormOrder eNormOrder = ENormOrder_Frobenius,
bool bKeepDim =
false);
422 virtual const CResult Norm(CTensor<T>* pTsrResult,
const std::initializer_list<int64_t>& ilAxes, int64_t i64Order = 0,
bool bKeepDim =
false);
424 virtual const CResult Where(
const CTensor<T>& tsrCondition, CTensor<T>* pTsrResult);
425 virtual const CResult Where(
const CTensor<T>* pTsrCondition, CTensor<T>* pTsrResult);
426 virtual const CResult Where(
const CTensor<T>& tsrCondition,
const CTensor<T>& tsrTrue,
const CTensor<T>& tsrFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
427 virtual const CResult Where(
const CTensor<T>* pTsrCondition,
const CTensor<T>* pTsrTrue,
const CTensor<T>* pTsrFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
428 virtual const CResult Where(
const CTensor<T>& tsrCondition,
const T tTrue,
const CTensor<T>& tsrFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
429 virtual const CResult Where(
const CTensor<T>* pTsrCondition,
const T tTrue,
const CTensor<T>* pTsrFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
430 virtual const CResult Where(
const CTensor<T>& tsrCondition,
const CTensor<T>& tsrTrue,
const T tFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
431 virtual const CResult Where(
const CTensor<T>* pTsrCondition,
const CTensor<T>* pTsrTrue,
const T tFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
432 virtual const CResult Where(
const CTensor<T>& tsrCondition,
const T tTrue,
const T tFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
433 virtual const CResult Where(
const CTensor<T>* pTsrCondition,
const T tTrue,
const T tFalse, CTensor<T>* pTsrResult,
bool bAdd =
false);
435 virtual const CResult Threshold(T tThreshold, T tValue, Base::ELogicalCondition eLogicalCondition, CTensor<T>* pTsrResult);
436 virtual const CResult Threshold(T tThreshold, T tInRangeValue, T tOutRangeValue, Base::ELogicalCondition eLogicalCondition, CTensor<T>* pTsrResult);
438 virtual const CResult
Flip(int64_t i64Axis, CTensor<T>* pTsrResult, int32_t i32DeviceIndex = 0);
439 virtual const CResult
Flip(
const std::initializer_list<int64_t>& ilAxes, CTensor<T>* pTsrResult, int32_t i32DeviceIndex = 0);
440 virtual const CResult
Flip(
const std::vector<int64_t>& vctAxes, CTensor<T>* pTsrResult, int32_t i32DeviceIndex = 0);
442 virtual const CResult
Rotate90(int64_t i64K, int64_t i64AxisA, int64_t i64AxisB, CTensor<T>* pTsrResult, int32_t i32DeviceIndex = 0);
444 virtual const CResult SSIM(
const Base::CFLImage& fliInput1,
const Base::CFLImage& fliInput2, CTensor<T>* pTsrResult, T tMaxDiffValue = (T)INFINITY, int64_t i64FilterSize = 11, T tFilterSigma = (T)1.5, T tK1 = (T)0.01, T tK2 = (T)0.03,
bool bReturnIndexMap =
false);
445 virtual const CResult SSIM(
const Base::CFLImage* pFliInput1,
const Base::CFLImage* pFliInput2, CTensor<T>* pTsrResult, T tMaxDiffValue = (T)INFINITY, int64_t i64FilterSize = 11, T tFilterSigma = (T)1.5, T tK1 = (T)0.01, T tK2 = (T)0.03,
bool bReturnIndexMap =
false);
447 virtual const CResult SSIM(
const CTensor<T>& tsrInput1,
const CTensor<T>& tsrInput2, CTensor<T>* pTsrResult, T tMaxDiffValue = (T)INFINITY, int64_t i64FilterSize = 11, T tFilterSigma = (T)1.5, T tK1 = (T)0.01, T tK2 = (T)0.03,
bool bReturnIndexMap =
false);
448 virtual const CResult SSIM(
const CTensor<T>* pTsrInput1,
const CTensor<T>* pTsrInput2, CTensor<T>* pTsrResult, T tMaxDiffValue = (T)INFINITY, int64_t i64FilterSize = 11, T tFilterSigma = (T)1.5, T tK1 = (T)0.01, T tK2 = (T)0.03,
bool bReturnIndexMap =
false);
450 virtual const CResult SVD(CTensor<T>* pTsrUMatrix, CTensor<T>* pTsrSingular, CTensor<T>* pTsrVMatrix,
bool bFullMatrices =
true);
452 virtual const CResult Diag(CTensor<T>* pTsrResult, int64_t i64K = 0);
453 virtual const CResult Eye(CTensor<T>* pTsrResult, int64_t i64Row, int64_t i64Col = 0, int64_t i64K = 0);
455 virtual const CResult Unfold(CTensor<T>* pTsrResult, int64_t i64Dim, int64_t i64Size, int64_t i64Step);
457 virtual const CComputationalBase<T>* GetAt(
const wchar_t* pWcsName)
const override;
458 virtual const CResult FindByValueAttribute(EValueAttribute eValueAttribute, std::vector<
const CComputationalBase<T>*>& vctResult)
const override;
460 virtual const CResult PrintGraphInfo(
bool bRecursively =
true,
bool bShapeOrderAsc =
false,
bool bIncludeTensors =
false)
const override;
461 virtual const CResult Print();
463 virtual const CResult EnableClearFigures(
bool bClearFigures =
true);
464 virtual bool IsClearFiguresEnabled()
const;
466 virtual const CResult EnableMemorySavingMode(
bool bEnable =
false);
467 virtual bool IsMemorySavingModeEnabled()
const;
469 virtual const CResult SetImagePreprocessingAlgorithms(
const std::vector<Foundation::CAlgorithmFeatureBase*>* vctPreprocessingAlgorithm);
470 virtual const std::vector<Foundation::CAlgorithmFeatureBase*>* GetImagePreprocessingAlgorithms()
const;
471 static const CResult Preprocessing(Base::CFLImage& fliSrc,
const std::vector<Foundation::CAlgorithmFeatureBase*>* vctPreprocessingAlgorithm);
473 virtual const CResult SetUpdateWeight(T tUpdateWeight);
474 virtual T GetUpdateWeight()
const;
476 virtual const CResult SetFigureIoUThreshold(T tIoUThreshold);
477 virtual T GetFigureIoUThreshold()
const;
479 DeclareGetClassType();
480 SupportToDuplicateObject(CTensor, *
this);
483 virtual const CResult RecalcPitchByRank();
485 virtual const CResult InternalCreate(
const std::vector<int64_t>& vctBatchIndices,
const Base::CFLImage* pFli,
bool bNormalize, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
486 virtual const CResult InternalCreate(
const std::vector<int64_t>& vctBatchIndices,
const Base::CFLImage* pFli,
const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises,
bool bROIExtraction =
false,
bool bNormalize =
true,
const Base::CMultiVar<T>& mvBlankColor = 0., ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex =
nullptr,
bool* pBAbort =
nullptr);
489 std::vector<int64_t>& m_vctPitchByRank;
490 std::vector<int64_t>& m_vctPitchByRankAsc;
493 CCuda_Tensor_Cudnn<T>* m_pCudnn;
498 int64_t m_i64TotalElement;
499 int64_t m_i64TotalSizeByte;
501 Foundation::CFLFigureArray* m_pFlfaLabels;
502 Foundation::CFLFigureArray* m_pFlfaOrgBoundaryLabels;
503 Foundation::CFLFigureArray* m_pFlfaObjectRegions;
504 bool m_bClearFigures;
507 bool m_bObjectAugmentationRegionMode;
508 bool m_bRectCropMode;
511 bool m_bAutoDestroyCPUMemory;
512 bool m_bAutoDestroyDeviceMemory;
513 bool m_bMemorySavingMode;
514 T m_tFigureIoUThreshold;
516 Base::CFLImage m_fliThreadBuffer;
519 CCuda_ComputationalGraphMatMul_Cublas<T>* m_pCublas;
522 std::vector<Foundation::CAlgorithmFeatureBase*>* m_pVctPreprocessingAlgorithm;
526 DeclareGetSignletonObject(CTensor);
529 #define CCGFTensor(...) (*(new CTensor<float>(__VA_ARGS__)))
530 #define CCGDTensor(...) (*(new CTensor<double>(__VA_ARGS__)))
532 typedef CTensor<float> CTensorF;
533 typedef CTensor<double> CTensorD;
Definition AlgorithmAIBase.h:18
@ Dot
Dot style.
Definition DefinitionsFigure.h:3293
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
Definition DefinitionsGUIView3D.h:3531
@ Flip
Flip based on the center of gravity in Figure.
Definition DefinitionsGUI.h:9758
@ Save
Save file.
Definition DefinitionsGUI.h:303
@ Log
CGUIPaneLog 타입 Pane.
Definition DefinitionsGUI.h:10841
@ Sort
Sort the order of Figure Array or Multiple Figures.
Definition DefinitionsGUI.h:9414
@ Rotate90
Rotate figure 90 degree.
Definition DefinitionsGUI.h:5396
@ Clear
Clear all the figure objects.
Definition DefinitionsGUI.h:5083
@ Add
Add operation (adds the newly selected elements to the existing selection).
Definition DefinitionsGUIView3D.h:2905
@ Append
Load and append.
Definition DefinitionsGUI.h:58
@ Load
Default Load.
Definition DefinitionsGUI.h:50
@ Floor
Definition DefinitionsImgProcBase.h:122
@ Maximum
Maximum-coordinate alias of FarTopRight.
Definition DefinitionsSpacePlanning.h:580
@ Minimum
Minimum-coordinate alias of NearBottomLeft.
Definition DefinitionsSpacePlanning.h:564