x_standard_config.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. // Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #pragma once
  15. #include <vector>
  16. #include <string>
  17. #include <iostream>
  18. #include "yaml-cpp/yaml.h"
  19. namespace PaddleDeploy {
  20. void XEssential(const YAML::Node& src, YAML::Node* dst) {
  21. assert(src["Transforms"].IsDefined());
  22. if (src["TransformsMode"].IsDefined()) {
  23. std::string mode = src["TransformsMode"].as<std::string>();
  24. if (mode == "RGB") {
  25. (*dst)["transforms"]["BGR2RGB"] = YAML::Null;
  26. } else if (mode != "BGR") {
  27. std::cerr << "[Error] Only support RGB or BGR of "
  28. << "TransformsMode" << std::endl;
  29. }
  30. } else if ((*dst)["version"].as<std::string>() >= "2.0.0") {
  31. (*dst)["transforms"]["BGR2RGB"] = YAML::Null;
  32. }
  33. if ((*dst)["version"].as<std::string>() < "2.0.0") {
  34. (*dst)["transforms"]["Convert"]["dtype"] = "float";
  35. }
  36. }
  37. void XNormalize(const YAML::Node& src, YAML::Node* dst) {
  38. // check data format
  39. assert(src["mean"].IsDefined());
  40. assert(src["std"].IsDefined());
  41. // normalize
  42. std::vector<float> mean = src["mean"].as<std::vector<float>>();
  43. std::vector<float> std = src["std"].as<std::vector<float>>();
  44. for (auto i = 0; i < mean.size(); ++i) {
  45. (*dst)["transforms"]["Normalize"]["mean"].push_back(mean[i]);
  46. (*dst)["transforms"]["Normalize"]["std"].push_back(std[i]);
  47. }
  48. }
  49. void XResize(const YAML::Node& src, YAML::Node* dst) {
  50. // check data format
  51. assert(src["target_size"].IsDefined());
  52. int w = 0;
  53. int h = 0;
  54. if (src["target_size"].IsScalar()) {
  55. w = src["target_size"].as<int>();
  56. h = src["target_size"].as<int>();
  57. } else if (src["target_size"].IsSequence()) {
  58. w = src["target_size"].as<std::vector<int>>()[0];
  59. h = src["target_size"].as<std::vector<int>>()[1];
  60. } else {
  61. std::cerr << "[ERROR] Unexpected value type of `target_size`" << std::endl;
  62. assert(false);
  63. }
  64. int interp = 1;
  65. if (src["interp"].IsDefined()) {
  66. std::string interp_str = src["interp"].as<std::string>();
  67. if (interp_str == "NEAREST") {
  68. interp = 0;
  69. } else if (interp_str == "LINEAR") {
  70. interp = 1;
  71. } else if (interp_str == "CUBIC") {
  72. interp = 2;
  73. } else if (interp_str == "AREA") {
  74. interp = 3;
  75. } else if (interp_str == "LANCZOS4") {
  76. interp = 4;
  77. } else {
  78. std::cerr << "[ERROR] Unexpected interpolation method: '"
  79. << interp_str << "'" << std::endl;
  80. assert(false);
  81. }
  82. }
  83. (*dst)["transforms"]["Resize"]["width"] = w;
  84. (*dst)["transforms"]["Resize"]["height"] = h;
  85. (*dst)["transforms"]["Resize"]["interp"] = interp;
  86. (*dst)["transforms"]["Resize"]["use_scale"] = false;
  87. }
  88. void XResizeByLong(const YAML::Node& src, YAML::Node* dst) {
  89. // check data format
  90. assert(src["long_size"].IsDefined());
  91. int long_size = src["long_size"].as<int>();
  92. (*dst)["transforms"]["ResizeByLong"]["target_size"] = long_size;
  93. (*dst)["transforms"]["ResizeByLong"]["interp"] = 1;
  94. }
  95. void XResizeByShort(const YAML::Node& src, YAML::Node* dst) {
  96. // check data format
  97. assert(src["max_size"].IsDefined());
  98. assert(src["short_size"].IsDefined());
  99. int max_size = src["max_size"].as<int>();
  100. int target_size = src["short_size"].as<int>();
  101. int interp = 1;
  102. (*dst)["transforms"]["ResizeByShort"]["max_size"] = max_size;
  103. (*dst)["transforms"]["ResizeByShort"]["target_size"] = target_size;
  104. (*dst)["transforms"]["ResizeByShort"]["interp"] = interp;
  105. (*dst)["transforms"]["ResizeByShort"]["use_scale"] = false;
  106. }
  107. void XPadding(const YAML::Node& src, YAML::Node* dst) {
  108. if (src["coarsest_stride"].IsDefined()) {
  109. (*dst)["transforms"]["Padding"]["stride"] =
  110. src["coarsest_stride"].as<int>();
  111. } else if (src["target_size"].IsDefined()) {
  112. assert(src["target_size"].IsScalar() || src["target_size"].IsSequence());
  113. if (src["target_size"].IsScalar()) {
  114. (*dst)["transforms"]["Padding"]["width"] = src["target_size"].as<int>();
  115. (*dst)["transforms"]["Padding"]["height"] = src["target_size"].as<int>();
  116. } else {
  117. std::vector<int> target_size = src["target_size"].as<std::vector<int>>();
  118. (*dst)["transforms"]["Padding"]["width"] = target_size[0];
  119. (*dst)["transforms"]["Padding"]["height"] = target_size[1];
  120. }
  121. } else {
  122. std::cerr << "[Error] As least one of coarsest_stride/"
  123. << "target_size must be defined for Padding"
  124. << std::endl;
  125. assert(false);
  126. }
  127. if (src["im_padding_value"].IsDefined()) {
  128. (*dst)["transforms"]["Padding"]["im_padding_value"] =
  129. src["im_padding_value"].as<std::vector<float>>();
  130. }
  131. }
  132. void XCenterCrop(const YAML::Node& src, YAML::Node* dst) {
  133. assert(src["crop_size"].IsDefined());
  134. assert(src["crop_size"].IsScalar() || src["crop_size"].IsSequence());
  135. if (src["crop_size"].IsScalar()) {
  136. (*dst)["transforms"]["CenterCrop"]["width"] = src["crop_size"].as<int>();
  137. (*dst)["transforms"]["CenterCrop"]["height"] = src["crop_size"].as<int>();
  138. }
  139. }
  140. } // namespace PaddleDeploy