Merge remote-tracking branch 'upstream/3.4' into merge-3.4
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sat, 2 Apr 2022 19:45:44 +0000 (19:45 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sat, 2 Apr 2022 19:45:44 +0000 (19:45 +0000)
1  2 
modules/dnn/test/test_backends.cpp
modules/dnn/test/test_caffe_importer.cpp
modules/dnn/test/test_darknet_importer.cpp
modules/dnn/test/test_halide_layers.cpp
modules/dnn/test/test_layers.cpp
modules/dnn/test/test_onnx_importer.cpp
modules/dnn/test/test_tf_importer.cpp
modules/dnn/test/test_torch_importer.cpp
modules/python/src2/gen2.py

@@@ -464,19 -424,10 +478,19 @@@ TEST_P(DNNTestNetwork, Inception_v2_SSD
          applyTestTag(CV_TEST_TAG_DNN_SKIP_HALIDE);
      Mat sample = imread(findDataFile("dnn/street.png"));
      Mat inp = blobFromImage(sample, 1.0f, Size(300, 300), Scalar(), false);
 -    float l1 = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.02 : 0.0;
 -    float lInf = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.1 : 0.0;
 +    float scoreDiff = 0.0, iouDiff = 0.0;
 +    if (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD)
 +    {
-         scoreDiff = 0.015;
-         iouDiff = 0.0731;
++        scoreDiff = 0.02;
++        iouDiff = 0.1;
 +    }
 +    else if (target == DNN_TARGET_CUDA_FP16)
 +    {
 +        scoreDiff = 0.015;
 +        iouDiff = 0.08;
 +    }
      processNet("dnn/ssd_inception_v2_coco_2017_11_17.pb", "dnn/ssd_inception_v2_coco_2017_11_17.pbtxt",
 -               inp, "detection_out", "", l1, lInf);
 +               inp, "detection_out", "", scoreDiff, iouDiff);
      expectNoFallbacksFromIE(net);
  }
  
@@@ -531,17 -474,22 +545,31 @@@ TEST_P(DNNTestNetwork, FastNeuralStyle_
      Mat img = imread(findDataFile("dnn/googlenet_1.png"));
      Mat inp = blobFromImage(img, 1.0, Size(320, 240), Scalar(103.939, 116.779, 123.68), false, false);
      // Output image has values in range [-143.526, 148.539].
 -    float l1 = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.4 : 4e-5;
 -    float lInf = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 7.45 : 2e-3;
 +    float l1 = 4e-5, lInf = 2e-3;
 +    if (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD)
 +    {
 +        l1 = 0.4;
 +        lInf = 7.45;
 +    }
 +    else if (target == DNN_TARGET_CUDA_FP16)
 +    {
 +        l1 = 0.3;
 +        lInf = 7.6;
 +    }
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL)
+     {
+         l1 = 5e-3;
+         lInf = 5e-3;
+     }
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
+     {
+         lInf = 25;
+     }
+ #endif
      processNet("dnn/fast_neural_style_eccv16_starry_night.t7", "", inp, "", "", l1, lInf);
  #if defined(HAVE_INF_ENGINE) && INF_ENGINE_VER_MAJOR_GE(2019010000)
      expectNoFallbacksFromIE(net);
@@@ -763,28 -753,43 +782,53 @@@ TEST_P(Test_Caffe_nets, RFCN
          CV_TEST_TAG_LONG,
          CV_TEST_TAG_DEBUG_VERYLONG
      );
- #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
-     // Exception: Function contains several inputs and outputs with one friendly name! (HETERO bug?)
-     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
- #endif
-     if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
-          backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_OPENCL_FP16)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16);
-     if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
-          backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_MYRIAD)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD);
 -    double scoreDiff = (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16) ? 4e-3 : default_l1;
 -    double iouDiff = (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16) ? 8e-2 : default_lInf;
 +    float scoreDiff = default_l1, iouDiff = default_lInf;
 +    if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
 +    {
 +        scoreDiff = 4e-3;
 +        iouDiff = 8e-2;
 +    }
 +    if (target == DNN_TARGET_CUDA_FP16)
 +    {
 +        scoreDiff = 0.0034;
 +        iouDiff = 0.12;
 +    }
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
+     // Exception: Cannot get memory!
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+     // Sporadic: "Cannot get memory!"
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
+         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_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
+         );
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
+     {
+         scoreDiff = 0.1f;
+         iouDiff = 0.2f;
+     }
+     // Check 'backward_compatible_check || in_out_elements_equal' failed at core/src/op/reshape.cpp:427:
+     // While validating node 'v1::Reshape bbox_pred_reshape (ave_bbox_pred_rois[0]:f32{1,8,1,1}, Constant_388[0]:i64{4}) -> (f32{?,?,?,?})' with friendly_name 'bbox_pred_reshape':
+     // Requested output shape {1,300,8,1} is incompatible with input shape {1, 8, 1, 1}
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+ #elif defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
+     // Exception: Function contains several inputs and outputs with one friendly name! (HETERO bug?)
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+ #elif defined(INF_ENGINE_RELEASE)
+     if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
+          backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_OPENCL_FP16)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16);
+     if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
+          backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_MYRIAD)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD);
+ #endif
++
      static Mat ref = (Mat_<float>(2, 7) << 0, 7, 0.991359, 491.822, 81.1668, 702.573, 178.234,
                                             0, 12, 0.94786, 132.093, 223.903, 338.077, 566.16);
      testFaster("rfcn_pascal_voc_resnet50.prototxt", "resnet50_rfcn_final.caffemodel", ref, scoreDiff, iouDiff);
