x_standard_config.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  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. if (src["is_scale"].IsDefined()) {
  49. (*dst)["transforms"]["Normalize"]["is_scale"] = src["is_scale"];
  50. }
  51. }
  52. void XResize(const YAML::Node& src, YAML::Node* dst) {
  53. // check data format
  54. assert(src["target_size"].IsDefined());
  55. int w = 0;
  56. int h = 0;
  57. if (src["target_size"].IsScalar()) {
  58. w = src["target_size"].as<int>();
  59. h = src["target_size"].as<int>();
  60. } else if (src["target_size"].IsSequence()) {
  61. if ((*dst)["version"].as<std::string>() >= "2.0.0") {
  62. h = src["target_size"].as<std::vector<int>>()[0];
  63. w = src["target_size"].as<std::vector<int>>()[1];
  64. } else {
  65. w = src["target_size"].as<std::vector<int>>()[0];
  66. h = src["target_size"].as<std::vector<int>>()[1];
  67. }
  68. } else {
  69. std::cerr << "[ERROR] Unexpected value type of `target_size`" << std::endl;
  70. assert(false);
  71. }
  72. int interp = 1;
  73. if (src["interp"].IsDefined()) {
  74. std::string interp_str = src["interp"].as<std::string>();
  75. if (interp_str == "NEAREST") {
  76. interp = 0;
  77. } else if (interp_str == "LINEAR") {
  78. interp = 1;
  79. } else if (interp_str == "CUBIC") {
  80. interp = 2;
  81. } else if (interp_str == "AREA") {
  82. interp = 3;
  83. } else if (interp_str == "LANCZOS4") {
  84. interp = 4;
  85. } else {
  86. std::cerr << "[ERROR] Unexpected interpolation method: '"
  87. << interp_str << "'" << std::endl;
  88. assert(false);
  89. }
  90. }
  91. if (src["keep_ratio"].IsDefined() && src["keep_ratio"].as<bool>()) {
  92. (*dst)["transforms"]["Resize"]["keep_ratio"] = true;
  93. }
  94. (*dst)["transforms"]["Resize"]["width"] = w;
  95. (*dst)["transforms"]["Resize"]["height"] = h;
  96. (*dst)["transforms"]["Resize"]["interp"] = interp;
  97. (*dst)["transforms"]["Resize"]["use_scale"] = false;
  98. }
  99. void XResizeByLong(const YAML::Node& src, YAML::Node* dst) {
  100. // check data format
  101. assert(src["long_size"].IsDefined());
  102. int long_size = src["long_size"].as<int>();
  103. (*dst)["transforms"]["ResizeByLong"]["target_size"] = long_size;
  104. (*dst)["transforms"]["ResizeByLong"]["interp"] = 1;
  105. }
  106. void XResizeByShort(const YAML::Node& src, YAML::Node* dst) {
  107. // check data format
  108. assert(src["max_size"].IsDefined());
  109. assert(src["short_size"].IsDefined());
  110. int max_size = src["max_size"].as<int>();
  111. int target_size = src["short_size"].as<int>();
  112. int interp = 1;
  113. (*dst)["transforms"]["ResizeByShort"]["max_size"] = max_size;
  114. (*dst)["transforms"]["ResizeByShort"]["target_size"] = target_size;
  115. (*dst)["transforms"]["ResizeByShort"]["interp"] = interp;
  116. (*dst)["transforms"]["ResizeByShort"]["use_scale"] = false;
  117. }
  118. // dygraph version
  119. void XPaddingV2(const YAML::Node& src, YAML::Node* dst) {
  120. if (src["target_size"].IsDefined() &&
  121. src["target_size"].Type() != YAML::NodeType::Null) {
  122. assert(src["target_size"].IsScalar() || src["target_size"].IsSequence());
  123. if (src["target_size"].IsScalar()) {
  124. (*dst)["transforms"]["Padding"]["width"] = src["target_size"].as<int>();
  125. (*dst)["transforms"]["Padding"]["height"] = src["target_size"].as<int>();
  126. } else {
  127. std::vector<int> target_size = src["target_size"].as<std::vector<int>>();
  128. (*dst)["transforms"]["Padding"]["width"] = target_size[0];
  129. (*dst)["transforms"]["Padding"]["height"] = target_size[1];
  130. }
  131. } else if (src["size_divisor"].IsDefined()) {
  132. (*dst)["transforms"]["Padding"]["stride"] =
  133. src["size_divisor"].as<int>();
  134. } else {
  135. std::cerr << "[Error] As least one of size_divisor/"
  136. << "target_size must be defined for Padding"
  137. << std::endl;
  138. assert(false);
  139. }
  140. if (src["im_padding_value"].IsDefined()) {
  141. (*dst)["transforms"]["Padding"]["im_padding_value"] =
  142. src["im_padding_value"].as<std::vector<float>>();
  143. }
  144. if (src["pad_mode"].IsDefined()) {
  145. if (src["pad_mode"].as<int>() != 0) {
  146. std::cerr << "[Error] No support pad_mode :"
  147. << src["pad_mode"].as<int>()
  148. << std::endl;
  149. assert(false);
  150. }
  151. }
  152. }
  153. void XPadding(const YAML::Node& src, YAML::Node* dst) {
  154. if (src["coarsest_stride"].IsDefined()) {
  155. (*dst)["transforms"]["Padding"]["stride"] =
  156. src["coarsest_stride"].as<int>();
  157. } else if (src["target_size"].IsDefined()) {
  158. assert(src["target_size"].IsScalar() || src["target_size"].IsSequence());
  159. if (src["target_size"].IsScalar()) {
  160. (*dst)["transforms"]["Padding"]["width"] = src["target_size"].as<int>();
  161. (*dst)["transforms"]["Padding"]["height"] = src["target_size"].as<int>();
  162. } else {
  163. std::vector<int> target_size = src["target_size"].as<std::vector<int>>();
  164. (*dst)["transforms"]["Padding"]["width"] = target_size[0];
  165. (*dst)["transforms"]["Padding"]["height"] = target_size[1];
  166. }
  167. } else {
  168. std::cerr << "[Error] As least one of coarsest_stride/"
  169. << "target_size must be defined for Padding"
  170. << std::endl;
  171. assert(false);
  172. }
  173. if (src["im_padding_value"].IsDefined()) {
  174. (*dst)["transforms"]["Padding"]["im_padding_value"] =
  175. src["im_padding_value"].as<std::vector<float>>();
  176. }
  177. }
  178. void XCenterCrop(const YAML::Node& src, YAML::Node* dst) {
  179. assert(src["crop_size"].IsDefined());
  180. assert(src["crop_size"].IsScalar() || src["crop_size"].IsSequence());
  181. if (src["crop_size"].IsScalar()) {
  182. (*dst)["transforms"]["CenterCrop"]["width"] = src["crop_size"].as<int>();
  183. (*dst)["transforms"]["CenterCrop"]["height"] = src["crop_size"].as<int>();
  184. }
  185. }
  186. } // namespace PaddleDeploy