FLImaging 6.8.21.2
TensorImages.h
1#pragma once
2
3#if _MSC_VER >= 1900 && defined(_M_X64)
4
5#include "Tensor.h"
6#include "DefinitionsAI.h"
7#include <set>
8
9namespace FLImaging
10{
11 namespace AI
12 {
13 enum EImageType
14 {
15 EImageType_FLIF = 0,
16 EImageType_BMP,
17 EImageType_PNG,
18 EImageType_JPEG,
19 EImageType_TIFF,
20 EImageType_DB,
21 EImageType_Error,
22 };
23
24 class FL_EXPORT CValidationImageExtractor;
25 class CLabelData;
26
27 template<typename T>
28 class CClassEqualizerBase;
29
30 template<typename T>
31 class CClassEqualizerForTensorImages;
32
33 template<typename T>
34 class CClassEqualizerForTensorImagesWithMaskLabels;
35
36 template <typename T>
37 class FL_EXPORT CTensorImages : public CTensor<T>
38 {
39 public:
40 enum ETilingMode
41 {
42 ETilingMode_NoTiling_NoFit = 0,
43 ETilingMode_NoTiling_Fit,
44 ETilingMode_SingleAxisTiling_ProportionalFit,
45 ETilingMode_BothAxesTiling_NoFit,
46 };
47
48 public:
49 CTensorImages();
50
51 CTensorImages(const CTensorImages<T>& tsr, bool bDeepCopy = true);
52
53 virtual ~CTensorImages();
54
55 virtual const CResult GetBinaryData(Base::CFLData& fldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
56 virtual const CResult GetBinaryData(Base::CFLData* pFldBinary, bool bSuperClass = false, int32_t i32Version = -1, bool bDumpMode = false) const override;
57
58 virtual const CResult SetBinaryData(const Base::CFLData& fldBinary, int64_t* pI64Offset = nullptr) override;
59 virtual const CResult SetBinaryData(const Base::CFLData* pFldBinary, int64_t* pI64Offset = nullptr) override;
60
61 virtual const CResult Create(const std::vector<int64_t>& vctShape, bool bOrderByDesc = true, bool bCudaAllocation = true) override;
62 virtual const CResult Create(const std::initializer_list<int64_t>& ilShape, bool bOrderByDesc = true, bool bCudaAllocation = true) override;
63 virtual const CResult Create(const Base::CFLImage& fli, bool bNormalize = true, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
64 virtual const CResult Create(const Base::CFLImage* pFli, bool bNormalize = true, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
65 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, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
66 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, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
67 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, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
68 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, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool* pBAbort = nullptr);
69
70
71 virtual const CResult Create(const wchar_t* pWcFilePath, const std::vector<int64_t>& vctNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., bool bRecursive = false, ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit);
72 virtual const CResult Create(const wchar_t* pWcFilePath, const std::initializer_list<int64_t>& ilNewSize, EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises, bool bROIExtraction = false, bool bNormalize = true, const Base::CMultiVar<T>& mvBlankColor = 0., bool bRecursive = false, ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear, ETilingMode eTilingMode = ETilingMode_NoTiling_Fit);
73
74 virtual const CResult Assign(const CTensor<T>& tsr, bool bDeepCopy = true) override;
75 virtual const CResult Assign(const CTensor<T>* pTsr, bool bDeepCopy = true) override;
76
77 virtual const CResult Assign(const CTensorImages<T>& tsr, bool bDeepCopy = true);
78 virtual const CResult Assign(const CTensorImages<T>* pTsr, bool bDeepCopy = true);
79
80 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, ETilingMode eTIlingMode = ETilingMode_NoTiling_Fit,std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool *pBAbort = nullptr);
81 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, ETilingMode eTIlingMode = ETilingMode_NoTiling_Fit, std::atomic<int32_t>* pI32CurrentPreparingTensorIndex = nullptr, bool *pBAbort = nullptr);
82
83 virtual const CResult Append(const wchar_t* pWcFilePath, bool bRecursive = false);
84
85 virtual const CResult Clear() override;
86
87 virtual const CResult SetSourceImage(const Base::CFLImage& fliSourceImage);
88 virtual const CResult SetSourceImage(const Base::CFLImage* pFliSourceImage);
89 virtual const Base::CFLImage* GetSourceImage() const;
90
91 virtual const CResult SetSourceImagePath(const wchar_t* pWcsSourceImagePath);
92 virtual const wchar_t* GetSourceImagePath() const;
93
94 virtual const CResult EnableRecursiveLoad(bool bRecursive);
95 virtual bool IsRecursiveLoadEnabled() const;
96
97 virtual const CResult SetTensorShape(const std::vector<int64_t>& vctTensorShape);
98 virtual const CResult SetTensorShape(const std::initializer_list<int64_t>& ilTensorShape);
99 virtual const std::vector<int64_t> GetTensorShape() const;
100
101 virtual const CResult SetResizeMethod(EResizeMethod eResizeMethod = EResizeMethod_ScaleAllAxises);
102 virtual EResizeMethod GetResizeMethod() const;
103
104 virtual const CResult EnableROIExtraction(bool bROIExtraction = false);
105 virtual bool IsROIExtractionEnabled() const;
106
107 virtual const CResult EnableNormalization(bool bNormalize = true);
108 virtual bool IsNormalizationEnabled() const;
109
110 virtual const CResult SetBlankColor(const Base::CMultiVar<T>& mvBlankColor = 0.);
111 virtual const Base::CMultiVar<T> GetBlankColor() const;
112
113 virtual const CResult SetInterpolationMethod(ImageProcessing::EInterpolationMethod eInterpolationMethod = ImageProcessing::EInterpolationMethod_Bilinear);
114 virtual ImageProcessing::EInterpolationMethod GetInterpolationMethod() const;
115
116 virtual const CResult Initialize();
117
118 virtual const CResult EnableTrainingMode(bool bMode, bool bRecursively = true) override;
119
120 virtual const CResult ClearBatchFromMemory();
121 virtual const CResult ClearBatchIndices();
122 virtual const CResult SelectBatchIndices(const std::vector<int64_t>& vctBatchIndices);
123 virtual const CResult SetBatchParameters(const CTensor<T>& tsr) override;
124 virtual const CResult SetBatchParameters(const CTensorImages<T>& tsr);
125
126 virtual CTensorImages<T>& Evaluate() override;
127 virtual CTensorImages<T>& Forward() override;
128 virtual CComputationalBase<T>* Clone() const override;
129
130 virtual const CResult Swap(CComputationalBase<T>& cbSwap) override;
131
132 virtual int64_t GetBatchSize() const;
133
134 virtual const CResult LoadTensor(const std::vector<int64_t>& vctBatchIndices);
135 virtual const CResult LoadTensor(const std::initializer_list<int64_t>& ilBatchIndices);
136
137 virtual int64_t GetTensorImageTotalROIPageCount() const;
138 virtual int64_t GetTensorImageTotalPageCount() const;
139 virtual bool IsCreatedWithImagePath() const;
140
141 virtual int32_t GetResultLabelCategoryCount() const;
142 virtual const CResult GetResultLabelCategoryClassNum(int64_t i64Index, int32_t& i32ClassNum) const;
143 virtual const CResult GetResultLabelCategoryClassNum(int64_t i64Index, int32_t* pI32ClassNum) const;
144 virtual const CResult GetResultLabelCategoryClassNames(int64_t i64Index, Base::CFLArray<Base::CFLString<wchar_t>>& flaClassNames) const;
145 virtual const CResult GetResultLabelCategoryClassNames(int64_t i64Index, Base::CFLArray<Base::CFLString<wchar_t>>* pFlaClassNames) const;
146
147 virtual const CResult ConvertClassNumToLabel(bool bIncludingClassName = true);
148 virtual const CResult ConvertLabelToClassNum(bool bIncludingClassName = true);
149
150 virtual const std::vector<int32_t>& GetLabelIndices(int64_t i64Index) const;
151
152 virtual const CResult AddDefaultClass(int32_t i32ClassNum, const Base::CFLString<wchar_t>& flsClassName);
153 virtual const CResult ClearDefaultClass();
154 virtual const CResult RemoveDefaultClass(int32_t i32ClassNum);
155 virtual const CResult RemoveDefaultClass(const Base::CFLString<wchar_t>& flsClassName);
156
157 virtual const Base::CFLArray<int32_t> GetDefaultClassNum() const;
158 virtual const Base::CFLArray<Base::CFLString<wchar_t>> GetDefaultClassName() const;
159
160 virtual int64_t GetTensorImageTotalLabelCount() const;
161
162 virtual const CResult EnableLog(bool bLog = true);
163 virtual bool IsLogEnabled() const;
164
165 virtual const CResult SetClassNames(const Base::CFLArray<Base::CFLString<wchar_t>>& flaClassNames);
166 virtual const CResult SetClassNames(const Base::CFLArray<Base::CFLString<wchar_t>>* pFlaClassNames);
167 virtual const CResult AddClassNames(const Base::CFLString<wchar_t>& flsClassName);
168
169 virtual const Base::CFLArray<Base::CFLString<wchar_t>> GetClassNames() const;
170 virtual const CResult ClearClassNames();
171
172 virtual const CResult SetTilingMode(ETilingMode eImageTilingMode = ETilingMode_NoTiling_Fit);
173 virtual ETilingMode GetTilingMode() const;
174
175 static EImageType GetExtenstion(const wchar_t* pWcsImagePath);
176 static const CResult ExtractClassNumClassName(const Base::CFLString<wchar_t>& flsFigureName, Base::CFLString<wchar_t>& flsClassNum, Base::CFLString<wchar_t>& flsClassName);
177
178 virtual const CResult EnableNoLabelMode(bool bNoLabelMode = false);
179 virtual bool IsNoLabelModeEnable();
180
181 virtual const CResult SetTilingOverlapRatio(T tTilingOverlapRatio);
182 virtual T GetTilingOverlapRatio() const;
183
184 virtual const CResult GetTilingInitializedData(std::vector<int64_t>& vctResultSliceSize, std::vector<int64_t>& vctResultLastSlicePositionX, std::vector<int64_t>& vctResultLastSlicePositionY, std::vector<int64_t>& vctResultSliceRowCount, std::vector<int64_t>& vctResultSliceColCount);
185
186 DeclareGetClassType();
187 SupportToDuplicateObject(CTensorImages, *this);
188 protected:
189 virtual const CResult ApplyDefaultLabels();
190 virtual const CResult DecodeLabels(const wchar_t* pWcsImagePath, Base::CFLImage* pFli = nullptr);
191 virtual const CResult ExtractLabelInfo(const wchar_t* pWcsName, int32_t i32PageIndex, int32_t i32FigureIndex);
192 virtual const CResult AddLabel(const wchar_t* pWcsName, Foundation::CFLFigure* pFlfLabel, bool bFile = false);
193 virtual const CResult AddLabel(std::pair<int32_t, Base::CFLString<wchar_t>>& prLabelInfo);
194 virtual int32_t GetClassNameOffset(int32_t i32ClassNum, Base::CFLString<wchar_t>& flsName, bool bRemoveSeparator = true) const;
195
196 virtual bool IsValidLabel(const wchar_t* pWcsLabel) const;
197 virtual const CResult RemoveExtension(const wchar_t* pWcsName, Base::CFLString<wchar_t>& flsNewName);
198 virtual const CResult MakeDistribution();
199
200 virtual const CResult IsValidImageFormat(EImageType eImageType) const;
201
202 virtual const CResult InitializeTilingData(int64_t i64ModelSize, bool bClear = true);
203 virtual const CResult ExtractTilingRegion(const std::vector<int64_t>& vctBatchIndices, const Base::CFLImage* pFliSrc, Base::CFLImage* pFliDst);
204
205 protected:
206 Foundation::CFLFigureArray m_flfaLabels;
207 CLabelData& m_ldLabels;
208
209 std::vector<Base::CFLString<wchar_t>>& m_vctFileList;
210 std::vector<int64_t>& m_vctPageCount;
211 std::vector<int64_t>& m_vctCumulativePageCount;
212 std::vector<int64_t>& m_vctBatchIndices;
213
214 std::vector<int64_t>& m_vctImageSize;
215
216 EResizeMethod m_eResizeMethod;
217 bool m_bROIExtraction;
218 bool m_bNormalize;
219 Base::CMultiVar<T> m_mvBlankColor;
220 ImageProcessing::EInterpolationMethod m_eInterpolationMethod;
221
222 Base::CFLArray<int32_t> m_flaDefaultClassNum;
223 Base::CFLArray<Base::CFLString<wchar_t>> m_flaDefaultClassName;
224
225 std::vector<std::tuple<int32_t, int32_t>>& m_vctPage;
226 std::vector<std::vector<std::pair<int32_t, Base::CFLString<wchar_t>>>>& m_vct2LabelInfo;
227
228 int64_t m_i64TotalPageCount;
229 int64_t m_i64TotalLabelCount;
230 bool m_bCreatedWithImagePath;
231 bool m_bLog;
232 bool m_bClearTensor;
233 bool m_bClearFigures;
234 bool m_bClearLabels;
235 bool m_bClearParameters;
236 bool m_bClearClassName;
237
238 // delayed load
239 Base::CFLImage* m_pFliSourceImage;
240 const wchar_t* m_pWcsSourceImagePath;
241 bool m_bRecursive;
242
243 std::vector<int64_t>& m_vctTensorShape;
244 int64_t m_i64BatchSize;
245
246 //
247 Base::CFLArray<Base::CFLString<wchar_t>> m_flaClassNames;
248
249 // tiling mode
250 ETilingMode m_eImageTilingMode;
251 std::vector<int64_t>& m_vctSliceSize;
252 std::vector<int64_t>& m_vctLastSlicePositionX;
253 std::vector<int64_t>& m_vctLastSlicePositionY;
254 std::vector<int64_t>& m_vctSliceRowCount;
255 std::vector<int64_t>& m_vctSliceColCount;
256 std::vector<int64_t>& m_vctAccumulateSliceCount;
257 std::vector<std::pair<int64_t, int64_t>>& m_vctFileSize;
258 T m_tTilingOverlapRatio;
259
260 bool m_bNoLabelMode;
261
262 private:
263 friend class CValidationImageExtractor;
264
265 template<typename T>
266 friend class CClassEqualizerBase;
267
268 template<typename T>
269 friend class CClassEqualizerForTensorImages;
270
271 template<typename T>
272 friend class CClassEqualizerForTensorImagesWithMaskLabels;
273
274 public:
275 DeclareGetSignletonObject(CTensorImages);
276 };
277
278 #define CCGFTensorImages(...) (*(new CTensorImages<float>(__VA_ARGS__)))
279 #define CCGDTensorImages(...) (*(new CTensorImages<double>(__VA_ARGS__)))
280
281 typedef CTensorImages<float> CTensorImagesF;
282 typedef CTensorImages<double> CTensorImagesD;
283 }
284}
285
286#endif
EResizeMethod
Definition DefinitionsImgProcBase.h:213
@ Assign
Set the value of CGUIPropertyItemView3DFigure to the specified figure.
Definition DefinitionsGUIView3D.h:2798
@ Clear
Clear all the figure objects.
Definition DefinitionsGUI.h:2092
@ Append
Load and append.
Definition DefinitionsGUI.h:58
ETilingMode
Definition DefinitionsAIModel.h:157