det_standard_config.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 DetNormalize(const YAML::Node& src, YAML::Node* dst) {
  21. // check data format
  22. assert(src["is_scale"].IsDefined());
  23. assert(src["mean"].IsDefined());
  24. assert(src["std"].IsDefined());
  25. // convert data to float
  26. (*dst)["transforms"]["Convert"]["dtype"] = "float";
  27. // normalize
  28. bool is_scale = src["is_scale"].as<bool>();
  29. std::vector<float> mean = src["mean"].as<std::vector<float>>();
  30. std::vector<float> std = src["std"].as<std::vector<float>>();
  31. (*dst)["transforms"]["Normalize"]["is_scale"] = is_scale;
  32. for (auto i = 0; i < mean.size(); ++i) {
  33. (*dst)["transforms"]["Normalize"]["mean"].push_back(mean[i]);
  34. (*dst)["transforms"]["Normalize"]["std"].push_back(std[i]);
  35. }
  36. }
  37. void DetPermute(const YAML::Node& src, YAML::Node* dst) {
  38. // check data format
  39. (*dst)["transforms"]["Permute"] = YAML::Null;;
  40. if (src["to_bgr"].IsDefined()) {
  41. if (src["to_bgr"].as<bool>()) {
  42. (*dst)["transforms"]["RGB2BGR"] = YAML::Null;;
  43. }
  44. }
  45. }
  46. // Resize OP for PaddleDetection release/2.0
  47. void DetResize2(const YAML::Node& src,
  48. YAML::Node* dst) {
  49. // check data format
  50. assert(src["target_size"].IsDefined());
  51. assert(src["interp"].IsDefined());
  52. assert(src["target_size"].IsSequence());
  53. bool keep_ratio = src["keep_ratio"].as<bool>();
  54. std::vector<int> target_size = src["target_size"].as<std::vector<int>>();
  55. int interp = src["interp"].as<int>();
  56. assert(interp >= 0 && interp < 5);
  57. if (keep_ratio) {
  58. (*dst)["transforms"]["ResizeByShort"]["max_size"] = target_size[1];
  59. (*dst)["transforms"]["ResizeByShort"]["target_size"] = target_size[0];
  60. (*dst)["transforms"]["ResizeByShort"]["interp"] = interp;
  61. if (src["image_shape"].IsDefined()) {
  62. std::vector<int> image_shape = src["image_shape"].as<std::vector<int>>();
  63. (*dst)["transforms"]["Padding"]["width"] = image_shape[2];
  64. (*dst)["transforms"]["Padding"]["height"] = image_shape[1];
  65. }
  66. } else {
  67. (*dst)["transforms"]["Resize"]["width"] = target_size[0];
  68. (*dst)["transforms"]["Resize"]["height"] = target_size[0];
  69. (*dst)["transforms"]["Resize"]["interp"] = interp;
  70. (*dst)["transforms"]["Resize"]["use_scale"] = false;
  71. }
  72. }
  73. void DetResize(const YAML::Node& src,
  74. YAML::Node* dst,
  75. const std::string& model_arch) {
  76. if (src["keep_ratio"].IsDefined()) {
  77. DetResize2(src, dst);
  78. return;
  79. }
  80. // check data format
  81. assert(src["max_size"].IsDefined());
  82. assert(src["target_size"].IsDefined());
  83. assert(src["interp"].IsDefined());
  84. assert(model_arch == "RCNN" || model_arch == "YOLO");
  85. int max_size = src["max_size"].as<int>();
  86. int target_size = src["target_size"].as<int>();
  87. int interp = src["interp"].as<int>();
  88. assert(interp >= 0 && interp < 5 && target_size > 0);
  89. if (max_size != 0 && model_arch == "RCNN") {
  90. (*dst)["transforms"]["ResizeByShort"]["max_size"] = max_size;
  91. (*dst)["transforms"]["ResizeByShort"]["target_size"] = target_size;
  92. (*dst)["transforms"]["ResizeByShort"]["interp"] = interp;
  93. } else {
  94. (*dst)["transforms"]["Resize"]["width"] = target_size;
  95. (*dst)["transforms"]["Resize"]["height"] = target_size;
  96. (*dst)["transforms"]["Resize"]["interp"] = interp;
  97. (*dst)["transforms"]["Resize"]["use_scale"] = false;
  98. }
  99. }
  100. void DetPadStride(const YAML::Node& src, YAML::Node* dst) {
  101. // check data format
  102. assert(src["stride"].IsDefined());
  103. if (src["stride"].as<int>() < 0) {
  104. return;
  105. }
  106. (*dst)["transforms"]["Padding"]["stride"] = src["stride"].as<int>();
  107. }
  108. } // namespace PaddleDeploy