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.

serdes.h 12 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /**
  2. * Copyright 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. #ifndef MINDSPORE_CCSRC_MINDDATA_DATASET_ENGINE_SERDES_H_
  17. #define MINDSPORE_CCSRC_MINDDATA_DATASET_ENGINE_SERDES_H_
  18. #include <algorithm>
  19. #include <cstring>
  20. #include <fstream>
  21. #include <iostream>
  22. #include <map>
  23. #include <memory>
  24. #include <set>
  25. #include <string>
  26. #include <vector>
  27. #include <unordered_set>
  28. #include <utility>
  29. #include <nlohmann/json.hpp>
  30. #include "minddata/dataset/core/tensor.h"
  31. #include "minddata/dataset/engine/ir/datasetops/batch_node.h"
  32. #include "minddata/dataset/engine/ir/datasetops/concat_node.h"
  33. #include "minddata/dataset/engine/ir/datasetops/dataset_node.h"
  34. #include "minddata/dataset/engine/ir/datasetops/map_node.h"
  35. #include "minddata/dataset/engine/ir/datasetops/project_node.h"
  36. #include "minddata/dataset/engine/ir/datasetops/rename_node.h"
  37. #include "minddata/dataset/engine/ir/datasetops/repeat_node.h"
  38. #include "minddata/dataset/engine/ir/datasetops/shuffle_node.h"
  39. #include "minddata/dataset/engine/ir/datasetops/skip_node.h"
  40. #include "minddata/dataset/engine/ir/datasetops/transfer_node.h"
  41. #include "minddata/dataset/engine/ir/datasetops/take_node.h"
  42. #include "minddata/dataset/engine/ir/datasetops/zip_node.h"
  43. #include "minddata/dataset/engine/ir/datasetops/source/album_node.h"
  44. #include "minddata/dataset/engine/ir/datasetops/source/celeba_node.h"
  45. #include "minddata/dataset/engine/ir/datasetops/source/cifar10_node.h"
  46. #include "minddata/dataset/engine/ir/datasetops/source/cifar100_node.h"
  47. #include "minddata/dataset/engine/ir/datasetops/source/clue_node.h"
  48. #include "minddata/dataset/engine/ir/datasetops/source/coco_node.h"
  49. #include "minddata/dataset/engine/ir/datasetops/source/csv_node.h"
  50. #include "minddata/dataset/engine/ir/datasetops/source/flickr_node.h"
  51. #include "minddata/dataset/engine/ir/datasetops/source/image_folder_node.h"
  52. #include "minddata/dataset/engine/ir/datasetops/source/manifest_node.h"
  53. #include "minddata/dataset/engine/ir/datasetops/source/mnist_node.h"
  54. #include "minddata/dataset/engine/ir/datasetops/source/text_file_node.h"
  55. #include "minddata/dataset/engine/ir/datasetops/source/tf_record_node.h"
  56. #include "minddata/dataset/engine/ir/datasetops/source/voc_node.h"
  57. #include "minddata/dataset/engine/ir/datasetops/source/samplers/distributed_sampler_ir.h"
  58. #include "minddata/dataset/engine/ir/datasetops/source/samplers/pk_sampler_ir.h"
  59. #include "minddata/dataset/engine/ir/datasetops/source/samplers/prebuilt_sampler_ir.h"
  60. #include "minddata/dataset/engine/ir/datasetops/source/samplers/random_sampler_ir.h"
  61. #include "minddata/dataset/engine/ir/datasetops/source/samplers/samplers_ir.h"
  62. #include "minddata/dataset/engine/ir/datasetops/source/samplers/sequential_sampler_ir.h"
  63. #include "minddata/dataset/engine/ir/datasetops/source/samplers/subset_random_sampler_ir.h"
  64. #include "minddata/dataset/engine/ir/datasetops/source/samplers/subset_sampler_ir.h"
  65. #include "minddata/dataset/engine/ir/datasetops/source/samplers/weighted_random_sampler_ir.h"
  66. #include "minddata/dataset/include/dataset/constants.h"
  67. #include "minddata/dataset/include/dataset/datasets.h"
  68. #include "minddata/dataset/include/dataset/iterator.h"
  69. #include "minddata/dataset/include/dataset/samplers.h"
  70. #include "minddata/dataset/include/dataset/transforms.h"
  71. #include "minddata/dataset/include/dataset/vision.h"
  72. #include "minddata/dataset/kernels/ir/data/transforms_ir.h"
  73. #include "minddata/dataset/kernels/ir/vision/adjust_gamma_ir.h"
  74. #include "minddata/dataset/kernels/ir/vision/affine_ir.h"
  75. #include "minddata/dataset/kernels/ir/vision/ascend_vision_ir.h"
  76. #include "minddata/dataset/kernels/ir/vision/auto_contrast_ir.h"
  77. #include "minddata/dataset/kernels/ir/vision/bounding_box_augment_ir.h"
  78. #include "minddata/dataset/kernels/ir/vision/center_crop_ir.h"
  79. #include "minddata/dataset/kernels/ir/vision/crop_ir.h"
  80. #include "minddata/dataset/kernels/ir/vision/cutmix_batch_ir.h"
  81. #include "minddata/dataset/kernels/ir/vision/cutout_ir.h"
  82. #include "minddata/dataset/kernels/ir/vision/decode_ir.h"
  83. #include "minddata/dataset/kernels/ir/vision/equalize_ir.h"
  84. #include "minddata/dataset/kernels/ir/vision/gaussian_blur_ir.h"
  85. #include "minddata/dataset/kernels/ir/vision/horizontal_flip_ir.h"
  86. #include "minddata/dataset/kernels/ir/vision/hwc_to_chw_ir.h"
  87. #include "minddata/dataset/kernels/ir/vision/invert_ir.h"
  88. #include "minddata/dataset/kernels/ir/vision/mixup_batch_ir.h"
  89. #include "minddata/dataset/kernels/ir/vision/normalize_ir.h"
  90. #include "minddata/dataset/kernels/ir/vision/normalize_pad_ir.h"
  91. #include "minddata/dataset/kernels/ir/vision/pad_ir.h"
  92. #include "minddata/dataset/kernels/ir/vision/random_affine_ir.h"
  93. #include "minddata/dataset/kernels/ir/vision/random_color_adjust_ir.h"
  94. #include "minddata/dataset/kernels/ir/vision/random_color_ir.h"
  95. #include "minddata/dataset/kernels/ir/vision/random_crop_decode_resize_ir.h"
  96. #include "minddata/dataset/kernels/ir/vision/random_crop_ir.h"
  97. #include "minddata/dataset/kernels/ir/vision/random_crop_with_bbox_ir.h"
  98. #include "minddata/dataset/kernels/ir/vision/random_horizontal_flip_ir.h"
  99. #include "minddata/dataset/kernels/ir/vision/random_horizontal_flip_with_bbox_ir.h"
  100. #include "minddata/dataset/kernels/ir/vision/random_posterize_ir.h"
  101. #include "minddata/dataset/kernels/ir/vision/random_resized_crop_ir.h"
  102. #include "minddata/dataset/kernels/ir/vision/random_resized_crop_with_bbox_ir.h"
  103. #include "minddata/dataset/kernels/ir/vision/random_resize_ir.h"
  104. #include "minddata/dataset/kernels/ir/vision/random_resize_with_bbox_ir.h"
  105. #include "minddata/dataset/kernels/ir/vision/random_rotation_ir.h"
  106. #include "minddata/dataset/kernels/ir/vision/random_select_subpolicy_ir.h"
  107. #include "minddata/dataset/kernels/ir/vision/random_sharpness_ir.h"
  108. #include "minddata/dataset/kernels/ir/vision/random_solarize_ir.h"
  109. #include "minddata/dataset/kernels/ir/vision/random_vertical_flip_ir.h"
  110. #include "minddata/dataset/kernels/ir/vision/random_vertical_flip_with_bbox_ir.h"
  111. #include "minddata/dataset/kernels/ir/vision/rescale_ir.h"
  112. #include "minddata/dataset/kernels/ir/vision/resize_ir.h"
  113. #include "minddata/dataset/kernels/ir/vision/resize_preserve_ar_ir.h"
  114. #include "minddata/dataset/kernels/ir/vision/resize_with_bbox_ir.h"
  115. #include "minddata/dataset/kernels/ir/vision/rgba_to_bgr_ir.h"
  116. #include "minddata/dataset/kernels/ir/vision/rgba_to_rgb_ir.h"
  117. #include "minddata/dataset/kernels/ir/vision/rgb_to_bgr_ir.h"
  118. #include "minddata/dataset/kernels/ir/vision/rgb_to_gray_ir.h"
  119. #include "minddata/dataset/kernels/ir/vision/rotate_ir.h"
  120. #include "minddata/dataset/kernels/ir/vision/slice_patches_ir.h"
  121. #include "minddata/dataset/kernels/ir/vision/softdvpp_decode_random_crop_resize_jpeg_ir.h"
  122. #include "minddata/dataset/kernels/ir/vision/softdvpp_decode_resize_jpeg_ir.h"
  123. #include "minddata/dataset/kernels/ir/vision/swap_red_blue_ir.h"
  124. #include "minddata/dataset/kernels/ir/vision/uniform_aug_ir.h"
  125. #include "minddata/dataset/kernels/ir/vision/vertical_flip_ir.h"
  126. #include "minddata/dataset/text/ir/kernels/text_ir.h"
  127. #include "minddata/dataset/util/status.h"
  128. namespace mindspore {
  129. namespace dataset {
  130. /// \brief The Serdes class is used to serialize an IR tree into JSON string and dump into file if file name
  131. /// specified.
  132. class Serdes {
  133. public:
  134. /// \brief Constructor
  135. Serdes() {}
  136. /// \brief default destructor
  137. ~Serdes() = default;
  138. /// \brief function to serialize IR tree into JSON string and/or JSON file
  139. /// \param[in] node IR node to be transferred
  140. /// \param[in] filename The file name. If specified, save the generated JSON string into the file
  141. /// \param[out] out_json The result json string
  142. /// \return Status The status code returned
  143. static Status SaveToJSON(std::shared_ptr<DatasetNode> node, const std::string &filename, nlohmann::json *out_json);
  144. /// \brief function to de-serialize JSON file to IR tree
  145. /// \param[in] json_filepath input path of json file
  146. /// \param[out] ds The deserialized dataset
  147. /// \return Status The status code returned
  148. static Status Deserialize(std::string json_filepath, std::shared_ptr<DatasetNode> *ds);
  149. /// \brief Helper function to construct IR tree, separate zip and other operations
  150. /// \param[in] json_obj The JSON object to be deserialized
  151. /// \param[out] ds Shared pointer of a DatasetNode object containing the deserialized IR tree
  152. /// \return Status The status code returned
  153. static Status ConstructPipeline(nlohmann::json json_obj, std::shared_ptr<DatasetNode> *ds);
  154. /// \brief Helper functions for creating sampler, separate different samplers and call the related function
  155. /// \param[in] json_obj The JSON object to be deserialized
  156. /// \param[out] sampler Deserialized sampler
  157. /// \return Status The status code returned
  158. static Status ConstructSampler(nlohmann::json json_obj, std::shared_ptr<SamplerObj> *sampler);
  159. /// \brief helper function to construct tensor operations
  160. /// \param[in] json_obj json object of operations to be deserilized
  161. /// \param[out] vector of tensor operation pointer
  162. /// \return Status The status code returned
  163. static Status ConstructTensorOps(nlohmann::json json_obj, std::vector<std::shared_ptr<TensorOperation>> *result);
  164. protected:
  165. /// \brief Helper function to save JSON to a file
  166. /// \param[in] json_string The JSON string to be saved to the file
  167. /// \param[in] file_name The file name
  168. /// \return Status The status code returned
  169. static Status SaveJSONToFile(nlohmann::json json_string, const std::string &file_name);
  170. /// \brief Function to determine type of the node - dataset node if no dataset exists or operation node
  171. /// \param[in] child_ds children datasets that is already created
  172. /// \param[in] json_obj json object to read out type of the node
  173. /// \param[out] ds Shared pointer of a DatasetNode object containing the deserialized IR tree
  174. /// \return create new node based on the input dataset and type of the operation
  175. static Status CreateNode(std::shared_ptr<DatasetNode> child_ds, nlohmann::json json_obj,
  176. std::shared_ptr<DatasetNode> *ds);
  177. /// \brief Helper functions for creating dataset nodes, separate different datasets and call the related function
  178. /// \param[in] json_obj The JSON object to be deserialized
  179. /// \param[in] op_type type of dataset
  180. /// \param[out] ds Shared pointer of a DatasetNode object containing the deserialized IR tree
  181. /// \return Status The status code returned
  182. static Status CreateDatasetNode(nlohmann::json json_obj, std::string op_type, std::shared_ptr<DatasetNode> *ds);
  183. /// \brief Helper functions for creating operation nodes, separate different operations and call the related function
  184. /// \param[in] json_obj The JSON object to be deserialized
  185. /// \param[in] op_type type of dataset
  186. /// \param[out] result Shared pointer of a DatasetNode object containing the deserialized IR tree
  187. /// \return Status The status code returned
  188. static Status CreateDatasetOperationNode(std::shared_ptr<DatasetNode> ds, nlohmann::json json_obj,
  189. std::string op_type, std::shared_ptr<DatasetNode> *result);
  190. /// \brief Helper function to map the function pointers
  191. /// \return map of key to function pointer
  192. static std::map<std::string, Status (*)(nlohmann::json json_obj, std::shared_ptr<TensorOperation> *operation)>
  193. InitializeFuncPtr();
  194. private:
  195. static std::map<std::string, Status (*)(nlohmann::json json_obj, std::shared_ptr<TensorOperation> *operation)>
  196. func_ptr_;
  197. };
  198. } // namespace dataset
  199. } // namespace mindspore
  200. #endif // MINDSPORE_CCSRC_MINDDATA_DATASET_ENGINE_SERDES_H_