Preprocessing - added test for dynamic spatial shapes (resize) (#8980)

* Preprocessing - added test for dynamic spatial shapes (resize)

* Applied review comments

* Remove unnecessary change

* Revert signature to keep compatibility with kmb plugin

* Try fix centos
This commit is contained in:
Mikhail Nosov 2021-12-08 09:21:07 +03:00 committed by GitHub
parent 980904c9ec
commit 757b757a20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 43 additions and 11 deletions

View File

@ -94,5 +94,7 @@ std::vector<std::string> disabledTestPatterns() {
R"(smoke_PrePostProcess.*cvt_color_i420.*)",
// Unsupported
R"(smoke_Behavior/InferRequestSetBlobByType.setInputBlobsByType/BlobType=Batched_Device=GPU_Config=().*)",
// TODO: Issue 72624
R"(smoke_PrePostProcess.*resize_dynamic.*)",
};
}

View File

@ -28,6 +28,7 @@ inline std::vector<preprocess_func> GPU_smoke_preprocess_functions() {
preprocess_func(resize_nearest, "resize_nearest", 0.01f),
preprocess_func(resize_linear_nhwc, "resize_linear_nhwc", 0.01f),
preprocess_func(resize_cubic, "resize_cubic", 0.01f),
preprocess_func(resize_dynamic, "resize_dynamic", 0.01f, { ov::Shape {1, 3, 123, 123} }),
preprocess_func(convert_layout_by_dims, "convert_layout_by_dims", 0.01f),
preprocess_func(resize_and_convert_layout, "resize_and_convert_layout", 0.01f),
preprocess_func(cvt_color_nv12_to_rgb_single_plane, "cvt_color_nv12_to_rgb_single_plane", 1.f),

View File

@ -9,7 +9,7 @@
#include <vector>
#include <memory>
#include "../base/layer_test_utils.hpp"
#include "shared_test_classes/base/ov_subgraph.hpp"
#include "ngraph_functions/builders.hpp"
#include "ngraph_functions/preprocess/preprocess_builders.hpp"
#include "ngraph_functions/utils/ngraph_helpers.hpp"
@ -21,7 +21,7 @@ using preprocessParamsTuple = std::tuple<
std::string>; // Device name
class PrePostProcessTest : public testing::WithParamInterface<preprocessParamsTuple>,
virtual public LayerTestsUtils::LayerTestsCommon {
virtual public ov::test::SubgraphBaseTest {
public:
static std::string getTestCaseName(const testing::TestParamInfo<preprocessParamsTuple> &obj);

View File

@ -58,12 +58,12 @@ void SubgraphBaseTest::run() {
init_ref_function(functionRefs, targetStaticShapeVec);
}
generate_inputs(targetStaticShapeVec);
infer();
validate();
} catch (const std::exception& ex) {
throw std::runtime_error("Incorrect target static shape: " +
CommonTestUtils::vec2str(targetStaticShapeVec) + " " + ex.what());
}
infer();
validate();
}
status = LayerTestsUtils::PassRate::Statuses::PASSED;
} catch (const std::exception& ex) {

View File

@ -5,7 +5,6 @@
#include "shared_test_classes/subgraph/preprocess.hpp"
#include "ngraph_functions/preprocess/preprocess_builders.hpp"
#include "openvino/core/preprocess/pre_post_process.hpp"
#include <ie_ngraph_utils.hpp>
using namespace ov;
using namespace ov::preprocess;
@ -20,7 +19,7 @@ std::string PrePostProcessTest::getTestCaseName(
std::tie(func, targetName) = obj.param;
std::ostringstream result;
result << "Func=" << std::get<1>(func) << "_";
result << "Func=" << func.m_name << "_";
result << "Device=" << targetName << "";
return result.str();
}
@ -28,14 +27,20 @@ std::string PrePostProcessTest::getTestCaseName(
void PrePostProcessTest::SetUp() {
preprocess_func func;
std::tie(func, targetDevice) = GetParam();
function = (std::get<0>(func))();
threshold = std::get<2>(func);
function = func.m_function();
rel_threshold = func.m_accuracy;
functionRefs = ngraph::clone_function(*function);
abs_threshold = std::get<2>(func);
abs_threshold = func.m_accuracy;
if (func.m_shapes.empty()) {
for (const auto& input : function->inputs()) {
func.m_shapes.push_back(input.get_shape());
}
}
init_input_shapes(ov::test::static_shapes_to_test_representation(func.m_shapes));
}
TEST_P(PrePostProcessTest, CompareWithRefs) {
Run();
run();
}
} // namespace SubgraphTestsDefinitions

View File

@ -10,7 +10,19 @@ namespace ov {
namespace builder {
namespace preprocess {
using preprocess_func = std::tuple<std::function<std::shared_ptr<Function>()>, std::string, float>;
struct preprocess_func {
preprocess_func() = default;
preprocess_func(const std::function<std::shared_ptr<Function>()>& f,
const std::string& name,
float acc,
const std::vector<Shape>& shapes = {}):
m_function(f), m_name(name), m_accuracy(acc), m_shapes(shapes) {
}
std::function<std::shared_ptr<Function>()> m_function = nullptr;
std::string m_name = {};
float m_accuracy = 0.01f;
std::vector<Shape> m_shapes = {};
};
inline std::vector<preprocess_func> generic_preprocess_functions();
@ -368,6 +380,17 @@ inline std::shared_ptr<Function> cvt_color_bgrx_to_bgr() {
return p.build();
}
inline std::shared_ptr<Function> resize_dynamic() {
using namespace ov::preprocess;
auto function = create_preprocess_1input(element::f32, PartialShape{1, 3, 20, 20});
auto p = PrePostProcessor(function);
p.input().tensor().set_spatial_dynamic_shape();
p.input().preprocess().resize(ResizeAlgorithm::RESIZE_LINEAR);
p.input().network().set_layout("NCHW");
function = p.build();
return function;
}
inline std::vector<preprocess_func> generic_preprocess_functions() {
return std::vector<preprocess_func> {
preprocess_func(mean_only, "mean_only", 0.01f),
@ -388,6 +411,7 @@ inline std::vector<preprocess_func> generic_preprocess_functions() {
preprocess_func(resize_nearest, "resize_nearest", 0.01f),
preprocess_func(resize_linear_nhwc, "resize_linear_nhwc", 0.01f),
preprocess_func(resize_cubic, "resize_cubic", 0.01f),
preprocess_func(resize_dynamic, "resize_dynamic", 0.01f, { Shape {1, 3, 123, 123} }),
preprocess_func(convert_layout_by_dims, "convert_layout_by_dims", 0.01f),
preprocess_func(resize_and_convert_layout, "resize_and_convert_layout", 0.01f),
preprocess_func(resize_and_convert_layout_i8, "resize_and_convert_layout_i8", 0.01f),