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_13", npy, 0, 0, false, true, 2);
889 testONNXModels("dynamic_resize_scale_9", npy, 0, 0, false, true, 2);
890 testONNXModels("dynamic_resize_scale_10", npy, 0, 0, false, true, 2);
891 testONNXModels("dynamic_resize_scale_11", npy, 0, 0, false, true, 2);
892 testONNXModels("dynamic_resize_scale_13", npy, 0, 0, false, true, 2);
894 testONNXModels("resize_size_opset11");
895 testONNXModels("resize_size_opset13");
898 TEST_P(Test_ONNX_layers, Resize_HumanSeg)
900 testONNXModels("resize_humanseg");
903 TEST_P(Test_ONNX_layers, Div)
905 const String model = _tf("models/div.onnx");
906 Net net = readNetFromONNX(model);
907 ASSERT_FALSE(net.empty());
909 net.setPreferableBackend(backend);
910 net.setPreferableTarget(target);
912 // Reference output values range is -68.80928, 2.991873. So to avoid computational
913 // difference for FP16 we'll perform reversed division (just swap inputs).
914 Mat inp1 = blobFromNPY(_tf("data/input_div_1.npy"));
915 Mat inp2 = blobFromNPY(_tf("data/input_div_0.npy"));
916 Mat ref = blobFromNPY(_tf("data/output_div.npy"));
917 cv::divide(1.0, ref, ref);
918 checkBackend(&inp1, &ref);
920 net.setInput(inp1, "0");
921 net.setInput(inp2, "1");
922 Mat out = net.forward();
924 normAssert(ref, out, "", default_l1, default_lInf);
925 expectNoFallbacksFromIE(net);
926 expectNoFallbacksFromCUDA(net);
929 TEST_P(Test_ONNX_layers, DynamicReshape)
931 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
932 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
934 testONNXModels("dynamic_reshape");
935 testONNXModels("dynamic_reshape_opset_11");
936 testONNXModels("flatten_by_prod");
937 testONNXModels("flatten_const");
940 TEST_P(Test_ONNX_layers, Reshape)
942 testONNXModels("unsqueeze");
943 testONNXModels("unsqueeze_opset_13");
946 TEST_P(Test_ONNX_layers, Squeeze)
948 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD)
949 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
950 testONNXModels("squeeze");
953 TEST_P(Test_ONNX_layers, ReduceL2)
955 testONNXModels("reduceL2");
956 testONNXModels("reduceL2_subgraph");
957 testONNXModels("reduceL2_subgraph_2");
958 testONNXModels("reduceL2_subgraph2_2");
961 TEST_P(Test_ONNX_layers, Split)
963 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
964 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
965 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
966 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
967 testONNXModels("split_1");
968 testONNXModels("split_2");
969 testONNXModels("split_3");
970 testONNXModels("split_4");
971 testONNXModels("split_sizes");
972 testONNXModels("split_neg_axis");
975 TEST_P(Test_ONNX_layers, Slice)
977 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2019010000)
978 testONNXModels("slice", npy, 0, 0, false, false);
980 testONNXModels("slice");
981 testONNXModels("slice_neg_starts");
982 testONNXModels("slice_opset_11");
986 TEST_P(Test_ONNX_layers, Slice_Steps_2DInput)
988 testONNXModels("slice_opset_11_steps_2d");
991 TEST_P(Test_ONNX_layers, Slice_Steps_3DInput)
993 testONNXModels("slice_opset_11_steps_3d");
996 TEST_P(Test_ONNX_layers, Slice_Steps_4DInput)
998 testONNXModels("slice_opset_11_steps_4d");
1001 TEST_P(Test_ONNX_layers, Slice_Steps_5DInput)
1003 testONNXModels("slice_opset_11_steps_5d");
1006 TEST_P(Test_ONNX_layers, Softmax)
1008 testONNXModels("softmax");
1009 testONNXModels("log_softmax", npy, 0, 0, false, false);
1010 testONNXModels("softmax_unfused");
1013 TEST_P(Test_ONNX_layers, Split_EltwiseMax)
1015 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1016 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1017 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1018 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1019 testONNXModels("split_max");
1022 TEST_P(Test_ONNX_layers, LSTM_Activations)
1024 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1025 // 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
1026 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1027 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1028 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1032 testONNXModels("lstm_cntk_tanh", pb, 0, 0, false, false);
1035 TEST_P(Test_ONNX_layers, LSTM)
1037 testONNXModels("lstm", npy, 0, 0, false, false);
1040 TEST_P(Test_ONNX_layers, LSTM_bidirectional)
1042 testONNXModels("lstm_bidirectional", npy, 0, 0, false, false);
1045 TEST_P(Test_ONNX_layers, LSTM_hidden)
1047 testONNXModels("hidden_lstm", npy, 0, 0, false, false);
1050 TEST_P(Test_ONNX_layers, LSTM_hidden_bidirectional)
1052 testONNXModels("hidden_lstm_bi", npy, 0, 0, false, false);
1055 TEST_P(Test_ONNX_layers, GRU)
1057 testONNXModels("gru", npy, 0, 0, false, false);
1060 TEST_P(Test_ONNX_layers, GRU_bidirectional)
1062 testONNXModels("gru_bi", npy, 0, 0, false, false);
1065 TEST_P(Test_ONNX_layers, Pad2d_Unfused)
1067 testONNXModels("ReflectionPad2d");
1068 testONNXModels("ZeroPad2d");
1071 TEST_P(Test_ONNX_layers, LinearWithConstant)
1073 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1074 applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
1075 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2020040000)
1076 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE);
1078 if (backend == DNN_BACKEND_CUDA)
1079 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA);
1080 testONNXModels("lin_with_constant");
1083 TEST_P(Test_ONNX_layers, MatmulWithTwoInputs)
1085 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1086 applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
1087 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2020040000)
1088 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE);
1090 testONNXModels("matmul_with_two_inputs");
1093 TEST_P(Test_ONNX_layers, ResizeOpset11_Torch1_6)
1095 testONNXModels("resize_opset11_torch1.6");
1098 TEST_P(Test_ONNX_layers, Mish)
1100 testONNXModels("mish");
1103 TEST_P(Test_ONNX_layers, CalculatePads)
1105 testONNXModels("calc_pads");
1108 TEST_P(Test_ONNX_layers, Conv1d)
1110 testONNXModels("conv1d");
1113 TEST_P(Test_ONNX_layers, Conv1d_bias)
1115 testONNXModels("conv1d_bias");
1118 TEST_P(Test_ONNX_layers, Conv1d_variable_weight)
1120 if (backend == DNN_BACKEND_CUDA)
1121 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); // not supported
1122 if (backend == DNN_BACKEND_VKCOM)
1123 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN); // not supported
1124 String basename = "conv1d_variable_w";
1125 Net net = readNetFromONNX(_tf("models/" + basename + ".onnx"));
1126 ASSERT_FALSE(net.empty());
1128 net.setPreferableBackend(backend);
1129 net.setPreferableTarget(target);
1131 Mat input = blobFromNPY(_tf("data/input_" + basename + "_0.npy"));
1132 Mat weights = blobFromNPY(_tf("data/input_" + basename + "_1.npy"));
1133 Mat ref = blobFromNPY(_tf("data/output_" + basename + ".npy"));
1135 net.setInput(input, "0");
1136 net.setInput(weights, "1");
1138 Mat out = net.forward();
1139 normAssert(ref, out, "", default_l1, default_lInf);
1142 TEST_P(Test_ONNX_layers, Conv1d_variable_weight_bias)
1144 if (backend == DNN_BACKEND_CUDA)
1145 applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); // not supported
1146 if (backend == DNN_BACKEND_VKCOM)
1147 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN); // not supported
1148 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1150 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1151 if (target == DNN_TARGET_CPU && getInferenceEngineCPUType() == CV_DNN_INFERENCE_ENGINE_CPU_TYPE_ARM_COMPUTE)
1152 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_ARM_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1154 String basename = "conv1d_variable_wb";
1155 Net net = readNetFromONNX(_tf("models/" + basename + ".onnx"));
1156 ASSERT_FALSE(net.empty());
1158 net.setPreferableBackend(backend);
1159 net.setPreferableTarget(target);
1161 Mat input = blobFromNPY(_tf("data/input_" + basename + "_0.npy"));
1162 Mat weights = blobFromNPY(_tf("data/input_" + basename + "_1.npy"));
1163 Mat bias = blobFromNPY(_tf("data/input_" + basename + "_2.npy"));
1164 Mat ref = blobFromNPY(_tf("data/output_" + basename + ".npy"));
1166 net.setInput(input, "0");
1167 net.setInput(weights, "1");
1168 net.setInput(bias, "bias");
1170 Mat out = net.forward();
1171 normAssert(ref, out, "", default_l1, default_lInf);
1174 TEST_P(Test_ONNX_layers, GatherMultiOutput)
1176 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1177 // IE Exception: Ngraph operation Reshape with name 6 has dynamic output shape on 0 port, but CPU plug-in supports only static shape
1178 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1179 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1180 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1183 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021030000)
1184 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL)
1185 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1186 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
1187 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1190 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LE(2021030000)
1191 if (target == DNN_TARGET_MYRIAD)
1192 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE);
1195 testONNXModels("gather_multi_output");
1198 TEST_P(Test_ONNX_layers, DynamicAxes_squeeze_and_conv)
1200 #if defined(INF_ENGINE_RELEASE)
1201 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1203 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1205 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1206 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1208 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1212 testONNXModels("squeeze_and_conv_dynamic_axes");
1215 TEST_P(Test_ONNX_layers, DynamicAxes_unsqueeze_and_conv)
1217 #if defined(INF_ENGINE_RELEASE)
1218 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1220 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1222 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1223 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1225 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1229 testONNXModels("unsqueeze_and_conv_dynamic_axes");
1232 TEST_P(Test_ONNX_layers, DynamicAxes_gather)
1234 #if defined(INF_ENGINE_RELEASE)
1235 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1237 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1239 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1240 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1242 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1246 testONNXModels("gather_dynamic_axes");
1249 TEST_P(Test_ONNX_layers, DynamicAxes_gather_scalar)
1251 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1253 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1254 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1255 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1258 #if defined(INF_ENGINE_RELEASE)
1259 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1261 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1263 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1264 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1266 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1270 testONNXModels("gather_scalar_dynamic_axes");
1273 TEST_P(Test_ONNX_layers, DynamicAxes_slice)
1275 #if defined(INF_ENGINE_RELEASE)
1276 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1278 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1280 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1281 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1283 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1287 testONNXModels("slice_dynamic_axes");
1290 TEST_P(Test_ONNX_layers, DynamicAxes_slice_opset_11)
1292 #if defined(INF_ENGINE_RELEASE)
1293 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1295 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1297 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1298 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1300 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1304 testONNXModels("slice_opset_11_dynamic_axes");
1307 TEST_P(Test_ONNX_layers, DynamicAxes_resize_opset11_torch16)
1309 #if defined(INF_ENGINE_RELEASE)
1310 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1312 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1314 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1315 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1317 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1321 testONNXModels("resize_opset11_torch1.6_dynamic_axes");
1324 TEST_P(Test_ONNX_layers, DynamicAxes_average_pooling)
1326 #if defined(INF_ENGINE_RELEASE)
1327 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1329 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1331 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1332 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1334 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1338 testONNXModels("average_pooling_dynamic_axes");
1341 TEST_P(Test_ONNX_layers, DynamicAxes_maxpooling_sigmoid)
1343 #if defined(INF_ENGINE_RELEASE)
1344 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1346 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1348 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1349 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1351 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1355 testONNXModels("maxpooling_sigmoid_dynamic_axes");
1358 TEST_P(Test_ONNX_layers, DynamicAxes_dynamic_batch)
1360 #if defined(INF_ENGINE_RELEASE)
1361 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1363 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1365 #if INF_ENGINE_VER_MAJOR_LT(2021000000)
1366 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1368 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1372 testONNXModels("dynamic_batch");
1376 TEST_P(Test_ONNX_layers, MaxPool1d)
1378 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1379 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1381 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1383 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1385 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1388 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_GE(2021040000)
1389 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
1391 // 2021.4: [ GENERAL_ERROR ] AssertionFailed: !expired()
1392 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1395 testONNXModels("maxpooling_1d");
1398 TEST_P(Test_ONNX_layers, MaxPoolSigmoid1d)
1400 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1401 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1403 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1405 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1407 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1410 testONNXModels("maxpooling_sigmoid_1d");
1413 TEST_P(Test_ONNX_layers, MaxPool1d_Twise)
1415 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1416 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1418 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1420 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1422 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1425 testONNXModels("two_maxpooling_1d");
1428 TEST_P(Test_ONNX_layers, AvePool1d)
1430 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1431 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1433 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1435 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1437 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1440 testONNXModels("average_pooling_1d");
1443 TEST_P(Test_ONNX_layers, PoolConv1d)
1445 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1446 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1448 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1450 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1452 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1455 testONNXModels("pool_conv_1d");
1458 TEST_P(Test_ONNX_layers, ConvResizePool1d)
1460 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1461 // IE Exception: Ngraph operation Reshape with name 15 has dynamic output shape on 0 port, but CPU plug-in supports only static shape
1462 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
1463 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_IE_OPENCL : CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16,
1464 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
1467 #if defined(INF_ENGINE_RELEASE)
1468 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1470 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1472 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1474 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1475 #if INF_ENGINE_VER_MAJOR_EQ(2021030000)
1476 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1477 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
1481 testONNXModels("conv_resize_pool_1d");
1484 TEST_P(Test_ONNX_layers, SubFromConst)
1486 testONNXModels("sub_from_const1");
1487 testONNXModels("sub_from_const_eltwise");
1488 testONNXModels("sub_from_const_broadcast");
1491 TEST_P(Test_ONNX_layers, DivConst)
1493 testONNXModels("div_const");
1497 TEST_P(Test_ONNX_layers, Quantized_Convolution)
1499 testONNXModels("quantized_conv_uint8_weights", npy, 0.004, 0.02);
1500 testONNXModels("quantized_conv_int8_weights", npy, 0.03, 0.5);
1501 testONNXModels("quantized_conv_per_channel_weights", npy, 0.06, 0.4);
1504 TEST_P(Test_ONNX_layers, Quantized_MatMul)
1506 testONNXModels("quantized_matmul_uint8_weights", npy, 0.005, 0.007);
1507 testONNXModels("quantized_matmul_int8_weights", npy, 0.06, 0.2);
1508 testONNXModels("quantized_matmul_per_channel_weights", npy, 0.06, 0.22);
1511 TEST_P(Test_ONNX_layers, Quantized_MatMul_Variable_Weights)
1516 testONNXModels("quantized_matmul_variable_inputs");
1520 TEST_P(Test_ONNX_layers, Quantized_Eltwise)
1522 testONNXModels("quantized_eltwise");
1525 TEST_P(Test_ONNX_layers, Quantized_Eltwise_Scalar)
1527 testONNXModels("quantized_eltwise_scalar");
1530 TEST_P(Test_ONNX_layers, Quantized_Eltwise_Broadcast)
1532 testONNXModels("quantized_eltwise_broadcast");
1535 TEST_P(Test_ONNX_layers, Quantized_LeakyReLU)
1537 testONNXModels("quantized_leaky_relu");
1540 TEST_P(Test_ONNX_layers, Quantized_Sigmoid)
1542 testONNXModels("quantized_sigmoid");
1545 TEST_P(Test_ONNX_layers, Quantized_MaxPool)
1547 testONNXModels("quantized_maxpool");
1550 TEST_P(Test_ONNX_layers, Quantized_AvgPool)
1552 testONNXModels("quantized_avgpool");
1555 TEST_P(Test_ONNX_layers, Quantized_Split)
1557 testONNXModels("quantized_split");
1560 TEST_P(Test_ONNX_layers, Quantized_Pad)
1562 testONNXModels("quantized_padding");
1565 TEST_P(Test_ONNX_layers, Quantized_Reshape)
1567 testONNXModels("quantized_reshape");
1570 TEST_P(Test_ONNX_layers, Quantized_Transpose)
1572 testONNXModels("quantized_transpose");
1575 TEST_P(Test_ONNX_layers, Quantized_Squeeze)
1577 testONNXModels("quantized_squeeze");
1580 TEST_P(Test_ONNX_layers, Quantized_Unsqueeze)
1582 testONNXModels("quantized_unsqueeze");
1585 TEST_P(Test_ONNX_layers, Quantized_Resize)
1587 testONNXModels("quantized_resize_nearest");
1588 testONNXModels("quantized_resize_bilinear", npy, 2e-4, 0.003);
1589 testONNXModels("quantized_resize_bilinear_align", npy, 3e-4, 0.003);
1592 TEST_P(Test_ONNX_layers, Quantized_Concat)
1594 testONNXModels("quantized_concat");
1595 testONNXModels("quantized_concat_const_blob");
1598 TEST_P(Test_ONNX_layers, Quantized_Constant)
1600 testONNXModels("quantized_constant", npy, 0.002, 0.008);
1603 INSTANTIATE_TEST_CASE_P(/*nothing*/, Test_ONNX_layers, dnnBackendsAndTargets());
1605 class Test_ONNX_nets : public Test_ONNX_layers
1608 Test_ONNX_nets() { required = false; }
1611 TEST_P(Test_ONNX_nets, Alexnet)
1613 #if defined(OPENCV_32BIT_CONFIGURATION) && (defined(HAVE_OPENCL) || defined(_WIN32))
1614 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1616 applyTestTag(target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB);
1619 const String model = _tf("models/alexnet.onnx", false);
1621 Net net = readNetFromONNX(model);
1622 ASSERT_FALSE(net.empty());
1624 net.setPreferableBackend(backend);
1625 net.setPreferableTarget(target);
1627 Mat inp = imread(_tf("../grace_hopper_227.png"));
1628 Mat ref = blobFromNPY(_tf("../caffe_alexnet_prob.npy"));
1629 checkBackend(&inp, &ref);
1631 net.setInput(blobFromImage(inp, 1.0f, Size(227, 227), Scalar(), false));
1632 ASSERT_FALSE(net.empty());
1633 Mat out = net.forward();
1635 normAssert(out, ref, "", default_l1, default_lInf);
1636 expectNoFallbacksFromIE(net);
1639 TEST_P(Test_ONNX_nets, Squeezenet)
1641 testONNXModels("squeezenet", pb);
1644 TEST_P(Test_ONNX_nets, Googlenet)
1646 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1647 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1648 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1650 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1651 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1653 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1655 if (target == DNN_TARGET_MYRIAD)
1656 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1659 const String model = _tf("models/googlenet.onnx", false);
1661 Net net = readNetFromONNX(model);
1662 ASSERT_FALSE(net.empty());
1664 net.setPreferableBackend(backend);
1665 net.setPreferableTarget(target);
1667 std::vector<Mat> images;
1668 images.push_back( imread(_tf("../googlenet_0.png")) );
1669 images.push_back( imread(_tf("../googlenet_1.png")) );
1670 Mat inp = blobFromImages(images, 1.0f, Size(), Scalar(), false);
1671 Mat ref = blobFromNPY(_tf("../googlenet_prob.npy"));
1672 checkBackend(&inp, &ref);
1675 ASSERT_FALSE(net.empty());
1676 Mat out = net.forward();
1678 normAssert(ref, out, "", default_l1, default_lInf);
1679 expectNoFallbacksFromIE(net);
1682 TEST_P(Test_ONNX_nets, CaffeNet)
1684 #if defined(OPENCV_32BIT_CONFIGURATION) && (defined(HAVE_OPENCL) || defined(_WIN32))
1685 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1687 applyTestTag(target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB);
1690 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2019030000)
1691 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD
1692 && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
1693 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1695 testONNXModels("caffenet", pb);
1698 TEST_P(Test_ONNX_nets, RCNN_ILSVRC13)
1700 #if defined(OPENCV_32BIT_CONFIGURATION) && (defined(HAVE_OPENCL) || defined(_WIN32))
1701 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1703 applyTestTag(target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB);
1706 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2019030000)
1707 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD
1708 && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
1709 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1711 // Reference output values are in range [-4.992, -1.161]
1712 testONNXModels("rcnn_ilsvrc13", pb, 0.0046);
1715 TEST_P(Test_ONNX_nets, VGG16_bn)
1717 applyTestTag(CV_TEST_TAG_MEMORY_6GB); // > 2.3Gb
1719 // output range: [-16; 27], after Softmax [0; 0.67]
1720 const double lInf = (target == DNN_TARGET_MYRIAD) ? 0.038 : default_lInf;
1721 testONNXModels("vgg16-bn", pb, default_l1, lInf, true);
1724 TEST_P(Test_ONNX_nets, ZFNet)
1726 applyTestTag(CV_TEST_TAG_MEMORY_2GB);
1727 testONNXModels("zfnet512", pb);
1730 TEST_P(Test_ONNX_nets, ResNet18v1)
1732 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1734 // output range: [-16; 22], after Softmax [0, 0.51]
1735 testONNXModels("resnet18v1", pb, default_l1, default_lInf, true, target != DNN_TARGET_MYRIAD);
1738 TEST_P(Test_ONNX_nets, ResNet50v1)
1740 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1742 // output range: [-67; 75], after Softmax [0, 0.98]
1743 testONNXModels("resnet50v1", pb, default_l1, default_lInf, true, target != DNN_TARGET_MYRIAD);
1746 TEST_P(Test_ONNX_nets, ResNet50_Int8)
1748 testONNXModels("resnet50_int8", pb, default_l1, default_lInf, true);
1751 TEST_P(Test_ONNX_nets, ResNet101_DUC_HDC)
1753 applyTestTag(CV_TEST_TAG_VERYLONG);
1755 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_GE(2019010000)
1756 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1757 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1759 #if defined(INF_ENGINE_RELEASE)
1760 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_MYRIAD)
1761 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1763 if (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_OPENCL)
1765 if (backend == DNN_BACKEND_OPENCV)
1766 applyTestTag(target == DNN_TARGET_OPENCL ? CV_TEST_TAG_DNN_SKIP_OPENCL : CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
1767 throw SkipTestException("Test is disabled for OpenCL targets");
1769 testONNXModels("resnet101_duc_hdc", pb);
1772 TEST_P(Test_ONNX_nets, TinyYolov2)
1774 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1776 if (cvtest::skipUnstableTests)
1777 throw SkipTestException("Skip unstable test");
1778 #if defined(INF_ENGINE_RELEASE)
1779 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019
1780 && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16)
1782 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);
1784 if (target == DNN_TARGET_MYRIAD && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X
1786 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X,
1787 backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ?
1788 CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER :
1789 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1792 // output range: [-11; 8]
1793 double l1 = default_l1, lInf = default_lInf;
1794 if (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD)
1799 else if (target == DNN_TARGET_CUDA_FP16)
1804 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2020040000)
1805 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
1807 l1 = 0.018f; lInf = 0.16f;
1811 testONNXModels("tiny_yolo2", pb, l1, lInf);
1814 TEST_P(Test_ONNX_nets, CNN_MNIST)
1816 // output range: [-1952; 6574], after Softmax [0; 1]
1817 testONNXModels("cnn_mnist", pb, default_l1, default_lInf, true);
1820 TEST_P(Test_ONNX_nets, MobileNet_v2)
1822 // output range: [-166; 317], after Softmax [0; 1]
1823 testONNXModels("mobilenetv2", pb, default_l1, default_lInf, true);
1826 TEST_P(Test_ONNX_nets, LResNet100E_IR)
1829 #if defined(OPENCV_32BIT_CONFIGURATION) && defined(HAVE_OPENCL)
1830 CV_TEST_TAG_MEMORY_2GB,
1832 (target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_512MB : CV_TEST_TAG_MEMORY_1GB),
1834 CV_TEST_TAG_DEBUG_LONG
1836 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1838 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1839 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1840 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1842 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1844 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1845 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1846 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1849 double l1 = default_l1, lInf = default_lInf;
1850 // output range: [-3; 3]
1851 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1856 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_CPU)
1861 else if (target == DNN_TARGET_CUDA_FP16)
1866 testONNXModels("LResNet100E_IR", pb, l1, lInf);
1869 TEST_P(Test_ONNX_nets, Emotion_ferplus)
1871 #if defined(INF_ENGINE_RELEASE)
1872 if (target == DNN_TARGET_MYRIAD && getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
1873 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X,
1874 backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ?
1875 CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER :
1876 CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
1879 double l1 = default_l1;
1880 double lInf = default_lInf;
1882 // Output values are in range [-2.011, 2.111]
1883 if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
1885 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target == DNN_TARGET_OPENCL_FP16)
1890 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && (target == DNN_TARGET_CPU || target == DNN_TARGET_OPENCL)) {
1894 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_GE(2020040000)
1895 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
1897 l1 = 0.013f; lInf = 0.035f;
1901 testONNXModels("emotion_ferplus", pb, l1, lInf);
1904 TEST_P(Test_ONNX_nets, Inception_v2)
1906 testONNXModels("inception_v2", pb, default_l1, default_lInf, true);
1909 TEST_P(Test_ONNX_nets, DenseNet121)
1911 applyTestTag(CV_TEST_TAG_MEMORY_512MB);
1913 // output range: [-87; 138], after Softmax [0; 1]
1914 testONNXModels("densenet121", pb, default_l1, default_lInf, true, target != DNN_TARGET_MYRIAD);
1917 TEST_P(Test_ONNX_nets, Inception_v1)
1919 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1920 if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
1921 backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_MYRIAD)
1922 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD);
1924 testONNXModels("inception_v1", pb);
1927 TEST_P(Test_ONNX_nets, Shufflenet)
1929 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1930 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
1932 if (target == DNN_TARGET_OPENCL_FP16) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1933 if (target == DNN_TARGET_OPENCL) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1934 if (target == DNN_TARGET_MYRIAD) applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
1937 testONNXModels("shufflenet", pb);
1940 TEST_P(Test_ONNX_nets, Resnet34_kinetics)
1942 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
1943 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
1944 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER); // Only CPU on DLIE backend is supported
1945 else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
1946 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // Only CPU on DLIE backend is supported
1948 #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
1949 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
1951 // IE exception: Function contains several inputs and outputs with one friendly name!
1952 if (target == DNN_TARGET_MYRIAD)
1953 applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
1956 if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
1957 throw SkipTestException("Only CPU is supported"); // FIXIT use tags
1959 if (backend == DNN_BACKEND_VKCOM)
1960 applyTestTag(CV_TEST_TAG_DNN_SKIP_VULKAN);
1962 String onnxmodel = findDataFile("dnn/resnet-34_kinetics.onnx", false);
1963 Mat image0 = imread(findDataFile("dnn/dog416.png"));
1964 Mat image1 = imread(findDataFile("dnn/street.png"));
1966 Mat ref0 = blobFromNPY(_tf("data/output_kinetics0.npy"));
1967 Mat ref1 = blobFromNPY(_tf("data/output_kinetics1.npy"));
1969 std::vector<Mat> images_0(16, image0);
1970 std::vector<Mat> images_1(16, image1);
1971 Mat blob0 = blobFromImages(images_0, 1.0, Size(112, 112), Scalar(114.7748, 107.7354, 99.4750), true, true);
1972 Mat blob1 = blobFromImages(images_1, 1.0, Size(112, 112), Scalar(114.7748, 107.7354, 99.4750), true, true);
1976 int order[] = {1, 0, 2, 3};
1977 lp.set("order", DictValue::arrayInt<int*>(&order[0], 4));
1978 permute.addLayerToPrev("perm", "Permute", lp);
1980 permute.setPreferableBackend(backend);
1981 permute.setPreferableTarget(target);
1983 permute.setInput(blob0);
1984 Mat input0 = permute.forward().clone();
1986 permute.setInput(blob1);
1987 Mat input1 = permute.forward().clone();
1989 int dims[] = {1, 3, 16, 112, 112};
1990 input0 = input0.reshape(0, 5, &dims[0]);
1991 input1 = input1.reshape(0, 5, &dims[0]);
1993 Net net = readNetFromONNX(onnxmodel);
1994 ASSERT_FALSE(net.empty());
1995 net.setPreferableBackend(backend);
1996 net.setPreferableTarget(target);
1998 // output range [-5, 11]
2001 if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
2006 if (target == DNN_TARGET_CUDA_FP16)
2012 checkBackend(&input0, &ref0);
2013 net.setInput(input0);
2014 Mat out = net.forward().clone();
2015 normAssert(ref0, out, "", l1, lInf);
2017 checkBackend(&input1, &ref1);
2018 net.setInput(input1);
2019 out = net.forward().clone();
2020 normAssert(ref1, out, "", l1, lInf);
2022 expectNoFallbacksFromIE(net);
2025 TEST_P(Test_ONNX_layers, CumSum)
2027 testONNXModels("cumsum_1d_exclusive_1");
2028 testONNXModels("cumsum_1d_reverse");
2029 testONNXModels("cumsum_1d_exclusive_1_reverse");
2030 testONNXModels("cumsum_2d_dim_1");
2031 testONNXModels("cumsum_3d_dim_2");
2034 INSTANTIATE_TEST_CASE_P(/**/, Test_ONNX_nets, dnnBackendsAndTargets());