You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

vision.cc 42 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008
  1. /**
  2. * Copyright 2020-2021 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "minddata/dataset/include/dataset/vision.h"
  17. #ifdef ENABLE_ACL
  18. #include "minddata/dataset/include/dataset/vision_ascend.h"
  19. #include "minddata/dataset/kernels/ir/vision/ascend_vision_ir.h"
  20. #endif
  21. #include "minddata/dataset/include/dataset/transforms.h"
  22. #include "minddata/dataset/kernels/ir/vision/adjust_gamma_ir.h"
  23. #include "minddata/dataset/kernels/ir/vision/affine_ir.h"
  24. #include "minddata/dataset/kernels/ir/vision/auto_contrast_ir.h"
  25. #include "minddata/dataset/kernels/ir/vision/bounding_box_augment_ir.h"
  26. #include "minddata/dataset/kernels/ir/vision/center_crop_ir.h"
  27. #include "minddata/dataset/kernels/ir/vision/convert_color_ir.h"
  28. #include "minddata/dataset/kernels/ir/vision/crop_ir.h"
  29. #include "minddata/dataset/kernels/ir/vision/cutmix_batch_ir.h"
  30. #include "minddata/dataset/kernels/ir/vision/cutout_ir.h"
  31. #include "minddata/dataset/kernels/ir/vision/decode_ir.h"
  32. #include "minddata/dataset/kernels/ir/vision/equalize_ir.h"
  33. #include "minddata/dataset/kernels/ir/vision/gaussian_blur_ir.h"
  34. #include "minddata/dataset/kernels/ir/vision/horizontal_flip_ir.h"
  35. #include "minddata/dataset/kernels/ir/vision/hwc_to_chw_ir.h"
  36. #include "minddata/dataset/kernels/ir/vision/invert_ir.h"
  37. #include "minddata/dataset/kernels/ir/vision/mixup_batch_ir.h"
  38. #include "minddata/dataset/kernels/ir/vision/normalize_ir.h"
  39. #include "minddata/dataset/kernels/ir/vision/normalize_pad_ir.h"
  40. #include "minddata/dataset/kernels/ir/vision/pad_ir.h"
  41. #include "minddata/dataset/kernels/ir/vision/random_affine_ir.h"
  42. #include "minddata/dataset/kernels/ir/vision/random_color_adjust_ir.h"
  43. #include "minddata/dataset/kernels/ir/vision/random_color_ir.h"
  44. #include "minddata/dataset/kernels/ir/vision/random_crop_decode_resize_ir.h"
  45. #include "minddata/dataset/kernels/ir/vision/random_crop_ir.h"
  46. #include "minddata/dataset/kernels/ir/vision/random_crop_with_bbox_ir.h"
  47. #include "minddata/dataset/kernels/ir/vision/random_horizontal_flip_ir.h"
  48. #include "minddata/dataset/kernels/ir/vision/random_horizontal_flip_with_bbox_ir.h"
  49. #include "minddata/dataset/kernels/ir/vision/random_posterize_ir.h"
  50. #include "minddata/dataset/kernels/ir/vision/random_resized_crop_ir.h"
  51. #include "minddata/dataset/kernels/ir/vision/random_resized_crop_with_bbox_ir.h"
  52. #include "minddata/dataset/kernels/ir/vision/random_resize_ir.h"
  53. #include "minddata/dataset/kernels/ir/vision/random_resize_with_bbox_ir.h"
  54. #include "minddata/dataset/kernels/ir/vision/random_rotation_ir.h"
  55. #include "minddata/dataset/kernels/ir/vision/random_select_subpolicy_ir.h"
  56. #include "minddata/dataset/kernels/ir/vision/random_sharpness_ir.h"
  57. #include "minddata/dataset/kernels/ir/vision/random_solarize_ir.h"
  58. #include "minddata/dataset/kernels/ir/vision/random_vertical_flip_ir.h"
  59. #include "minddata/dataset/kernels/ir/vision/random_vertical_flip_with_bbox_ir.h"
  60. #include "minddata/dataset/kernels/ir/vision/rescale_ir.h"
  61. #include "minddata/dataset/kernels/ir/vision/resize_ir.h"
  62. #include "minddata/dataset/kernels/ir/vision/resize_preserve_ar_ir.h"
  63. #include "minddata/dataset/kernels/ir/vision/resize_with_bbox_ir.h"
  64. #include "minddata/dataset/kernels/ir/vision/rgb_to_bgr_ir.h"
  65. #include "minddata/dataset/kernels/ir/vision/rgb_to_gray_ir.h"
  66. #include "minddata/dataset/kernels/ir/vision/rgba_to_bgr_ir.h"
  67. #include "minddata/dataset/kernels/ir/vision/rgba_to_rgb_ir.h"
  68. #include "minddata/dataset/kernels/ir/vision/rotate_ir.h"
  69. #include "minddata/dataset/kernels/ir/vision/slice_patches_ir.h"
  70. #include "minddata/dataset/kernels/ir/vision/softdvpp_decode_random_crop_resize_jpeg_ir.h"
  71. #include "minddata/dataset/kernels/ir/vision/softdvpp_decode_resize_jpeg_ir.h"
  72. #include "minddata/dataset/kernels/ir/vision/swap_red_blue_ir.h"
  73. #include "minddata/dataset/kernels/ir/vision/uniform_aug_ir.h"
  74. #include "minddata/dataset/kernels/ir/vision/vertical_flip_ir.h"
  75. #ifndef ENABLE_ANDROID
  76. #include "utils/log_adapter.h"
  77. #else
  78. #include "mindspore/lite/src/common/log_adapter.h"
  79. #endif
  80. #include "minddata/dataset/kernels/ir/validators.h"
  81. // Kernel image headers (in alphabetical order)
  82. namespace mindspore {
  83. namespace dataset {
  84. // Transform operations for computer vision.
  85. namespace vision {
  86. // CONSTRUCTORS FOR API CLASSES TO CREATE VISION TENSOR TRANSFORM OPERATIONS
  87. // (In alphabetical order)
  88. // Affine Transform Operation.
  89. struct Affine::Data {
  90. Data(float_t degrees, const std::vector<float> &translation, float scale, const std::vector<float> &shear,
  91. InterpolationMode interpolation, const std::vector<uint8_t> &fill_value)
  92. : degrees_(degrees),
  93. translation_(translation),
  94. scale_(scale),
  95. shear_(shear),
  96. interpolation_(interpolation),
  97. fill_value_(fill_value) {}
  98. float degrees_;
  99. std::vector<float> translation_;
  100. float scale_;
  101. std::vector<float> shear_;
  102. InterpolationMode interpolation_;
  103. std::vector<uint8_t> fill_value_;
  104. };
  105. Affine::Affine(float_t degrees, const std::vector<float> &translation, float scale, const std::vector<float> &shear,
  106. InterpolationMode interpolation, const std::vector<uint8_t> &fill_value)
  107. : data_(std::make_shared<Data>(degrees, translation, scale, shear, interpolation, fill_value)) {}
  108. std::shared_ptr<TensorOperation> Affine::Parse() {
  109. return std::make_shared<AffineOperation>(data_->degrees_, data_->translation_, data_->scale_, data_->shear_,
  110. data_->interpolation_, data_->fill_value_);
  111. }
  112. #ifndef ENABLE_ANDROID
  113. // AdjustGamma Transform Operation.
  114. struct AdjustGamma::Data {
  115. Data(float gamma, float gain) : gamma_(gamma), gain_(gain) {}
  116. float gamma_;
  117. float gain_;
  118. };
  119. AdjustGamma::AdjustGamma(float gamma, float gain) : data_(std::make_shared<Data>(gamma, gain)) {}
  120. std::shared_ptr<TensorOperation> AdjustGamma::Parse() {
  121. return std::make_shared<AdjustGammaOperation>(data_->gamma_, data_->gain_);
  122. }
  123. // AutoContrast Transform Operation.
  124. struct AutoContrast::Data {
  125. Data(float cutoff, const std::vector<uint32_t> &ignore) : cutoff_(cutoff), ignore_(ignore) {}
  126. float cutoff_;
  127. std::vector<uint32_t> ignore_;
  128. };
  129. AutoContrast::AutoContrast(float cutoff, std::vector<uint32_t> ignore)
  130. : data_(std::make_shared<Data>(cutoff, ignore)) {}
  131. std::shared_ptr<TensorOperation> AutoContrast::Parse() {
  132. return std::make_shared<AutoContrastOperation>(data_->cutoff_, data_->ignore_);
  133. }
  134. // BoundingBoxAugment Transform Operation.
  135. struct BoundingBoxAugment::Data {
  136. std::shared_ptr<TensorOperation> transform_;
  137. float ratio_;
  138. };
  139. BoundingBoxAugment::BoundingBoxAugment(TensorTransform *transform, float ratio) : data_(std::make_shared<Data>()) {
  140. data_->transform_ = transform ? transform->Parse() : nullptr;
  141. data_->ratio_ = ratio;
  142. }
  143. BoundingBoxAugment::BoundingBoxAugment(const std::shared_ptr<TensorTransform> &transform, float ratio)
  144. : data_(std::make_shared<Data>()) {
  145. data_->transform_ = transform ? transform->Parse() : nullptr;
  146. data_->ratio_ = ratio;
  147. }
  148. BoundingBoxAugment::BoundingBoxAugment(const std::reference_wrapper<TensorTransform> transform, float ratio)
  149. : data_(std::make_shared<Data>()) {
  150. data_->transform_ = transform.get().Parse();
  151. data_->ratio_ = ratio;
  152. }
  153. std::shared_ptr<TensorOperation> BoundingBoxAugment::Parse() {
  154. return std::make_shared<BoundingBoxAugmentOperation>(data_->transform_, data_->ratio_);
  155. }
  156. #endif // not ENABLE_ANDROID
  157. // CenterCrop Transform Operation.
  158. struct CenterCrop::Data {
  159. explicit Data(const std::vector<int32_t> &size) : size_(size) {}
  160. std::vector<int32_t> size_;
  161. };
  162. CenterCrop::CenterCrop(std::vector<int32_t> size) : data_(std::make_shared<Data>(size)) {}
  163. std::shared_ptr<TensorOperation> CenterCrop::Parse() { return std::make_shared<CenterCropOperation>(data_->size_); }
  164. std::shared_ptr<TensorOperation> CenterCrop::Parse(const MapTargetDevice &env) {
  165. if (env == MapTargetDevice::kAscend310) {
  166. #ifdef ENABLE_ACL
  167. std::vector<uint32_t> usize_;
  168. usize_.reserve(data_->size_.size());
  169. std::transform(data_->size_.begin(), data_->size_.end(), std::back_inserter(usize_),
  170. [](int32_t i) { return (uint32_t)i; });
  171. return std::make_shared<DvppCropJpegOperation>(usize_);
  172. #endif // ENABLE_ACL
  173. }
  174. return std::make_shared<CenterCropOperation>(data_->size_);
  175. }
  176. #ifndef ENABLE_ANDROID
  177. // ConvertColor Transform Operation.
  178. struct ConvertColor::Data {
  179. explicit Data(ConvertMode convert_mode) : convert_mode_(convert_mode) {}
  180. ConvertMode convert_mode_;
  181. };
  182. ConvertColor::ConvertColor(ConvertMode convert_mode) : data_(std::make_shared<Data>(convert_mode)) {}
  183. std::shared_ptr<TensorOperation> ConvertColor::Parse() {
  184. return std::make_shared<ConvertColorOperation>(data_->convert_mode_);
  185. }
  186. #endif // not ENABLE_ANDROID
  187. // Crop Transform Operation.
  188. struct Crop::Data {
  189. Data(const std::vector<int32_t> &coordinates, const std::vector<int32_t> &size)
  190. : coordinates_(coordinates), size_(size) {}
  191. std::vector<int32_t> coordinates_;
  192. std::vector<int32_t> size_;
  193. };
  194. Crop::Crop(std::vector<int32_t> coordinates, std::vector<int32_t> size)
  195. : data_(std::make_shared<Data>(coordinates, size)) {}
  196. std::shared_ptr<TensorOperation> Crop::Parse() {
  197. return std::make_shared<CropOperation>(data_->coordinates_, data_->size_);
  198. }
  199. #ifndef ENABLE_ANDROID
  200. // CutMixBatch Transform Operation.
  201. struct CutMixBatch::Data {
  202. Data(ImageBatchFormat image_batch_format, float alpha, float prob)
  203. : image_batch_format_(image_batch_format), alpha_(alpha), prob_(prob) {}
  204. float alpha_;
  205. float prob_;
  206. ImageBatchFormat image_batch_format_;
  207. };
  208. CutMixBatch::CutMixBatch(ImageBatchFormat image_batch_format, float alpha, float prob)
  209. : data_(std::make_shared<Data>(image_batch_format, alpha, prob)) {}
  210. std::shared_ptr<TensorOperation> CutMixBatch::Parse() {
  211. return std::make_shared<CutMixBatchOperation>(data_->image_batch_format_, data_->alpha_, data_->prob_);
  212. }
  213. // CutOutOp.
  214. struct CutOut::Data {
  215. Data(int32_t length, int32_t num_patches) : length_(length), num_patches_(num_patches) {}
  216. int32_t length_;
  217. int32_t num_patches_;
  218. };
  219. CutOut::CutOut(int32_t length, int32_t num_patches) : data_(std::make_shared<Data>(length, num_patches)) {}
  220. std::shared_ptr<TensorOperation> CutOut::Parse() {
  221. return std::make_shared<CutOutOperation>(data_->length_, data_->num_patches_);
  222. }
  223. #endif // not ENABLE_ANDROID
  224. // Decode Transform Operation.
  225. struct Decode::Data {
  226. explicit Data(bool rgb) : rgb_(rgb) {}
  227. bool rgb_;
  228. };
  229. Decode::Decode(bool rgb) : data_(std::make_shared<Data>(rgb)) {}
  230. std::shared_ptr<TensorOperation> Decode::Parse() { return std::make_shared<DecodeOperation>(data_->rgb_); }
  231. std::shared_ptr<TensorOperation> Decode::Parse(const MapTargetDevice &env) {
  232. if (env == MapTargetDevice::kAscend310) {
  233. #ifdef ENABLE_ACL
  234. return std::make_shared<DvppDecodeJpegOperation>();
  235. #endif // ENABLE_ACL
  236. }
  237. return std::make_shared<DecodeOperation>(data_->rgb_);
  238. }
  239. #ifdef ENABLE_ACL
  240. // DvppDecodeResize Transform Operation.
  241. struct DvppDecodeResizeJpeg::Data {
  242. explicit Data(const std::vector<uint32_t> &resize) : resize_(resize) {}
  243. std::vector<uint32_t> resize_;
  244. };
  245. DvppDecodeResizeJpeg::DvppDecodeResizeJpeg(std::vector<uint32_t> resize) : data_(std::make_shared<Data>(resize)) {}
  246. std::shared_ptr<TensorOperation> DvppDecodeResizeJpeg::Parse() {
  247. return std::make_shared<DvppDecodeResizeOperation>(data_->resize_);
  248. }
  249. std::shared_ptr<TensorOperation> DvppDecodeResizeJpeg::Parse(const MapTargetDevice &env) {
  250. return std::make_shared<DvppDecodeResizeOperation>(data_->resize_);
  251. }
  252. // DvppDecodeResizeCrop Transform Operation.
  253. struct DvppDecodeResizeCropJpeg::Data {
  254. Data(const std::vector<uint32_t> &crop, const std::vector<uint32_t> &resize) : crop_(crop), resize_(resize) {}
  255. std::vector<uint32_t> crop_;
  256. std::vector<uint32_t> resize_;
  257. };
  258. DvppDecodeResizeCropJpeg::DvppDecodeResizeCropJpeg(std::vector<uint32_t> crop, std::vector<uint32_t> resize)
  259. : data_(std::make_shared<Data>(crop, resize)) {}
  260. std::shared_ptr<TensorOperation> DvppDecodeResizeCropJpeg::Parse() {
  261. return std::make_shared<DvppDecodeResizeCropOperation>(data_->crop_, data_->resize_);
  262. }
  263. std::shared_ptr<TensorOperation> DvppDecodeResizeCropJpeg::Parse(const MapTargetDevice &env) {
  264. return std::make_shared<DvppDecodeResizeCropOperation>(data_->crop_, data_->resize_);
  265. }
  266. // DvppDecodePng Transform Operation.
  267. DvppDecodePng::DvppDecodePng() {}
  268. std::shared_ptr<TensorOperation> DvppDecodePng::Parse() { return std::make_shared<DvppDecodePngOperation>(); }
  269. std::shared_ptr<TensorOperation> DvppDecodePng::Parse(const MapTargetDevice &env) {
  270. return std::make_shared<DvppDecodePngOperation>();
  271. }
  272. #endif // ENABLE_ACL
  273. #ifndef ENABLE_ANDROID
  274. // Equalize Transform Operation.
  275. Equalize::Equalize() {}
  276. std::shared_ptr<TensorOperation> Equalize::Parse() { return std::make_shared<EqualizeOperation>(); }
  277. #endif // not ENABLE_ANDROID
  278. // GaussianBlur Transform Operation.
  279. struct GaussianBlur::Data {
  280. Data(const std::vector<int32_t> &kernel_size, const std::vector<float> &sigma)
  281. : kernel_size_(kernel_size), sigma_(sigma) {}
  282. std::vector<int32_t> kernel_size_;
  283. std::vector<float> sigma_;
  284. };
  285. GaussianBlur::GaussianBlur(const std::vector<int32_t> &kernel_size, const std::vector<float> &sigma)
  286. : data_(std::make_shared<Data>(kernel_size, sigma)) {}
  287. std::shared_ptr<TensorOperation> GaussianBlur::Parse() {
  288. return std::make_shared<GaussianBlurOperation>(data_->kernel_size_, data_->sigma_);
  289. }
  290. #ifndef ENABLE_ANDROID
  291. // HorizontalFlip Transform Operation.
  292. HorizontalFlip::HorizontalFlip() {}
  293. std::shared_ptr<TensorOperation> HorizontalFlip::Parse() { return std::make_shared<HorizontalFlipOperation>(); }
  294. // HwcToChw Transform Operation.
  295. HWC2CHW::HWC2CHW() {}
  296. std::shared_ptr<TensorOperation> HWC2CHW::Parse() { return std::make_shared<HwcToChwOperation>(); }
  297. // Invert Transform Operation.
  298. Invert::Invert() {}
  299. std::shared_ptr<TensorOperation> Invert::Parse() { return std::make_shared<InvertOperation>(); }
  300. // MixUpBatch Transform Operation.
  301. struct MixUpBatch::Data {
  302. explicit Data(float alpha) : alpha_(alpha) {}
  303. float alpha_;
  304. };
  305. MixUpBatch::MixUpBatch(float alpha) : data_(std::make_shared<Data>(alpha)) {}
  306. std::shared_ptr<TensorOperation> MixUpBatch::Parse() { return std::make_shared<MixUpBatchOperation>(data_->alpha_); }
  307. #endif // not ENABLE_ANDROID
  308. // Normalize Transform Operation.
  309. struct Normalize::Data {
  310. Data(const std::vector<float> &mean, const std::vector<float> &std) : mean_(mean), std_(std) {}
  311. std::vector<float> mean_;
  312. std::vector<float> std_;
  313. };
  314. Normalize::Normalize(std::vector<float> mean, std::vector<float> std) : data_(std::make_shared<Data>(mean, std)) {}
  315. std::shared_ptr<TensorOperation> Normalize::Parse() {
  316. return std::make_shared<NormalizeOperation>(data_->mean_, data_->std_);
  317. }
  318. std::shared_ptr<TensorOperation> Normalize::Parse(const MapTargetDevice &env) {
  319. if (env == MapTargetDevice::kAscend310) {
  320. #ifdef ENABLE_ACL
  321. return std::make_shared<DvppNormalizeOperation>(data_->mean_, data_->std_);
  322. #endif // ENABLE_ACL
  323. }
  324. return std::make_shared<NormalizeOperation>(data_->mean_, data_->std_);
  325. }
  326. #ifndef ENABLE_ANDROID
  327. // NormalizePad Transform Operation.
  328. struct NormalizePad::Data {
  329. Data(const std::vector<float> &mean, const std::vector<float> &std, const std::string &dtype)
  330. : mean_(mean), std_(std), dtype_(dtype) {}
  331. std::vector<float> mean_;
  332. std::vector<float> std_;
  333. std::string dtype_;
  334. };
  335. NormalizePad::NormalizePad(const std::vector<float> &mean, const std::vector<float> &std,
  336. const std::vector<char> &dtype)
  337. : data_(std::make_shared<Data>(mean, std, CharToString(dtype))) {}
  338. std::shared_ptr<TensorOperation> NormalizePad::Parse() {
  339. return std::make_shared<NormalizePadOperation>(data_->mean_, data_->std_, data_->dtype_);
  340. }
  341. // Pad Transform Operation.
  342. struct Pad::Data {
  343. Data(const std::vector<int32_t> &padding, const std::vector<uint8_t> &fill_value, BorderType padding_mode)
  344. : padding_(padding), fill_value_(fill_value), padding_mode_(padding_mode) {}
  345. std::vector<int32_t> padding_;
  346. std::vector<uint8_t> fill_value_;
  347. BorderType padding_mode_;
  348. };
  349. Pad::Pad(std::vector<int32_t> padding, std::vector<uint8_t> fill_value, BorderType padding_mode)
  350. : data_(std::make_shared<Data>(padding, fill_value, padding_mode)) {}
  351. std::shared_ptr<TensorOperation> Pad::Parse() {
  352. return std::make_shared<PadOperation>(data_->padding_, data_->fill_value_, data_->padding_mode_);
  353. }
  354. #endif // not ENABLE_ANDROID
  355. // RandomAffine Transform Operation.
  356. struct RandomAffine::Data {
  357. Data(const std::vector<float_t> &degrees, const std::vector<float_t> &translate_range,
  358. const std::vector<float_t> &scale_range, const std::vector<float_t> &shear_ranges,
  359. InterpolationMode interpolation, const std::vector<uint8_t> &fill_value)
  360. : degrees_(degrees),
  361. translate_range_(translate_range),
  362. scale_range_(scale_range),
  363. shear_ranges_(shear_ranges),
  364. interpolation_(interpolation),
  365. fill_value_(fill_value) {}
  366. std::vector<float_t> degrees_; // min_degree, max_degree
  367. std::vector<float_t> translate_range_; // maximum x translation percentage, maximum y translation percentage
  368. std::vector<float_t> scale_range_; // min_scale, max_scale
  369. std::vector<float_t> shear_ranges_; // min_x_shear, max_x_shear, min_y_shear, max_y_shear
  370. InterpolationMode interpolation_;
  371. std::vector<uint8_t> fill_value_;
  372. };
  373. RandomAffine::RandomAffine(const std::vector<float_t> &degrees, const std::vector<float_t> &translate_range,
  374. const std::vector<float_t> &scale_range, const std::vector<float_t> &shear_ranges,
  375. InterpolationMode interpolation, const std::vector<uint8_t> &fill_value)
  376. : data_(std::make_shared<Data>(degrees, translate_range, scale_range, shear_ranges, interpolation, fill_value)) {}
  377. std::shared_ptr<TensorOperation> RandomAffine::Parse() {
  378. return std::make_shared<RandomAffineOperation>(data_->degrees_, data_->translate_range_, data_->scale_range_,
  379. data_->shear_ranges_, data_->interpolation_, data_->fill_value_);
  380. }
  381. #ifndef ENABLE_ANDROID
  382. // RandomColor Transform Operation.
  383. struct RandomColor::Data {
  384. Data(float t_lb, float t_ub) : t_lb_(t_lb), t_ub_(t_ub) {}
  385. float t_lb_;
  386. float t_ub_;
  387. };
  388. RandomColor::RandomColor(float t_lb, float t_ub) : data_(std::make_shared<Data>(t_lb, t_ub)) {}
  389. std::shared_ptr<TensorOperation> RandomColor::Parse() {
  390. return std::make_shared<RandomColorOperation>(data_->t_lb_, data_->t_ub_);
  391. }
  392. // RandomColorAdjust Transform Operation.
  393. struct RandomColorAdjust::Data {
  394. Data(const std::vector<float> &brightness, const std::vector<float> &contrast, const std::vector<float> &saturation,
  395. const std::vector<float> &hue)
  396. : brightness_(brightness), contrast_(contrast), saturation_(saturation), hue_(hue) {}
  397. std::vector<float> brightness_;
  398. std::vector<float> contrast_;
  399. std::vector<float> saturation_;
  400. std::vector<float> hue_;
  401. };
  402. RandomColorAdjust::RandomColorAdjust(std::vector<float> brightness, std::vector<float> contrast,
  403. std::vector<float> saturation, std::vector<float> hue)
  404. : data_(std::make_shared<Data>(brightness, contrast, saturation, hue)) {}
  405. std::shared_ptr<TensorOperation> RandomColorAdjust::Parse() {
  406. return std::make_shared<RandomColorAdjustOperation>(data_->brightness_, data_->contrast_, data_->saturation_,
  407. data_->hue_);
  408. }
  409. // RandomCrop Transform Operation.
  410. struct RandomCrop::Data {
  411. Data(const std::vector<int32_t> &size, const std::vector<int32_t> &padding, bool pad_if_needed,
  412. const std::vector<uint8_t> &fill_value, BorderType padding_mode)
  413. : size_(size),
  414. padding_(padding),
  415. pad_if_needed_(pad_if_needed),
  416. fill_value_(fill_value),
  417. padding_mode_(padding_mode) {}
  418. std::vector<int32_t> size_;
  419. std::vector<int32_t> padding_;
  420. bool pad_if_needed_;
  421. std::vector<uint8_t> fill_value_;
  422. BorderType padding_mode_;
  423. };
  424. RandomCrop::RandomCrop(std::vector<int32_t> size, std::vector<int32_t> padding, bool pad_if_needed,
  425. std::vector<uint8_t> fill_value, BorderType padding_mode)
  426. : data_(std::make_shared<Data>(size, padding, pad_if_needed, fill_value, padding_mode)) {}
  427. std::shared_ptr<TensorOperation> RandomCrop::Parse() {
  428. return std::make_shared<RandomCropOperation>(data_->size_, data_->padding_, data_->pad_if_needed_, data_->fill_value_,
  429. data_->padding_mode_);
  430. }
  431. // RandomCropDecodeResize Transform Operation.
  432. struct RandomCropDecodeResize::Data {
  433. Data(const std::vector<int32_t> &size, const std::vector<float> &scale, const std::vector<float> &ratio,
  434. InterpolationMode interpolation, int32_t max_attempts)
  435. : size_(size), scale_(scale), ratio_(ratio), interpolation_(interpolation), max_attempts_(max_attempts) {}
  436. std::vector<int32_t> size_;
  437. std::vector<float> scale_;
  438. std::vector<float> ratio_;
  439. InterpolationMode interpolation_;
  440. int32_t max_attempts_;
  441. };
  442. RandomCropDecodeResize::RandomCropDecodeResize(std::vector<int32_t> size, std::vector<float> scale,
  443. std::vector<float> ratio, InterpolationMode interpolation,
  444. int32_t max_attempts)
  445. : data_(std::make_shared<Data>(size, scale, ratio, interpolation, max_attempts)) {}
  446. std::shared_ptr<TensorOperation> RandomCropDecodeResize::Parse() {
  447. return std::make_shared<RandomCropDecodeResizeOperation>(data_->size_, data_->scale_, data_->ratio_,
  448. data_->interpolation_, data_->max_attempts_);
  449. }
  450. // RandomCropWithBBox Transform Operation.
  451. struct RandomCropWithBBox::Data {
  452. Data(const std::vector<int32_t> &size, const std::vector<int32_t> &padding, bool pad_if_needed,
  453. const std::vector<uint8_t> &fill_value, BorderType padding_mode)
  454. : size_(size),
  455. padding_(padding),
  456. pad_if_needed_(pad_if_needed),
  457. fill_value_(fill_value),
  458. padding_mode_(padding_mode) {}
  459. std::vector<int32_t> size_;
  460. std::vector<int32_t> padding_;
  461. bool pad_if_needed_;
  462. std::vector<uint8_t> fill_value_;
  463. BorderType padding_mode_;
  464. };
  465. RandomCropWithBBox::RandomCropWithBBox(std::vector<int32_t> size, std::vector<int32_t> padding, bool pad_if_needed,
  466. std::vector<uint8_t> fill_value, BorderType padding_mode)
  467. : data_(std::make_shared<Data>(size, padding, pad_if_needed, fill_value, padding_mode)) {}
  468. std::shared_ptr<TensorOperation> RandomCropWithBBox::Parse() {
  469. return std::make_shared<RandomCropWithBBoxOperation>(data_->size_, data_->padding_, data_->pad_if_needed_,
  470. data_->fill_value_, data_->padding_mode_);
  471. }
  472. // RandomHorizontalFlip.
  473. struct RandomHorizontalFlip::Data {
  474. explicit Data(float prob) : probability_(prob) {}
  475. float probability_;
  476. };
  477. RandomHorizontalFlip::RandomHorizontalFlip(float prob) : data_(std::make_shared<Data>(prob)) {}
  478. std::shared_ptr<TensorOperation> RandomHorizontalFlip::Parse() {
  479. return std::make_shared<RandomHorizontalFlipOperation>(data_->probability_);
  480. }
  481. // RandomHorizontalFlipWithBBox
  482. struct RandomHorizontalFlipWithBBox::Data {
  483. explicit Data(float prob) : probability_(prob) {}
  484. float probability_;
  485. };
  486. RandomHorizontalFlipWithBBox::RandomHorizontalFlipWithBBox(float prob) : data_(std::make_shared<Data>(prob)) {}
  487. std::shared_ptr<TensorOperation> RandomHorizontalFlipWithBBox::Parse() {
  488. return std::make_shared<RandomHorizontalFlipWithBBoxOperation>(data_->probability_);
  489. }
  490. // RandomPosterize Transform Operation.
  491. struct RandomPosterize::Data {
  492. explicit Data(const std::vector<uint8_t> &bit_range) : bit_range_(bit_range) {}
  493. std::vector<uint8_t> bit_range_;
  494. };
  495. RandomPosterize::RandomPosterize(const std::vector<uint8_t> &bit_range) : data_(std::make_shared<Data>(bit_range)) {}
  496. std::shared_ptr<TensorOperation> RandomPosterize::Parse() {
  497. return std::make_shared<RandomPosterizeOperation>(data_->bit_range_);
  498. }
  499. // RandomResize Transform Operation.
  500. struct RandomResize::Data {
  501. explicit Data(const std::vector<int32_t> &size) : size_(size) {}
  502. std::vector<int32_t> size_;
  503. };
  504. RandomResize::RandomResize(std::vector<int32_t> size) : data_(std::make_shared<Data>(size)) {}
  505. std::shared_ptr<TensorOperation> RandomResize::Parse() { return std::make_shared<RandomResizeOperation>(data_->size_); }
  506. // RandomResizeWithBBox Transform Operation.
  507. struct RandomResizeWithBBox::Data {
  508. explicit Data(const std::vector<int32_t> &size) : size_(size) {}
  509. std::vector<int32_t> size_;
  510. };
  511. RandomResizeWithBBox::RandomResizeWithBBox(std::vector<int32_t> size) : data_(std::make_shared<Data>(size)) {}
  512. std::shared_ptr<TensorOperation> RandomResizeWithBBox::Parse() {
  513. return std::make_shared<RandomResizeWithBBoxOperation>(data_->size_);
  514. }
  515. // RandomResizedCrop Transform Operation.
  516. struct RandomResizedCrop::Data {
  517. Data(const std::vector<int32_t> &size, const std::vector<float> &scale, const std::vector<float> &ratio,
  518. InterpolationMode interpolation, int32_t max_attempts)
  519. : size_(size), scale_(scale), ratio_(ratio), interpolation_(interpolation), max_attempts_(max_attempts) {}
  520. std::vector<int32_t> size_;
  521. std::vector<float> scale_;
  522. std::vector<float> ratio_;
  523. InterpolationMode interpolation_;
  524. int32_t max_attempts_;
  525. };
  526. RandomResizedCrop::RandomResizedCrop(std::vector<int32_t> size, std::vector<float> scale, std::vector<float> ratio,
  527. InterpolationMode interpolation, int32_t max_attempts)
  528. : data_(std::make_shared<Data>(size, scale, ratio, interpolation, max_attempts)) {}
  529. std::shared_ptr<TensorOperation> RandomResizedCrop::Parse() {
  530. return std::make_shared<RandomResizedCropOperation>(data_->size_, data_->scale_, data_->ratio_, data_->interpolation_,
  531. data_->max_attempts_);
  532. }
  533. // RandomResizedCrop Transform Operation.
  534. struct RandomResizedCropWithBBox::Data {
  535. Data(const std::vector<int32_t> &size, const std::vector<float> &scale, const std::vector<float> &ratio,
  536. InterpolationMode interpolation, int32_t max_attempts)
  537. : size_(size), scale_(scale), ratio_(ratio), interpolation_(interpolation), max_attempts_(max_attempts) {}
  538. std::vector<int32_t> size_;
  539. std::vector<float> scale_;
  540. std::vector<float> ratio_;
  541. InterpolationMode interpolation_;
  542. int32_t max_attempts_;
  543. };
  544. RandomResizedCropWithBBox::RandomResizedCropWithBBox(std::vector<int32_t> size, std::vector<float> scale,
  545. std::vector<float> ratio, InterpolationMode interpolation,
  546. int32_t max_attempts)
  547. : data_(std::make_shared<Data>(size, scale, ratio, interpolation, max_attempts)) {}
  548. std::shared_ptr<TensorOperation> RandomResizedCropWithBBox::Parse() {
  549. return std::make_shared<RandomResizedCropWithBBoxOperation>(data_->size_, data_->scale_, data_->ratio_,
  550. data_->interpolation_, data_->max_attempts_);
  551. }
  552. // RandomRotation Transform Operation.
  553. struct RandomRotation::Data {
  554. Data(const std::vector<float> &degrees, InterpolationMode resample, bool expand, const std::vector<float> &center,
  555. const std::vector<uint8_t> &fill_value)
  556. : degrees_(degrees), interpolation_mode_(resample), expand_(expand), center_(center), fill_value_(fill_value) {}
  557. std::vector<float> degrees_;
  558. InterpolationMode interpolation_mode_;
  559. std::vector<float> center_;
  560. bool expand_;
  561. std::vector<uint8_t> fill_value_;
  562. };
  563. RandomRotation::RandomRotation(std::vector<float> degrees, InterpolationMode resample, bool expand,
  564. std::vector<float> center, std::vector<uint8_t> fill_value)
  565. : data_(std::make_shared<Data>(degrees, resample, expand, center, fill_value)) {}
  566. std::shared_ptr<TensorOperation> RandomRotation::Parse() {
  567. return std::make_shared<RandomRotationOperation>(data_->degrees_, data_->interpolation_mode_, data_->expand_,
  568. data_->center_, data_->fill_value_);
  569. }
  570. // RandomSelectSubpolicy Transform Operation.
  571. struct RandomSelectSubpolicy::Data {
  572. std::vector<std::vector<std::pair<std::shared_ptr<TensorOperation>, double>>> policy_;
  573. };
  574. RandomSelectSubpolicy::RandomSelectSubpolicy(
  575. const std::vector<std::vector<std::pair<TensorTransform *, double>>> &policy)
  576. : data_(std::make_shared<Data>()) {
  577. for (uint32_t i = 0; i < policy.size(); i++) {
  578. std::vector<std::pair<std::shared_ptr<TensorOperation>, double>> subpolicy;
  579. for (uint32_t j = 0; j < policy[i].size(); j++) {
  580. TensorTransform *op = policy[i][j].first;
  581. std::shared_ptr<TensorOperation> operation = (op ? op->Parse() : nullptr);
  582. double prob = policy[i][j].second;
  583. subpolicy.emplace_back(std::move(std::make_pair(operation, prob)));
  584. }
  585. data_->policy_.emplace_back(subpolicy);
  586. }
  587. }
  588. RandomSelectSubpolicy::RandomSelectSubpolicy(
  589. const std::vector<std::vector<std::pair<std::shared_ptr<TensorTransform>, double>>> &policy)
  590. : data_(std::make_shared<Data>()) {
  591. for (uint32_t i = 0; i < policy.size(); i++) {
  592. std::vector<std::pair<std::shared_ptr<TensorOperation>, double>> subpolicy;
  593. for (uint32_t j = 0; j < policy[i].size(); j++) {
  594. std::shared_ptr<TensorTransform> op = policy[i][j].first;
  595. std::shared_ptr<TensorOperation> operation = (op ? op->Parse() : nullptr);
  596. double prob = policy[i][j].second;
  597. subpolicy.emplace_back(std::move(std::make_pair(operation, prob)));
  598. }
  599. data_->policy_.emplace_back(subpolicy);
  600. }
  601. }
  602. RandomSelectSubpolicy::RandomSelectSubpolicy(
  603. const std::vector<std::vector<std::pair<std::reference_wrapper<TensorTransform>, double>>> &policy)
  604. : data_(std::make_shared<Data>()) {
  605. for (int32_t i = 0; i < policy.size(); i++) {
  606. std::vector<std::pair<std::shared_ptr<TensorOperation>, double>> subpolicy;
  607. for (int32_t j = 0; j < policy[i].size(); j++) {
  608. TensorTransform &op = policy[i][j].first;
  609. std::shared_ptr<TensorOperation> operation = op.Parse();
  610. double prob = policy[i][j].second;
  611. subpolicy.emplace_back(std::move(std::make_pair(operation, prob)));
  612. }
  613. data_->policy_.emplace_back(subpolicy);
  614. }
  615. }
  616. std::shared_ptr<TensorOperation> RandomSelectSubpolicy::Parse() {
  617. return std::make_shared<RandomSelectSubpolicyOperation>(data_->policy_);
  618. }
  619. // RandomSharpness Transform Operation.
  620. struct RandomSharpness::Data {
  621. explicit Data(const std::vector<float> &degrees) : degrees_(degrees) {}
  622. std::vector<float> degrees_;
  623. };
  624. RandomSharpness::RandomSharpness(std::vector<float> degrees) : data_(std::make_shared<Data>(degrees)) {}
  625. std::shared_ptr<TensorOperation> RandomSharpness::Parse() {
  626. return std::make_shared<RandomSharpnessOperation>(data_->degrees_);
  627. }
  628. // RandomSolarize Transform Operation.
  629. struct RandomSolarize::Data {
  630. explicit Data(const std::vector<uint8_t> &threshold) : threshold_(threshold) {}
  631. std::vector<uint8_t> threshold_;
  632. };
  633. RandomSolarize::RandomSolarize(std::vector<uint8_t> threshold) : data_(std::make_shared<Data>(threshold)) {}
  634. std::shared_ptr<TensorOperation> RandomSolarize::Parse() {
  635. return std::make_shared<RandomSolarizeOperation>(data_->threshold_);
  636. }
  637. // RandomVerticalFlip Transform Operation.
  638. struct RandomVerticalFlip::Data {
  639. explicit Data(float prob) : probability_(prob) {}
  640. float probability_;
  641. };
  642. RandomVerticalFlip::RandomVerticalFlip(float prob) : data_(std::make_shared<Data>(prob)) {}
  643. std::shared_ptr<TensorOperation> RandomVerticalFlip::Parse() {
  644. return std::make_shared<RandomVerticalFlipOperation>(data_->probability_);
  645. }
  646. // RandomVerticalFlipWithBBox Transform Operation.
  647. struct RandomVerticalFlipWithBBox::Data {
  648. explicit Data(float prob) : probability_(prob) {}
  649. float probability_;
  650. };
  651. RandomVerticalFlipWithBBox::RandomVerticalFlipWithBBox(float prob) : data_(std::make_shared<Data>(prob)) {}
  652. std::shared_ptr<TensorOperation> RandomVerticalFlipWithBBox::Parse() {
  653. return std::make_shared<RandomVerticalFlipWithBBoxOperation>(data_->probability_);
  654. }
  655. // Rescale Transform Operation.
  656. struct Rescale::Data {
  657. Data(float rescale, float shift) : rescale_(rescale), shift_(shift) {}
  658. float rescale_;
  659. float shift_;
  660. };
  661. Rescale::Rescale(float rescale, float shift) : data_(std::make_shared<Data>(rescale, shift)) {}
  662. std::shared_ptr<TensorOperation> Rescale::Parse() {
  663. return std::make_shared<RescaleOperation>(data_->rescale_, data_->shift_);
  664. }
  665. #endif // not ENABLE_ANDROID
  666. // Resize Transform Operation.
  667. struct Resize::Data {
  668. Data(const std::vector<int32_t> &size, InterpolationMode interpolation)
  669. : size_(size), interpolation_(interpolation) {}
  670. std::vector<int32_t> size_;
  671. InterpolationMode interpolation_;
  672. };
  673. Resize::Resize(std::vector<int32_t> size, InterpolationMode interpolation)
  674. : data_(std::make_shared<Data>(size, interpolation)) {}
  675. std::shared_ptr<TensorOperation> Resize::Parse() {
  676. return std::make_shared<ResizeOperation>(data_->size_, data_->interpolation_);
  677. }
  678. std::shared_ptr<TensorOperation> Resize::Parse(const MapTargetDevice &env) {
  679. if (env == MapTargetDevice::kAscend310) {
  680. #ifdef ENABLE_ACL
  681. std::vector<uint32_t> usize_;
  682. usize_.reserve(data_->size_.size());
  683. std::transform(data_->size_.begin(), data_->size_.end(), std::back_inserter(usize_),
  684. [](int32_t i) { return (uint32_t)i; });
  685. return std::make_shared<DvppResizeJpegOperation>(usize_);
  686. #endif // ENABLE_ACL
  687. }
  688. return std::make_shared<ResizeOperation>(data_->size_, data_->interpolation_);
  689. }
  690. // ResizePreserveAR Transform Operation.
  691. struct ResizePreserveAR::Data {
  692. Data(int32_t height, int32_t width, int32_t img_orientation)
  693. : height_(height), width_(width), img_orientation_(img_orientation) {}
  694. int32_t height_;
  695. int32_t width_;
  696. int32_t img_orientation_;
  697. };
  698. ResizePreserveAR::ResizePreserveAR(int32_t height, int32_t width, int32_t img_orientation)
  699. : data_(std::make_shared<Data>(height, width, img_orientation)) {}
  700. std::shared_ptr<TensorOperation> ResizePreserveAR::Parse() {
  701. return std::make_shared<ResizePreserveAROperation>(data_->height_, data_->width_, data_->img_orientation_);
  702. }
  703. // Rotate Transform Operation.
  704. #ifdef ENABLE_ANDROID
  705. Rotate::Rotate() {}
  706. std::shared_ptr<TensorOperation> Rotate::Parse() { return std::make_shared<RotateOperation>(); }
  707. #else
  708. struct Rotate::Data {
  709. Data(const float &degrees, InterpolationMode resample, bool expand, const std::vector<float> &center,
  710. const std::vector<uint8_t> &fill_value)
  711. : degrees_(degrees), interpolation_mode_(resample), expand_(expand), center_(center), fill_value_(fill_value) {}
  712. float degrees_;
  713. InterpolationMode interpolation_mode_;
  714. std::vector<float> center_;
  715. bool expand_;
  716. std::vector<uint8_t> fill_value_;
  717. };
  718. Rotate::Rotate(float degrees, InterpolationMode resample, bool expand, std::vector<float> center,
  719. std::vector<uint8_t> fill_value)
  720. : data_(std::make_shared<Data>(degrees, resample, expand, center, fill_value)) {}
  721. std::shared_ptr<TensorOperation> Rotate::Parse() {
  722. return std::make_shared<RotateOperation>(data_->degrees_, data_->interpolation_mode_, data_->expand_, data_->center_,
  723. data_->fill_value_);
  724. }
  725. #endif
  726. #ifndef ENABLE_ANDROID
  727. // ResizeWithBBox Transform Operation.
  728. struct ResizeWithBBox::Data {
  729. Data(const std::vector<int32_t> &size, InterpolationMode interpolation)
  730. : size_(size), interpolation_(interpolation) {}
  731. std::vector<int32_t> size_;
  732. InterpolationMode interpolation_;
  733. };
  734. ResizeWithBBox::ResizeWithBBox(std::vector<int32_t> size, InterpolationMode interpolation)
  735. : data_(std::make_shared<Data>(size, interpolation)) {}
  736. std::shared_ptr<TensorOperation> ResizeWithBBox::Parse() {
  737. return std::make_shared<ResizeWithBBoxOperation>(data_->size_, data_->interpolation_);
  738. }
  739. // RGB2BGR Transform Operation.
  740. std::shared_ptr<TensorOperation> RGB2BGR::Parse() { return std::make_shared<RgbToBgrOperation>(); }
  741. // RGB2GRAY Transform Operation.
  742. std::shared_ptr<TensorOperation> RGB2GRAY::Parse() { return std::make_shared<RgbToGrayOperation>(); }
  743. // RgbaToBgr Transform Operation.
  744. RGBA2BGR::RGBA2BGR() {}
  745. std::shared_ptr<TensorOperation> RGBA2BGR::Parse() { return std::make_shared<RgbaToBgrOperation>(); }
  746. // RgbaToRgb Transform Operation.
  747. RGBA2RGB::RGBA2RGB() {}
  748. std::shared_ptr<TensorOperation> RGBA2RGB::Parse() { return std::make_shared<RgbaToRgbOperation>(); }
  749. // SlicePatches Transform Operation.
  750. struct SlicePatches::Data {
  751. Data(int32_t num_height, int32_t num_width, SliceMode slice_mode, uint8_t fill_value)
  752. : num_height_(num_height), num_width_(num_width), slice_mode_(slice_mode), fill_value_(fill_value) {}
  753. int32_t num_height_;
  754. int32_t num_width_;
  755. SliceMode slice_mode_;
  756. uint8_t fill_value_;
  757. };
  758. SlicePatches::SlicePatches(int32_t num_height, int32_t num_width, SliceMode slice_mode, uint8_t fill_value)
  759. : data_(std::make_shared<Data>(num_height, num_width, slice_mode, fill_value)) {}
  760. std::shared_ptr<TensorOperation> SlicePatches::Parse() {
  761. return std::make_shared<SlicePatchesOperation>(data_->num_height_, data_->num_width_, data_->slice_mode_,
  762. data_->fill_value_);
  763. }
  764. // SoftDvppDecodeRandomCropResizeJpeg Transform Operation.
  765. struct SoftDvppDecodeRandomCropResizeJpeg::Data {
  766. Data(const std::vector<int32_t> &size, const std::vector<float> &scale, const std::vector<float> &ratio,
  767. int32_t max_attempts)
  768. : size_(size), scale_(scale), ratio_(ratio), max_attempts_(max_attempts) {}
  769. std::vector<int32_t> size_;
  770. std::vector<float> scale_;
  771. std::vector<float> ratio_;
  772. int32_t max_attempts_;
  773. };
  774. SoftDvppDecodeRandomCropResizeJpeg::SoftDvppDecodeRandomCropResizeJpeg(std::vector<int32_t> size,
  775. std::vector<float> scale,
  776. std::vector<float> ratio, int32_t max_attempts)
  777. : data_(std::make_shared<Data>(size, scale, ratio, max_attempts)) {}
  778. std::shared_ptr<TensorOperation> SoftDvppDecodeRandomCropResizeJpeg::Parse() {
  779. return std::make_shared<SoftDvppDecodeRandomCropResizeJpegOperation>(data_->size_, data_->scale_, data_->ratio_,
  780. data_->max_attempts_);
  781. }
  782. // SoftDvppDecodeResizeJpeg Transform Operation.
  783. struct SoftDvppDecodeResizeJpeg::Data {
  784. explicit Data(const std::vector<int32_t> &size) : size_(size) {}
  785. std::vector<int32_t> size_;
  786. };
  787. SoftDvppDecodeResizeJpeg::SoftDvppDecodeResizeJpeg(std::vector<int32_t> size) : data_(std::make_shared<Data>(size)) {}
  788. std::shared_ptr<TensorOperation> SoftDvppDecodeResizeJpeg::Parse() {
  789. return std::make_shared<SoftDvppDecodeResizeJpegOperation>(data_->size_);
  790. }
  791. // SwapRedBlue Transform Operation.
  792. SwapRedBlue::SwapRedBlue() {}
  793. std::shared_ptr<TensorOperation> SwapRedBlue::Parse() { return std::make_shared<SwapRedBlueOperation>(); }
  794. // UniformAug Transform Operation.
  795. struct UniformAugment::Data {
  796. std::vector<std::shared_ptr<TensorOperation>> transforms_;
  797. int32_t num_ops_;
  798. };
  799. UniformAugment::UniformAugment(const std::vector<TensorTransform *> &transforms, int32_t num_ops)
  800. : data_(std::make_shared<Data>()) {
  801. (void)std::transform(
  802. transforms.begin(), transforms.end(), std::back_inserter(data_->transforms_),
  803. [](TensorTransform *const op) -> std::shared_ptr<TensorOperation> { return op ? op->Parse() : nullptr; });
  804. data_->num_ops_ = num_ops;
  805. }
  806. UniformAugment::UniformAugment(const std::vector<std::shared_ptr<TensorTransform>> &transforms, int32_t num_ops)
  807. : data_(std::make_shared<Data>()) {
  808. (void)std::transform(transforms.begin(), transforms.end(), std::back_inserter(data_->transforms_),
  809. [](const std::shared_ptr<TensorTransform> op) -> std::shared_ptr<TensorOperation> {
  810. return op ? op->Parse() : nullptr;
  811. });
  812. data_->num_ops_ = num_ops;
  813. }
  814. UniformAugment::UniformAugment(const std::vector<std::reference_wrapper<TensorTransform>> &transforms, int32_t num_ops)
  815. : data_(std::make_shared<Data>()) {
  816. (void)std::transform(transforms.begin(), transforms.end(), std::back_inserter(data_->transforms_),
  817. [](TensorTransform &op) -> std::shared_ptr<TensorOperation> { return op.Parse(); });
  818. data_->num_ops_ = num_ops;
  819. }
  820. std::shared_ptr<TensorOperation> UniformAugment::Parse() {
  821. return std::make_shared<UniformAugOperation>(data_->transforms_, data_->num_ops_);
  822. }
  823. // VerticalFlip Transform Operation.
  824. VerticalFlip::VerticalFlip() {}
  825. std::shared_ptr<TensorOperation> VerticalFlip::Parse() { return std::make_shared<VerticalFlipOperation>(); }
  826. #endif // not ENABLE_ANDROID
  827. } // namespace vision
  828. } // namespace dataset
  829. } // namespace mindspore