1 // This file is part of OpenCV project.
2 // It is subject to the license terms in the LICENSE file found in the top-level directory
3 // of this distribution and at http://opencv.org/license.html.
5 // Copyright (C) 2018-2019, Intel Corporation, all rights reserved.
6 // Third party copyrights are property of their respective owners.
9 #include "test_precomp.hpp"
10 #include "npy_blob.hpp"
11 #include <opencv2/dnn/shape_utils.hpp>
12 namespace opencv_test { namespace {
14 template<typename TString>
15 static std::string _tf(TString filename, bool required = true)
17 return findDataFile(std::string("dnn/onnx/") + filename, required);
20 class Test_ONNX_layers : public DNNTestLayer
25 Test_ONNX_layers() : required(true) { }
33 void testONNXModels(const String& basename, const Extension ext = npy,
34 const double l1 = 0, const float lInf = 0, const bool useSoftmax = false,
35 bool checkNoFallbacks = true, int numInps = 1)
37 String onnxmodel = _tf("models/" + basename + ".onnx", required);
38 std::vector<Mat> inps(numInps);
41 for (int i = 0; i < numInps; ++i)
42 inps[i] = blobFromNPY(_tf("data/input_" + basename + (numInps > 1 ? format("_%d", i) : "") + ".npy"));
43 ref = blobFromNPY(_tf("data/output_" + basename + ".npy"));
46 for (int i = 0; i < numInps; ++i)
47 inps[i] = readTensorFromONNX(_tf("data/input_" + basename + (numInps > 1 ? format("_%d", i) : "") + ".pb"));
48 ref = readTensorFromONNX(_tf("data/output_" + basename + ".pb"));
51 CV_Error(Error::StsUnsupportedFormat, "Unsupported extension");
53 checkBackend(&inps[0], &ref);
54 Net net = readNetFromONNX(onnxmodel);
55 ASSERT_FALSE(net.empty());
57 net.setPreferableBackend(backend);
58 net.setPreferableTarget(target);
60 std::vector<String> inputNames;
61 for (int i = 0; i < numInps; ++i)
62 inputNames.push_back(format("%d", i));
63 net.setInputsNames(inputNames);
65 for (int i = 0; i < numInps; ++i)
66 net.setInput(inps[i], inputNames[i]);
67 Mat out = net.forward("");
73 netSoftmax.addLayerToPrev("softmaxLayer", "Softmax", lp);
74 netSoftmax.setPreferableBackend(DNN_BACKEND_OPENCV);
76 netSoftmax.setInput(out);
77 out = netSoftmax.forward();
79 netSoftmax.setInput(ref);
80 ref = netSoftmax.forward();
82 normAssert(ref, out, "", l1 ? l1 : default_l1, lInf ? lInf : default_lInf);
84 expectNoFallbacksFromIE(net);
88 TEST_P(Test_ONNX_layers, InstanceNorm)
90 if(backend == DNN_BACKEND_CUDA)
91 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); /* MVN is not supported */
93 if (target == DNN_TARGET_MYRIAD)
94 testONNXModels("instancenorm", npy, 0, 0, false, false);
96 testONNXModels("instancenorm", npy);
99 TEST_P(Test_ONNX_layers, MaxPooling)
101 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_GE(2020020000)
102 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
103 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
105 testONNXModels("maxpooling", npy, 0, 0, false, false);
107 TEST_P(Test_ONNX_layers, MaxPooling_2)
109 testONNXModels("two_maxpooling", npy, 0, 0, false, false);
112 TEST_P(Test_ONNX_layers, Convolution)
114 testONNXModels("convolution");
115 testONNXModels("conv_asymmetric_pads");
118 TEST_P(Test_ONNX_layers, Convolution_variable_weight)
120 if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH ||
121 backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019) && target == DNN_TARGET_MYRIAD)
122 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
124 if (backend == DNN_BACKEND_CUDA)
125 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); // not supported
126 if (backend == DNN_BACKEND_VKCOM)
127 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN); // not supported
128 String basename = "conv_variable_w";
129 Net net = readNetFromONNX(_tf("models/" + basename + ".onnx"));
130 ASSERT_FALSE(net.empty());
132 net.setPreferableBackend(backend);
133 net.setPreferableTarget(target);
135 for (int i = 0; i < 2; i++)
137 Mat input = blobFromNPY(_tf("data/input_" + basename + format("_%d", i) + "_0.npy"));
138 Mat weights = blobFromNPY(_tf("data/input_" + basename + format("_%d", i) + "_1.npy"));
139 Mat ref = blobFromNPY(_tf("data/output_" + basename + format("_%d", i) + ".npy"));
141 net.setInput(input, "0");
142 net.setInput(weights, "1");
144 Mat out = net.forward();
145 normAssert(ref, out, "", default_l1, default_lInf);
149 TEST_P(Test_ONNX_layers, Convolution_variable_weight_bias)
151 if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH ||
152 backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019) && target == DNN_TARGET_MYRIAD)
153 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
155 if (backend == DNN_BACKEND_CUDA)
156 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); // not supported
157 if (backend == DNN_BACKEND_VKCOM)
158 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN); // not supported
160 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU &&
161 getInferenceEngineCPUType() == CV_DNN_INFERENCE_ENGINE_CPU_TYPE_ARM_COMPUTE)
162 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_ARM_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
164 String basename = "conv_variable_wb";
165 Net net = readNetFromONNX(_tf("models/" + basename + ".onnx"));
166 ASSERT_FALSE(net.empty());
168 net.setPreferableBackend(backend);
169 net.setPreferableTarget(target);
171 for (int i = 0; i < 2; i++)
173 Mat input = blobFromNPY(_tf("data/input_" + basename + format("_%d", i) + "_0.npy"));
174 Mat weights = blobFromNPY(_tf("data/input_" + basename + format("_%d", i) + "_1.npy"));
175 Mat bias = blobFromNPY(_tf("data/input_" + basename + format("_%d", i) + "_2.npy"));
176 Mat ref = blobFromNPY(_tf("data/output_" + basename + format("_%d", i) + ".npy"));
178 net.setInput(input, "0");
179 net.setInput(weights, "1");
180 net.setInput(bias, "bias");
182 Mat out = net.forward();
183 normAssert(ref, out, "", default_l1, default_lInf);
187 TEST_P(Test_ONNX_layers, Gather)
189 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD)
190 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
191 testONNXModels("gather");
192 // GPU plugin unsupported slice for constant
193 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
194 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
195 testONNXModels("gather_scalar", npy, 0, 0, false, false);
198 TEST_P(Test_ONNX_layers, Convolution3D)
200 testONNXModels("conv3d");
203 TEST_P(Test_ONNX_layers, Convolution3D_bias)
205 testONNXModels("conv3d_bias");
208 TEST_P(Test_ONNX_layers, Two_convolution)
210 #if defined(INF_ENGINE_RELEASE)
211 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD
212 && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X
214 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
216 // Reference output values are in range [-0.855, 0.611]
217 testONNXModels("two_convolution");
220 TEST_P(Test_ONNX_layers, Deconvolution)
222 testONNXModels("deconvolution", npy, 0, 0, false, false);
223 testONNXModels("two_deconvolution", npy, 0, 0, false, false);
224 testONNXModels("deconvolution_group", npy, 0, 0, false, false);
225 testONNXModels("deconvolution_output_shape", npy, 0, 0, false, false);
226 if (target != DNN_TARGET_CUDA_FP16) // bug
227 testONNXModels("deconv_adjpad_2d", npy, 0, 0, false, false);
230 TEST_P(Test_ONNX_layers, Deconvolution3D)
232 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
233 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
235 // [ GENERAL_ERROR ] vpu/graph_transformer/src/frontend/frontend.cpp:439 Failed to compile layer "2":
236 // [ GENERAL_ERROR ] vpu/graph_transformer/src/model/model.cpp:198 duplicateData error: while duplicating 2@weights Const data got different desc and content byte sizes (162 and 486 respectively)
237 if (target == DNN_TARGET_MYRIAD)
238 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
242 if (backend == DNN_BACKEND_OPENCV)
243 throw SkipTestException("OpenCV backend is not supported"); // FIXIT use tags
245 if (backend == DNN_BACKEND_VKCOM)
246 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
248 testONNXModels("deconv3d");
251 TEST_P(Test_ONNX_layers, Deconvolution3D_bias)
253 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
254 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
256 // [ GENERAL_ERROR ] vpu/graph_transformer/src/frontend/frontend.cpp:439 Failed to compile layer "2":
257 // [ GENERAL_ERROR ] vpu/graph_transformer/src/model/model.cpp:198 duplicateData error: while duplicating 2@weights Const data got different desc and content byte sizes (162 and 486 respectively)
258 if (target == DNN_TARGET_MYRIAD)
259 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
263 if (backend == DNN_BACKEND_OPENCV)
264 throw SkipTestException("OpenCV backend is not supported"); // FIXIT use tags
266 if (backend == DNN_BACKEND_VKCOM)
267 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
269 testONNXModels("deconv3d_bias");
272 TEST_P(Test_ONNX_layers, Deconvolution3D_pad)
274 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
275 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
277 // [ GENERAL_ERROR ] vpu/graph_transformer/src/frontend/frontend.cpp:439 Failed to compile layer "2":
278 // [ GENERAL_ERROR ] vpu/graph_transformer/src/model/model.cpp:198 duplicateData error: while duplicating 2@weights Const data got different desc and content byte sizes (162 and 486 respectively)
279 if (target == DNN_TARGET_MYRIAD)
280 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
284 if (backend == DNN_BACKEND_OPENCV)
285 throw SkipTestException("OpenCV backend is not supported"); // FIXIT use tags
287 if (backend == DNN_BACKEND_VKCOM)
288 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
290 testONNXModels("deconv3d_pad");
293 TEST_P(Test_ONNX_layers, Deconvolution3D_adjpad)
295 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
296 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
298 // [ GENERAL_ERROR ] vpu/graph_transformer/src/frontend/frontend.cpp:439 Failed to compile layer "2":
299 // [ GENERAL_ERROR ] vpu/graph_transformer/src/model/model.cpp:198 duplicateData error: while duplicating 2@weights Const data got different desc and content byte sizes (162 and 486 respectively)
300 if (target == DNN_TARGET_MYRIAD)
301 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
305 if (backend == DNN_BACKEND_OPENCV)
306 throw SkipTestException("OpenCV backend is not supported"); // FIXIT use tags
308 if (backend == DNN_BACKEND_VKCOM)
309 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
311 testONNXModels("deconv3d_adjpad");
314 TEST_P(Test_ONNX_layers, Dropout)
316 testONNXModels("dropout");
319 TEST_P(Test_ONNX_layers, Linear)
321 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
322 applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
323 testONNXModels("linear");
326 TEST_P(Test_ONNX_layers, ReLU)
328 testONNXModels("ReLU");
331 TEST_P(Test_ONNX_layers, PReLU)
333 testONNXModels("PReLU_slope");
336 TEST_P(Test_ONNX_layers, Clip)
338 testONNXModels("clip", npy);
341 TEST_P(Test_ONNX_layers, Shape)
343 testONNXModels("shape_of_constant");
346 TEST_P(Test_ONNX_layers, ReduceMean)
348 testONNXModels("reduce_mean");
349 testONNXModels("reduce_mean_axis1");
350 testONNXModels("reduce_mean_axis2");
353 TEST_P(Test_ONNX_layers, ReduceSum)
355 testONNXModels("reduce_sum");
358 TEST_P(Test_ONNX_layers, ReduceMax)
360 testONNXModels("reduce_max");
361 testONNXModels("reduce_max_axis_0");
362 testONNXModels("reduce_max_axis_1");
365 TEST_P(Test_ONNX_layers, Min)
367 testONNXModels("min", npy, 0, 0, false, true, 2);
370 TEST_P(Test_ONNX_layers, ArgLayer)
372 if (backend != DNN_BACKEND_OPENCV || target != DNN_TARGET_CPU)
373 throw SkipTestException("Only CPU is supported"); // FIXIT use tags
375 testONNXModels("argmax");
376 testONNXModels("argmin");
379 TEST_P(Test_ONNX_layers, Scale)
381 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
382 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
383 testONNXModels("scale");
384 testONNXModels("scale_broadcast", npy, 0, 0, false, true, 3);
385 testONNXModels("scale_broadcast_mid", npy, 0, 0, false, true, 2);
388 TEST_P(Test_ONNX_layers, ReduceMean3D)
390 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
391 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
392 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER); // Only CPU on DLIE backend is supported
393 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
394 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // Only CPU on DLIE backend is supported
396 if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
397 throw SkipTestException("Only CPU is supported"); // FIXIT use tags
399 if (backend == DNN_BACKEND_VKCOM)
400 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
402 testONNXModels("reduce_mean3d");
405 TEST_P(Test_ONNX_layers, MaxPooling_Sigmoid)
407 testONNXModels("maxpooling_sigmoid");
410 TEST_P(Test_ONNX_layers, Cast)
412 testONNXModels("cast");
415 TEST_P(Test_ONNX_layers, Power)
417 testONNXModels("pow2", npy, 0, 0, false, false);
420 TEST_P(Test_ONNX_layers, Exp)
422 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
423 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
424 testONNXModels("exp");
427 TEST_P(Test_ONNX_layers, Elementwise_Ceil)
429 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
430 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
431 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
432 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
433 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
435 testONNXModels("ceil");
438 TEST_P(Test_ONNX_layers, Elementwise_Floor)
440 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
441 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
442 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
443 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
444 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
446 testONNXModels("floor");
449 TEST_P(Test_ONNX_layers, Elementwise_Log)
451 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
452 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
453 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
454 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
455 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
457 testONNXModels("log");
460 TEST_P(Test_ONNX_layers, Elementwise_Round)
462 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
463 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
464 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
465 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
466 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
468 testONNXModels("round");
471 TEST_P(Test_ONNX_layers, Elementwise_Sqrt)
473 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
474 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
475 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
476 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
477 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
478 testONNXModels("sqrt");
482 TEST_P(Test_ONNX_layers, Elementwise_not)
484 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
485 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
486 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
487 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
488 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
490 testONNXModels("not");
493 TEST_P(Test_ONNX_layers, Compare_EQ)
495 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
496 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
497 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
498 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
499 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
501 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
502 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
504 // IE exception: Function contains several inputs and outputs with one friendly name!
505 if (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
506 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
507 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
509 // IE exception: Function contains several inputs and outputs with one friendly name!
510 if (target == DNN_TARGET_MYRIAD)
511 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
514 testONNXModels("equal");
517 TEST_P(Test_ONNX_layers, Compare_GT)
519 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
520 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
521 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
522 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
523 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
525 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
526 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
528 // IE exception: Function contains several inputs and outputs with one friendly name!
529 if (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
530 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
531 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
533 // IE exception: Function contains several inputs and outputs with one friendly name!
534 if (target == DNN_TARGET_MYRIAD)
535 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
538 testONNXModels("greater");
541 TEST_P(Test_ONNX_layers, Compare_LT)
543 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
544 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
545 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
546 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
547 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
549 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
550 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
552 // IE exception: Function contains several inputs and outputs with one friendly name!
553 if (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
554 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
555 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
557 // IE exception: Function contains several inputs and outputs with one friendly name!
558 if (target == DNN_TARGET_MYRIAD)
559 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
562 testONNXModels("less");
565 TEST_P(Test_ONNX_layers, CompareSameDims_EQ)
567 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
568 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
569 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
570 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
571 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
573 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
574 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
576 // IE exception: Function contains several inputs and outputs with one friendly name!
577 if (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
578 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
579 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
581 // IE exception: Function contains several inputs and outputs with one friendly name!
582 if (target == DNN_TARGET_MYRIAD)
583 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
586 testONNXModels("equal_same_dims", npy, 0, 0, false, true, 2);
589 TEST_P(Test_ONNX_layers, CompareSameDims_GT)
591 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
592 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
593 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
594 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
595 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
597 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
598 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
600 // IE exception: Function contains several inputs and outputs with one friendly name!
601 if (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
602 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
603 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
605 // IE exception: Function contains several inputs and outputs with one friendly name!
606 if (target == DNN_TARGET_MYRIAD)
607 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
610 testONNXModels("greater_same_dims", npy, 0, 0, false, true, 2);
613 TEST_P(Test_ONNX_layers, CompareSameDims_LT)
615 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
616 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
617 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
618 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
619 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
621 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
622 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
624 // IE exception: Function contains several inputs and outputs with one friendly name!
625 if (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
626 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
627 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
629 // IE exception: Function contains several inputs and outputs with one friendly name!
630 if (target == DNN_TARGET_MYRIAD)
631 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
634 testONNXModels("less_same_dims", npy, 0, 0, false, true, 2);
637 TEST_P(Test_ONNX_layers, Concatenation)
639 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
641 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
642 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
643 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
645 testONNXModels("concatenation");
646 testONNXModels("concat_const_blobs");
649 TEST_P(Test_ONNX_layers, Eltwise3D)
651 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
652 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
653 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER); // Only CPU on DLIE backend is supported
654 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
655 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // Only CPU on DLIE backend is supported
657 testONNXModels("eltwise3d");
660 TEST_P(Test_ONNX_layers, AveragePooling)
662 testONNXModels("average_pooling");
665 TEST_P(Test_ONNX_layers, MaxPooling3D)
667 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
668 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
671 if (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
672 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
673 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
675 // IE exception: [ GENERAL_ERROR ] AssertionFailed: !expired()
676 if (target == DNN_TARGET_MYRIAD)
677 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
680 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
681 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
682 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER); // Only CPU on DLIE backend is supported
683 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
684 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // Only CPU on DLIE backend is supported
686 if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
687 throw SkipTestException("Only CPU is supported"); // FIXIT use tags
689 if (backend == DNN_BACKEND_VKCOM)
690 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
692 testONNXModels("max_pool3d", npy, 0, 0, false, false);
695 TEST_P(Test_ONNX_layers, AvePooling3D)
697 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
698 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
699 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER); // Only CPU on DLIE backend is supported
700 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
701 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // Only CPU on DLIE backend is supported
703 if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
704 throw SkipTestException("Only CPU is supported"); // FIXIT use tags
706 if (backend == DNN_BACKEND_VKCOM)
707 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
709 testONNXModels("ave_pool3d");
712 TEST_P(Test_ONNX_layers, PoolConv3D)
714 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
715 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
716 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER); // Only CPU on DLIE backend is supported
717 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
718 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // Only CPU on DLIE backend is supported
720 if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
721 throw SkipTestException("Only CPU is supported"); // FIXIT use tags
723 if (backend == DNN_BACKEND_VKCOM)
724 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
726 testONNXModels("pool_conv_3d");
729 TEST_P(Test_ONNX_layers, BatchNormalization)
731 testONNXModels("batch_norm");
734 TEST_P(Test_ONNX_layers, BatchNormalization3D)
736 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
738 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
739 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
740 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
742 testONNXModels("batch_norm_3d");
745 TEST_P(Test_ONNX_layers, BatchNormalizationUnfused)
747 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021030000)
748 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU)
749 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
751 testONNXModels("frozenBatchNorm2d");
754 TEST_P(Test_ONNX_layers, BatchNormalizationSubgraph)
756 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021030000)
757 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU)
758 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
760 testONNXModels("batch_norm_subgraph");
763 TEST_P(Test_ONNX_layers, NormalizeFusionSubgraph)
765 testONNXModels("normalize_fusion");
768 TEST_P(Test_ONNX_layers, Transpose)
770 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
772 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
773 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
774 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
776 testONNXModels("transpose");
779 TEST_P(Test_ONNX_layers, Multiplication)
781 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
782 applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
783 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD)
784 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
785 testONNXModels("mul");
788 TEST_P(Test_ONNX_layers, MatMul)
790 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
791 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
793 testONNXModels("matmul_2d");
794 testONNXModels("matmul_3d");
795 testONNXModels("matmul_4d");
798 TEST_P(Test_ONNX_layers, MatMulAdd)
800 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
801 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
802 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
803 applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
804 testONNXModels("matmul_add");
807 TEST_P(Test_ONNX_layers, Expand)
809 testONNXModels("expand");
810 testONNXModels("expand_identity");
811 testONNXModels("expand_batch");
812 testONNXModels("expand_channels");
813 testONNXModels("expand_neg_batch");
816 TEST_P(Test_ONNX_layers, ExpandHW)
818 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
819 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
820 testONNXModels("expand_hw");
823 TEST_P(Test_ONNX_layers, Constant)
825 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2018050000)
826 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD
827 && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
828 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
830 testONNXModels("constant");
833 TEST_P(Test_ONNX_layers, Padding)
835 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2019010000)
836 testONNXModels("padding", npy, 0, 0, false, false);
838 testONNXModels("padding");
842 TEST_P(Test_ONNX_layers, Resize)
844 testONNXModels("resize_nearest");
845 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
846 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
847 testONNXModels("resize_bilinear");
850 TEST_P(Test_ONNX_layers, ResizeUnfused)
852 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
853 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
854 testONNXModels("upsample_unfused_torch1.2");
855 testONNXModels("upsample_unfused_opset9_torch1.4");
856 testONNXModels("resize_nearest_unfused_opset11_torch1.4");
857 testONNXModels("resize_nearest_unfused_opset11_torch1.3");
858 testONNXModels("resize_bilinear_unfused_opset11_torch1.4");
861 TEST_P(Test_ONNX_layers, ResizeUnfusedTwoInputs)
863 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
864 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
865 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
866 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
867 testONNXModels("upsample_unfused_two_inputs_opset9_torch1.4", npy, 0, 0, false, true, 2);
868 testONNXModels("upsample_unfused_two_inputs_opset11_torch1.4", npy, 0, 0, false, true, 2);
871 TEST_P(Test_ONNX_layers, MultyInputs)
873 testONNXModels("multy_inputs", npy, 0, 0, false, true, 2);
876 TEST_P(Test_ONNX_layers, Broadcast)
878 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
879 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
880 testONNXModels("channel_broadcast", npy, 0, 0, false, true, 2);
883 TEST_P(Test_ONNX_layers, DynamicResize)
885 testONNXModels("dynamic_resize_9", npy, 0, 0, false, true, 2);
886 testONNXModels("dynamic_resize_10", npy, 0, 0, false, true, 2);
887 testONNXModels("dynamic_resize_11", npy, 0, 0, false, true, 2);
888 testONNXModels("dynamic_resize_scale_9", npy, 0, 0, false, true, 2);
889 testONNXModels("dynamic_resize_scale_10", npy, 0, 0, false, true, 2);
890 testONNXModels("dynamic_resize_scale_11", npy, 0, 0, false, true, 2);
893 TEST_P(Test_ONNX_layers, Resize_HumanSeg)
895 testONNXModels("resize_humanseg");
898 TEST_P(Test_ONNX_layers, Div)
900 const String model = _tf("models/div.onnx");
901 Net net = readNetFromONNX(model);
902 ASSERT_FALSE(net.empty());
904 net.setPreferableBackend(backend);
905 net.setPreferableTarget(target);
907 // Reference output values range is -68.80928, 2.991873. So to avoid computational
908 // difference for FP16 we'll perform reversed division (just swap inputs).
909 Mat inp1 = blobFromNPY(_tf("data/input_div_1.npy"));
910 Mat inp2 = blobFromNPY(_tf("data/input_div_0.npy"));
911 Mat ref = blobFromNPY(_tf("data/output_div.npy"));
912 cv::divide(1.0, ref, ref);
913 checkBackend(&inp1, &ref);
915 net.setInput(inp1, "0");
916 net.setInput(inp2, "1");
917 Mat out = net.forward();
919 normAssert(ref, out, "", default_l1, default_lInf);
920 expectNoFallbacksFromIE(net);
921 expectNoFallbacksFromCUDA(net);
924 TEST_P(Test_ONNX_layers, DynamicReshape)
926 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
927 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
929 testONNXModels("dynamic_reshape");
930 testONNXModels("dynamic_reshape_opset_11");
931 testONNXModels("flatten_by_prod");
932 testONNXModels("flatten_const");
935 TEST_P(Test_ONNX_layers, Reshape)
937 testONNXModels("unsqueeze");
938 testONNXModels("unsqueeze_opset_13");
941 TEST_P(Test_ONNX_layers, Squeeze)
943 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD)
944 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
945 testONNXModels("squeeze");
948 TEST_P(Test_ONNX_layers, ReduceL2)
950 testONNXModels("reduceL2");
951 testONNXModels("reduceL2_subgraph");
952 testONNXModels("reduceL2_subgraph_2");
953 testONNXModels("reduceL2_subgraph2_2");
956 TEST_P(Test_ONNX_layers, Split)
958 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
959 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
960 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
961 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
962 testONNXModels("split_1");
963 testONNXModels("split_2");
964 testONNXModels("split_3");
965 testONNXModels("split_4");
966 testONNXModels("split_sizes");
967 testONNXModels("split_neg_axis");
970 TEST_P(Test_ONNX_layers, Slice)
972 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2019010000)
973 testONNXModels("slice", npy, 0, 0, false, false);
975 testONNXModels("slice");
976 testONNXModels("slice_neg_starts");
977 testONNXModels("slice_opset_11");
981 TEST_P(Test_ONNX_layers, Slice_Steps_2DInput)
983 testONNXModels("slice_opset_11_steps_2d");
986 TEST_P(Test_ONNX_layers, Slice_Steps_3DInput)
988 testONNXModels("slice_opset_11_steps_3d");
991 TEST_P(Test_ONNX_layers, Slice_Steps_4DInput)
993 testONNXModels("slice_opset_11_steps_4d");
996 TEST_P(Test_ONNX_layers, Slice_Steps_5DInput)
998 testONNXModels("slice_opset_11_steps_5d");
1001 TEST_P(Test_ONNX_layers, Softmax)
1003 testONNXModels("softmax");
1004 testONNXModels("log_softmax", npy, 0, 0, false, false);
1005 testONNXModels("softmax_unfused");
1008 TEST_P(Test_ONNX_layers, Split_EltwiseMax)
1010 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1011 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1012 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1013 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1014 testONNXModels("split_max");
1017 TEST_P(Test_ONNX_layers, LSTM_Activations)
1019 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1020 // IE Exception: Ngraph operation Reshape with name Block1237_Output_0_before_reshape has dynamic output shape on 0 port, but CPU plug-in supports only static shape
1021 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1022 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1023 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1027 testONNXModels("lstm_cntk_tanh", pb, 0, 0, false, false);
1030 TEST_P(Test_ONNX_layers, LSTM)
1032 testONNXModels("lstm", npy, 0, 0, false, false);
1035 TEST_P(Test_ONNX_layers, LSTM_bidirectional)
1037 testONNXModels("lstm_bidirectional", npy, 0, 0, false, false);
1040 TEST_P(Test_ONNX_layers, LSTM_hidden)
1042 testONNXModels("hidden_lstm", npy, 0, 0, false, false);
1045 TEST_P(Test_ONNX_layers, LSTM_hidden_bidirectional)
1047 testONNXModels("hidden_lstm_bi", npy, 0, 0, false, false);
1050 TEST_P(Test_ONNX_layers, GRU)
1052 testONNXModels("gru", npy, 0, 0, false, false);
1055 TEST_P(Test_ONNX_layers, GRU_bidirectional)
1057 testONNXModels("gru_bi", npy, 0, 0, false, false);
1060 TEST_P(Test_ONNX_layers, Pad2d_Unfused)
1062 testONNXModels("ReflectionPad2d");
1063 testONNXModels("ZeroPad2d");
1066 TEST_P(Test_ONNX_layers, LinearWithConstant)
1068 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1069 applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
1070 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2020040000)
1071 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE);
1073 if (backend == DNN_BACKEND_CUDA)
1074 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA);
1075 testONNXModels("lin_with_constant");
1078 TEST_P(Test_ONNX_layers, MatmulWithTwoInputs)
1080 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1081 applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
1082 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2020040000)
1083 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE);
1085 testONNXModels("matmul_with_two_inputs");
1088 TEST_P(Test_ONNX_layers, ResizeOpset11_Torch1_6)
1090 testONNXModels("resize_opset11_torch1.6");
1093 TEST_P(Test_ONNX_layers, Mish)
1095 testONNXModels("mish");
1098 TEST_P(Test_ONNX_layers, CalculatePads)
1100 testONNXModels("calc_pads");
1103 TEST_P(Test_ONNX_layers, Conv1d)
1105 testONNXModels("conv1d");
1108 TEST_P(Test_ONNX_layers, Conv1d_bias)
1110 testONNXModels("conv1d_bias");
1113 TEST_P(Test_ONNX_layers, Conv1d_variable_weight)
1115 if (backend == DNN_BACKEND_CUDA)
1116 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); // not supported
1117 if (backend == DNN_BACKEND_VKCOM)
1118 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN); // not supported
1119 String basename = "conv1d_variable_w";
1120 Net net = readNetFromONNX(_tf("models/" + basename + ".onnx"));
1121 ASSERT_FALSE(net.empty());
1123 net.setPreferableBackend(backend);
1124 net.setPreferableTarget(target);
1126 Mat input = blobFromNPY(_tf("data/input_" + basename + "_0.npy"));
1127 Mat weights = blobFromNPY(_tf("data/input_" + basename + "_1.npy"));
1128 Mat ref = blobFromNPY(_tf("data/output_" + basename + ".npy"));
1130 net.setInput(input, "0");
1131 net.setInput(weights, "1");
1133 Mat out = net.forward();
1134 normAssert(ref, out, "", default_l1, default_lInf);
1137 TEST_P(Test_ONNX_layers, Conv1d_variable_weight_bias)
1139 if (backend == DNN_BACKEND_CUDA)
1140 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); // not supported
1141 if (backend == DNN_BACKEND_VKCOM)
1142 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN); // not supported
1143 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1145 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1146 if (target == DNN_TARGET_CPU && getInferenceEngineCPUType() == CV_DNN_INFERENCE_ENGINE_CPU_TYPE_ARM_COMPUTE)
1147 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_ARM_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1149 String basename = "conv1d_variable_wb";
1150 Net net = readNetFromONNX(_tf("models/" + basename + ".onnx"));
1151 ASSERT_FALSE(net.empty());
1153 net.setPreferableBackend(backend);
1154 net.setPreferableTarget(target);
1156 Mat input = blobFromNPY(_tf("data/input_" + basename + "_0.npy"));
1157 Mat weights = blobFromNPY(_tf("data/input_" + basename + "_1.npy"));
1158 Mat bias = blobFromNPY(_tf("data/input_" + basename + "_2.npy"));
1159 Mat ref = blobFromNPY(_tf("data/output_" + basename + ".npy"));
1161 net.setInput(input, "0");
1162 net.setInput(weights, "1");
1163 net.setInput(bias, "bias");
1165 Mat out = net.forward();
1166 normAssert(ref, out, "", default_l1, default_lInf);
1169 TEST_P(Test_ONNX_layers, GatherMultiOutput)
1171 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1172 // IE Exception: Ngraph operation Reshape with name 6 has dynamic output shape on 0 port, but CPU plug-in supports only static shape
1173 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1174 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1175 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1178 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021030000)
1179 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL)
1180 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1181 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
1182 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1185 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LE(2021030000)
1186 if (target == DNN_TARGET_MYRIAD)
1187 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE);
1190 testONNXModels("gather_multi_output");
1193 TEST_P(Test_ONNX_layers, DynamicAxes_squeeze_and_conv)
1195 #if defined(INF_ENGINE_RELEASE)
1196 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1198 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1200 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1201 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1203 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1207 testONNXModels("squeeze_and_conv_dynamic_axes");
1210 TEST_P(Test_ONNX_layers, DynamicAxes_unsqueeze_and_conv)
1212 #if defined(INF_ENGINE_RELEASE)
1213 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1215 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1217 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1218 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1220 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1224 testONNXModels("unsqueeze_and_conv_dynamic_axes");
1227 TEST_P(Test_ONNX_layers, DynamicAxes_gather)
1229 #if defined(INF_ENGINE_RELEASE)
1230 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1232 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1234 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1235 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1237 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1241 testONNXModels("gather_dynamic_axes");
1244 TEST_P(Test_ONNX_layers, DynamicAxes_gather_scalar)
1246 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1248 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1249 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1250 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1253 #if defined(INF_ENGINE_RELEASE)
1254 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1256 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1258 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1259 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1261 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1265 testONNXModels("gather_scalar_dynamic_axes");
1268 TEST_P(Test_ONNX_layers, DynamicAxes_slice)
1270 #if defined(INF_ENGINE_RELEASE)
1271 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1273 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1275 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1276 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1278 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1282 testONNXModels("slice_dynamic_axes");
1285 TEST_P(Test_ONNX_layers, DynamicAxes_slice_opset_11)
1287 #if defined(INF_ENGINE_RELEASE)
1288 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1290 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1292 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1293 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1295 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1299 testONNXModels("slice_opset_11_dynamic_axes");
1302 TEST_P(Test_ONNX_layers, DynamicAxes_resize_opset11_torch16)
1304 #if defined(INF_ENGINE_RELEASE)
1305 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1307 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1309 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1310 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1312 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1316 testONNXModels("resize_opset11_torch1.6_dynamic_axes");
1319 TEST_P(Test_ONNX_layers, DynamicAxes_average_pooling)
1321 #if defined(INF_ENGINE_RELEASE)
1322 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1324 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1326 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1327 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1329 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1333 testONNXModels("average_pooling_dynamic_axes");
1336 TEST_P(Test_ONNX_layers, DynamicAxes_maxpooling_sigmoid)
1338 #if defined(INF_ENGINE_RELEASE)
1339 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1341 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1343 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1344 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1346 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1350 testONNXModels("maxpooling_sigmoid_dynamic_axes");
1353 TEST_P(Test_ONNX_layers, DynamicAxes_dynamic_batch)
1355 #if defined(INF_ENGINE_RELEASE)
1356 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1358 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1360 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1361 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1363 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1367 testONNXModels("dynamic_batch");
1371 TEST_P(Test_ONNX_layers, MaxPool1d)
1373 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1374 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1376 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1378 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1380 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1383 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_GE(2021040000)
1384 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
1386 // 2021.4: [ GENERAL_ERROR ] AssertionFailed: !expired()
1387 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1390 testONNXModels("maxpooling_1d");
1393 TEST_P(Test_ONNX_layers, MaxPoolSigmoid1d)
1395 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1396 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1398 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1400 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1402 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1405 testONNXModels("maxpooling_sigmoid_1d");
1408 TEST_P(Test_ONNX_layers, MaxPool1d_Twise)
1410 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1411 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1413 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1415 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1417 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1420 testONNXModels("two_maxpooling_1d");
1423 TEST_P(Test_ONNX_layers, AvePool1d)
1425 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1426 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1428 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1430 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1432 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1435 testONNXModels("average_pooling_1d");
1438 TEST_P(Test_ONNX_layers, PoolConv1d)
1440 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1441 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1443 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1445 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1447 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1450 testONNXModels("pool_conv_1d");
1453 TEST_P(Test_ONNX_layers, ConvResizePool1d)
1455 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1456 // IE Exception: Ngraph operation Reshape with name 15 has dynamic output shape on 0 port, but CPU plug-in supports only static shape
1457 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1458 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1459 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1462 #if defined(INF_ENGINE_RELEASE)
1463 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1465 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1467 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1469 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1470 #if INF_ENGINE_VER_MAJOR_EQ(2021030000)
1471 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1472 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1476 testONNXModels("conv_resize_pool_1d");
1479 TEST_P(Test_ONNX_layers, SubFromConst)
1481 testONNXModels("sub_from_const1");
1482 testONNXModels("sub_from_const_eltwise");
1483 testONNXModels("sub_from_const_broadcast");
1486 TEST_P(Test_ONNX_layers, DivConst)
1488 testONNXModels("div_const");
1492 TEST_P(Test_ONNX_layers, Quantized_Convolution)
1494 testONNXModels("quantized_conv_uint8_weights", npy, 0.004, 0.02);
1495 testONNXModels("quantized_conv_int8_weights", npy, 0.03, 0.5);
1496 testONNXModels("quantized_conv_per_channel_weights", npy, 0.06, 0.4);
1499 TEST_P(Test_ONNX_layers, Quantized_MatMul)
1501 testONNXModels("quantized_matmul_uint8_weights", npy, 0.005, 0.007);
1502 testONNXModels("quantized_matmul_int8_weights", npy, 0.06, 0.2);
1503 testONNXModels("quantized_matmul_per_channel_weights", npy, 0.06, 0.22);
1506 TEST_P(Test_ONNX_layers, Quantized_MatMul_Variable_Weights)
1511 testONNXModels("quantized_matmul_variable_inputs");
1515 TEST_P(Test_ONNX_layers, Quantized_Eltwise)
1517 testONNXModels("quantized_eltwise");
1520 TEST_P(Test_ONNX_layers, Quantized_Eltwise_Scalar)
1522 testONNXModels("quantized_eltwise_scalar");
1525 TEST_P(Test_ONNX_layers, Quantized_Eltwise_Broadcast)
1527 testONNXModels("quantized_eltwise_broadcast");
1530 TEST_P(Test_ONNX_layers, Quantized_LeakyReLU)
1532 testONNXModels("quantized_leaky_relu");
1535 TEST_P(Test_ONNX_layers, Quantized_Sigmoid)
1537 testONNXModels("quantized_sigmoid");
1540 TEST_P(Test_ONNX_layers, Quantized_MaxPool)
1542 testONNXModels("quantized_maxpool");
1545 TEST_P(Test_ONNX_layers, Quantized_AvgPool)
1547 testONNXModels("quantized_avgpool");
1550 TEST_P(Test_ONNX_layers, Quantized_Split)
1552 testONNXModels("quantized_split");
1555 TEST_P(Test_ONNX_layers, Quantized_Pad)
1557 testONNXModels("quantized_padding");
1560 TEST_P(Test_ONNX_layers, Quantized_Reshape)
1562 testONNXModels("quantized_reshape");
1565 TEST_P(Test_ONNX_layers, Quantized_Transpose)
1567 testONNXModels("quantized_transpose");
1570 TEST_P(Test_ONNX_layers, Quantized_Squeeze)
1572 testONNXModels("quantized_squeeze");
1575 TEST_P(Test_ONNX_layers, Quantized_Unsqueeze)
1577 testONNXModels("quantized_unsqueeze");
1580 TEST_P(Test_ONNX_layers, Quantized_Resize)
1582 testONNXModels("quantized_resize_nearest");
1583 testONNXModels("quantized_resize_bilinear", npy, 2e-4, 0.003);
1584 testONNXModels("quantized_resize_bilinear_align", npy, 3e-4, 0.003);
1587 TEST_P(Test_ONNX_layers, Quantized_Concat)
1589 testONNXModels("quantized_concat");
1590 testONNXModels("quantized_concat_const_blob");
1593 TEST_P(Test_ONNX_layers, Quantized_Constant)
1595 testONNXModels("quantized_constant", npy, 0.002, 0.008);
1598 INSTANTIATE_TEST_CASE_P(/*nothing*/, Test_ONNX_layers, dnnBackendsAndTargets());
1600 class Test_ONNX_nets : public Test_ONNX_layers
1603 Test_ONNX_nets() { required = false; }
1606 TEST_P(Test_ONNX_nets, Alexnet)
1608 #if defined(OPENCV_32BIT_CONFIGURATION) && (defined(HAVE_OPENCL) || defined(_WIN32))
1609 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1611 applyTestTag(target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB);
1614 const String model = _tf("models/alexnet.onnx", false);
1616 Net net = readNetFromONNX(model);
1617 ASSERT_FALSE(net.empty());
1619 net.setPreferableBackend(backend);
1620 net.setPreferableTarget(target);
1622 Mat inp = imread(_tf("../grace_hopper_227.png"));
1623 Mat ref = blobFromNPY(_tf("../caffe_alexnet_prob.npy"));
1624 checkBackend(&inp, &ref);
1626 net.setInput(blobFromImage(inp, 1.0f, Size(227, 227), Scalar(), false));
1627 ASSERT_FALSE(net.empty());
1628 Mat out = net.forward();
1630 normAssert(out, ref, "", default_l1, default_lInf);
1631 expectNoFallbacksFromIE(net);
1634 TEST_P(Test_ONNX_nets, Squeezenet)
1636 testONNXModels("squeezenet", pb);
1639 TEST_P(Test_ONNX_nets, Googlenet)
1641 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1642 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1643 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1645 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1646 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1648 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1650 if (target == DNN_TARGET_MYRIAD)
1651 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1654 const String model = _tf("models/googlenet.onnx", false);
1656 Net net = readNetFromONNX(model);
1657 ASSERT_FALSE(net.empty());
1659 net.setPreferableBackend(backend);
1660 net.setPreferableTarget(target);
1662 std::vector<Mat> images;
1663 images.push_back( imread(_tf("../googlenet_0.png")) );
1664 images.push_back( imread(_tf("../googlenet_1.png")) );
1665 Mat inp = blobFromImages(images, 1.0f, Size(), Scalar(), false);
1666 Mat ref = blobFromNPY(_tf("../googlenet_prob.npy"));
1667 checkBackend(&inp, &ref);
1670 ASSERT_FALSE(net.empty());
1671 Mat out = net.forward();
1673 normAssert(ref, out, "", default_l1, default_lInf);
1674 expectNoFallbacksFromIE(net);
1677 TEST_P(Test_ONNX_nets, CaffeNet)
1679 #if defined(OPENCV_32BIT_CONFIGURATION) && (defined(HAVE_OPENCL) || defined(_WIN32))
1680 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1682 applyTestTag(target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB);
1685 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2019030000)
1686 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD
1687 && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
1688 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1690 testONNXModels("caffenet", pb);
1693 TEST_P(Test_ONNX_nets, RCNN_ILSVRC13)
1695 #if defined(OPENCV_32BIT_CONFIGURATION) && (defined(HAVE_OPENCL) || defined(_WIN32))
1696 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1698 applyTestTag(target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB);
1701 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2019030000)
1702 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD
1703 && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
1704 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1706 // Reference output values are in range [-4.992, -1.161]
1707 testONNXModels("rcnn_ilsvrc13", pb, 0.0046);
1710 TEST_P(Test_ONNX_nets, VGG16_bn)
1712 applyTestTag(CV_TEST_TAG_MEMORY_6GB); // > 2.3Gb
1714 // output range: [-16; 27], after Softmax [0; 0.67]
1715 const double lInf = (target == DNN_TARGET_MYRIAD) ? 0.038 : default_lInf;
1716 testONNXModels("vgg16-bn", pb, default_l1, lInf, true);
1719 TEST_P(Test_ONNX_nets, ZFNet)
1721 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1722 testONNXModels("zfnet512", pb);
1725 TEST_P(Test_ONNX_nets, ResNet18v1)
1727 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1729 // output range: [-16; 22], after Softmax [0, 0.51]
1730 testONNXModels("resnet18v1", pb, default_l1, default_lInf, true, target != DNN_TARGET_MYRIAD);
1733 TEST_P(Test_ONNX_nets, ResNet50v1)
1735 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1737 // output range: [-67; 75], after Softmax [0, 0.98]
1738 testONNXModels("resnet50v1", pb, default_l1, default_lInf, true, target != DNN_TARGET_MYRIAD);
1741 TEST_P(Test_ONNX_nets, ResNet50_Int8)
1743 testONNXModels("resnet50_int8", pb, default_l1, default_lInf, true);
1746 TEST_P(Test_ONNX_nets, ResNet101_DUC_HDC)
1748 applyTestTag(CV_TEST_TAG_VERYLONG);
1750 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_GE(2019010000)
1751 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1752 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1754 #if defined(INF_ENGINE_RELEASE)
1755 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD)
1756 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1758 if (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_OPENCL)
1760 if (backend == DNN_BACKEND_OPENCV)
1761 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_OPENCL : CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
1762 throw SkipTestException("Test is disabled for OpenCL targets");
1764 testONNXModels("resnet101_duc_hdc", pb);
1767 TEST_P(Test_ONNX_nets, TinyYolov2)
1769 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1771 if (cvtest::skipUnstableTests)
1772 throw SkipTestException("Skip unstable test");
1773 #if defined(INF_ENGINE_RELEASE)
1774 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019
1775 && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
1777 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1779 if (target == DNN_TARGET_MYRIAD && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X
1781 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X,
1782 backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ?
1783 CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER :
1784 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1787 // output range: [-11; 8]
1788 double l1 = default_l1, lInf = default_lInf;
1789 if (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD)
1794 else if (target == DNN_TARGET_CUDA_FP16)
1799 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2020040000)
1800 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
1802 l1 = 0.018f; lInf = 0.16f;
1806 testONNXModels("tiny_yolo2", pb, l1, lInf);
1809 TEST_P(Test_ONNX_nets, CNN_MNIST)
1811 // output range: [-1952; 6574], after Softmax [0; 1]
1812 testONNXModels("cnn_mnist", pb, default_l1, default_lInf, true);
1815 TEST_P(Test_ONNX_nets, MobileNet_v2)
1817 // output range: [-166; 317], after Softmax [0; 1]
1818 testONNXModels("mobilenetv2", pb, default_l1, default_lInf, true);
1821 TEST_P(Test_ONNX_nets, LResNet100E_IR)
1824 #if defined(OPENCV_32BIT_CONFIGURATION) && defined(HAVE_OPENCL)
1825 CV_TEST_TAG_MEMORY_2GB,
1827 (target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB),
1829 CV_TEST_TAG_DEBUG_LONG
1831 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1833 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1834 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1835 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1837 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1839 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1840 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1841 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1844 double l1 = default_l1, lInf = default_lInf;
1845 // output range: [-3; 3]
1846 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1851 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_CPU)
1856 else if (target == DNN_TARGET_CUDA_FP16)
1861 testONNXModels("LResNet100E_IR", pb, l1, lInf);
1864 TEST_P(Test_ONNX_nets, Emotion_ferplus)
1866 #if defined(INF_ENGINE_RELEASE)
1867 if (target == DNN_TARGET_MYRIAD && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
1868 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X,
1869 backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ?
1870 CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER :
1871 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1874 double l1 = default_l1;
1875 double lInf = default_lInf;
1877 // Output values are in range [-2.011, 2.111]
1878 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1880 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_OPENCL_FP16)
1885 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && (target == DNN_TARGET_CPU || target == DNN_TARGET_OPENCL)) {
1889 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_GE(2020040000)
1890 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
1892 l1 = 0.013f; lInf = 0.035f;
1896 testONNXModels("emotion_ferplus", pb, l1, lInf);
1899 TEST_P(Test_ONNX_nets, Inception_v2)
1901 testONNXModels("inception_v2", pb, default_l1, default_lInf, true);
1904 TEST_P(Test_ONNX_nets, DenseNet121)
1906 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1908 // output range: [-87; 138], after Softmax [0; 1]
1909 testONNXModels("densenet121", pb, default_l1, default_lInf, true, target != DNN_TARGET_MYRIAD);
1912 TEST_P(Test_ONNX_nets, Inception_v1)
1914 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1915 if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
1916 backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_MYRIAD)
1917 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD);
1919 testONNXModels("inception_v1", pb);
1922 TEST_P(Test_ONNX_nets, Shufflenet)
1924 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1925 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1927 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1928 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1929 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1932 testONNXModels("shufflenet", pb);
1935 TEST_P(Test_ONNX_nets, Resnet34_kinetics)
1937 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1938 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
1939 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER); // Only CPU on DLIE backend is supported
1940 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
1941 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // Only CPU on DLIE backend is supported
1943 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1944 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1946 // IE exception: Function contains several inputs and outputs with one friendly name!
1947 if (target == DNN_TARGET_MYRIAD)
1948 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1951 if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
1952 throw SkipTestException("Only CPU is supported"); // FIXIT use tags
1954 if (backend == DNN_BACKEND_VKCOM)
1955 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
1957 String onnxmodel = findDataFile("dnn/resnet-34_kinetics.onnx", false);
1958 Mat image0 = imread(findDataFile("dnn/dog416.png"));
1959 Mat image1 = imread(findDataFile("dnn/street.png"));
1961 Mat ref0 = blobFromNPY(_tf("data/output_kinetics0.npy"));
1962 Mat ref1 = blobFromNPY(_tf("data/output_kinetics1.npy"));
1964 std::vector<Mat> images_0(16, image0);
1965 std::vector<Mat> images_1(16, image1);
1966 Mat blob0 = blobFromImages(images_0, 1.0, Size(112, 112), Scalar(114.7748, 107.7354, 99.4750), true, true);
1967 Mat blob1 = blobFromImages(images_1, 1.0, Size(112, 112), Scalar(114.7748, 107.7354, 99.4750), true, true);
1971 int order[] = {1, 0, 2, 3};
1972 lp.set("order", DictValue::arrayInt<int*>(&order[0], 4));
1973 permute.addLayerToPrev("perm", "Permute", lp);
1975 permute.setPreferableBackend(backend);
1976 permute.setPreferableTarget(target);
1978 permute.setInput(blob0);
1979 Mat input0 = permute.forward().clone();
1981 permute.setInput(blob1);
1982 Mat input1 = permute.forward().clone();
1984 int dims[] = {1, 3, 16, 112, 112};
1985 input0 = input0.reshape(0, 5, &dims[0]);
1986 input1 = input1.reshape(0, 5, &dims[0]);
1988 Net net = readNetFromONNX(onnxmodel);
1989 ASSERT_FALSE(net.empty());
1990 net.setPreferableBackend(backend);
1991 net.setPreferableTarget(target);
1993 // output range [-5, 11]
1996 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
2001 if (target == DNN_TARGET_CUDA_FP16)
2007 checkBackend(&input0, &ref0);
2008 net.setInput(input0);
2009 Mat out = net.forward().clone();
2010 normAssert(ref0, out, "", l1, lInf);
2012 checkBackend(&input1, &ref1);
2013 net.setInput(input1);
2014 out = net.forward().clone();
2015 normAssert(ref1, out, "", l1, lInf);
2017 expectNoFallbacksFromIE(net);
2020 TEST_P(Test_ONNX_layers, CumSum)
2022 testONNXModels("cumsum_1d_exclusive_1");
2023 testONNXModels("cumsum_1d_reverse");
2024 testONNXModels("cumsum_1d_exclusive_1_reverse");
2025 testONNXModels("cumsum_2d_dim_1");
2026 testONNXModels("cumsum_3d_dim_2");
2029 INSTANTIATE_TEST_CASE_P(/**/, Test_ONNX_nets, dnnBackendsAndTargets());