1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-31 00:03:03 +04:00

Merge pull request #20925 from TolyaTalamanov:at/enable-2d-inputs-giebackend

[G-API] Enable 2D inputs for GIEBackend

* Enable 2D inputs

* Fix typo
This commit is contained in:
Anatoliy Talamanov
2021-11-16 15:52:42 +03:00
committed by GitHub
parent b19697e3ac
commit c7df82460c
4 changed files with 133 additions and 21 deletions
@@ -22,6 +22,20 @@
#include "backends/ie/util.hpp"
#include "backends/ie/giebackend/giewrapper.hpp"
#ifdef HAVE_NGRAPH
#if defined(__clang__) // clang or MSVC clang
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-parameter"
#elif defined(_MSC_VER)
#pragma warning(push)
#pragma warning(disable : 4100)
#elif defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
#include <ngraph/ngraph.hpp>
#endif
namespace opencv_test
{
namespace {
@@ -2858,6 +2872,66 @@ TEST(TestAgeGender, ThrowBlobAndInputPrecisionMismatch)
cv::compile_args(cv::gapi::networks(pp))));
}
#ifdef HAVE_NGRAPH
TEST(Infer, ModelWith2DInputs)
{
const std::string model_name = "ModelWith2DInputs";
const std::string model_path = model_name + ".xml";
const std::string weights_path = model_name + ".bin";
const std::string device_id = "CPU";
const int W = 10;
const int H = 5;
// NB: Define model with 2D inputs.
auto in1 = std::make_shared<ngraph::op::Parameter>(
ngraph::element::Type_t::u8,
ngraph::Shape(std::vector<size_t>{{H, W}})
);
auto in2 = std::make_shared<ngraph::op::Parameter>(
ngraph::element::Type_t::u8,
ngraph::Shape(std::vector<size_t>{{H, W}})
);
auto result = std::make_shared<ngraph::op::v1::Add>(in1, in2);
auto func = std::make_shared<ngraph::Function>(
ngraph::OutputVector{result},
ngraph::ParameterVector{in1, in2}
);
cv::Mat in_mat1(std::vector<int>{H, W}, CV_8U),
in_mat2(std::vector<int>{H, W}, CV_8U),
gapi_mat, ref_mat;
cv::randu(in_mat1, 0, 100);
cv::randu(in_mat2, 0, 100);
cv::add(in_mat1, in_mat2, ref_mat, cv::noArray(), CV_32F);
// Compile xml file
IE::CNNNetwork(func).serialize(model_path);
// Configure & run G-API
cv::GMat g_in1, g_in2;
cv::GInferInputs inputs;
inputs[in1->get_name()] = g_in1;
inputs[in2->get_name()] = g_in2;
auto outputs = cv::gapi::infer<cv::gapi::Generic>(model_name, inputs);
auto out = outputs.at(result->get_name());
cv::GComputation comp(cv::GIn(g_in1, g_in2), cv::GOut(out));
auto pp = cv::gapi::ie::Params<cv::gapi::Generic>(model_name,
model_path,
weights_path,
device_id);
comp.apply(cv::gin(in_mat1, in_mat2), cv::gout(gapi_mat),
cv::compile_args(cv::gapi::networks(pp)));
normAssert(ref_mat, gapi_mat, "Test model output");
}
#endif // HAVE_NGRAPH
} // namespace opencv_test
#endif // HAVE_INF_ENGINE