@@@ -354,12 -360,7 +359,12 @@@ TEST_P(Test_Darknet_nets, YoloVoc
          scoreDiff = 1e-2;
          iouDiff = 0.018;
      }
- #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
 +    else if (target == DNN_TARGET_CUDA_FP16)
 +    {
 +        scoreDiff = 0.03;
 +        iouDiff = 0.018;
 +    }
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
      // accuracy
      if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
      {
Simple merge
@@@ -1083,20 -900,38 +1196,48 @@@ TEST_P(Test_ONNX_layers, LSTM_hidden_bi
      testONNXModels("hidden_lstm_bi", npy, 0, 0, false, false);
  }
  
- TEST_P(Test_ONNX_layers, LSTM_cell)
 +TEST_P(Test_ONNX_layers, GRU)
 +{
 +    testONNXModels("gru", npy, 0, 0, false, false);
 +}
 +
 +TEST_P(Test_ONNX_layers, GRU_bidirectional)
 +{
 +    testONNXModels("gru_bi", npy, 0, 0, false, false);
 +}
 +
+ TEST_P(Test_ONNX_layers, LSTM_cell_forward)
  {
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
+     // accuracy!
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+ #elif defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
+     // Ngraph operation Reshape with name LSTM_16/lstm_y/reshape has dynamic output shape on 0 port, but CPU plug-in supports only static shape
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+ #endif
      testONNXModels("lstm_cell_forward", npy, 0, 0, false, false);
+ }
+ TEST_P(Test_ONNX_layers, LSTM_cell_bidirectional)
+ {
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
+     // Cannot get memory!
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+ #elif defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
+     // Ngraph operation Reshape with name LSTM_16/lstm_y/reshape has dynamic output shape on 0 port, but CPU plug-in supports only static shape
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+ #endif
      testONNXModels("lstm_cell_bidirectional", npy, 0, 0, false, false);
+ }
+ TEST_P(Test_ONNX_layers, LSTM_cell_with_peepholes)
+ {
      testONNXModels("lstm_cell_with_peepholes", npy, 0, 0, false, false);
  }
  
@@@ -617,11 -652,10 +666,10 @@@ TEST_P(Test_TensorFlow_layers, MaxPooli
          if (target == DNN_TARGET_MYRIAD)
              applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
      }
- #endif
- #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
+ #elif defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
      if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && target != DNN_TARGET_CPU)
          applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);  // Only CPU on DLIE backend is supported
 -    if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
 +    else if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target != DNN_TARGET_CPU)
          applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);  // Only CPU on DLIE backend is supported
  #endif
      if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
@@@ -1081,10 -1033,8 +1146,11 @@@ TEST_P(Test_TensorFlow_nets, Faster_RCN
      if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_OPENCL_FP16)
          applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
  #endif
+ #endif
  
 +    if (backend == DNN_BACKEND_CUDA && target == DNN_TARGET_CUDA_FP16)
 +        applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA_FP16);
 +
      checkBackend();
  
      double scoresDiff = backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ? 2.9e-5 : 1e-5;
@@@ -1362,15 -1305,11 +1449,13 @@@ TEST_P(Test_TensorFlow_layers, quantize
  
  TEST_P(Test_TensorFlow_layers, lstm)
  {
- #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
-     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
-     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
- #endif
- #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
 +    if(backend == DNN_BACKEND_CUDA)
 +        applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); /* not supported */
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
+     // Xlink, Failed to allocate graph: NC_ERROR
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+ #elif defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
      if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
      {
          // Exception: Ngraph operation Reshape with name Reshape has dynamic output shape on 0 port, but CPU plug-in supports only static shape
@@@ -1564,15 -1535,16 +1681,18 @@@ TEST_P(Test_TensorFlow_layers, clip_by_
  
  TEST_P(Test_TensorFlow_layers, tf2_prelu)
  {
- #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_LT(2021040000)
-     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER);
-     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
- #endif
- #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
 +    if (backend == DNN_BACKEND_CUDA)
 +        applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); // not supported; only across channels is supported
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
+     // Eltwise executor got invalid input/output dims configuration
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+     // Input prelu:StatefulPartitionedCall/StatefulPartitionedCall/sequential/p_re_lu/add hasn't been found in primitiveIDs map
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
+         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_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
+         );
+ #elif defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021040000)
      if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
      {
          // IE exception: Input prelu:StatefulPartitionedCall/StatefulPartitionedCall/sequential/p_re_lu/add hasn't been found in primitiveIDs map
@@@ -285,8 -255,19 +285,23 @@@ TEST_P(Test_Torch_layers, net_inception
  
  TEST_P(Test_Torch_layers, net_normalize)
  {
 +    if(backend == DNN_BACKEND_CUDA)
 +        applyTestTag(CV_TEST_TAG_DNN_SKIP_CUDA); /* only L1 and L2 norms are supported */
++
+ #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2022010000)
+     // Cannot get memory!
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_CPU)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_CPU, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+     // Cannot get memory!
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
+         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
+     // Cannot get memory!
+     if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && (target == DNN_TARGET_OPENCL || target == DNN_TARGET_OPENCL_FP16))
+         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_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION
+         );
+ #endif
++
      runTorchNet("net_normalize", "", false, true);
  }
  
Simple merge