Merge remote-tracking branch 'upstream/3.4' into merge-3.4
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Wed, 21 Nov 2018 08:33:39 +0000 (08:33 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Wed, 21 Nov 2018 08:33:39 +0000 (08:33 +0000)
14 files changed:
1  2 
CMakeLists.txt
modules/core/CMakeLists.txt
modules/core/include/opencv2/core/cvdef.h
modules/core/include/opencv2/core/types.hpp
modules/core/src/parallel.cpp
modules/core/src/system.cpp
modules/dnn/include/opencv2/dnn/dnn.hpp
modules/dnn/include/opencv2/dnn/version.hpp
modules/dnn/src/dnn.cpp
modules/dnn/src/layers/convolution_layer.cpp
modules/dnn/src/op_inf_engine.cpp
modules/dnn/test/test_common.hpp
modules/dnn/test/test_misc.cpp
modules/features2d/src/draw.cpp

diff --cc CMakeLists.txt
@@@ -323,9 -327,8 +323,8 @@@ OCV_OPTION(ENABLE_PROFILING           "
  OCV_OPTION(ENABLE_COVERAGE            "Enable coverage collection with  GCov"                    OFF  IF CV_GCC )
  OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CV_GCC )
  OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CV_GCC AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
- OCV_OPTION(ENABLE_VSX                 "Enable POWER8 and above VSX (64-bit little-endian)"       ON   IF ((CV_GCC OR CV_CLANG) AND PPC64LE) )
  OCV_OPTION(ENABLE_FAST_MATH           "Enable -ffast-math (not recommended for GCC 4.6.x)"       OFF  IF (CV_GCC AND (X86 OR X86_64)) )
 -if(NOT IOS)  # Use CPU_BASELINE instead
 +if(NOT IOS AND (NOT ANDROID OR OPENCV_ANDROID_USE_LEGACY_FLAGS))  # Use CPU_BASELINE instead
  OCV_OPTION(ENABLE_NEON                "Enable NEON instructions"                                 (NEON OR ANDROID_ARM_NEON OR AARCH64) IF (CV_GCC OR CV_CLANG) AND (ARM OR AARCH64 OR IOS) )
  OCV_OPTION(ENABLE_VFPV3               "Enable VFPv3-D32 instructions"                            OFF  IF (CV_GCC OR CV_CLANG) AND (ARM OR AARCH64 OR IOS) )
  endif()
Simple merge
Simple merge
Simple merge
@@@ -83,7 -89,8 +83,9 @@@ CV__DNN_INLINE_NS_BEGI
          DNN_TARGET_OPENCL,
          DNN_TARGET_OPENCL_FP16,
          DNN_TARGET_MYRIAD,
-         DNN_TARGET_VULKAN
++        DNN_TARGET_VULKAN,
+         //! FPGA device with CPU fallbacks using Inference Engine's Heterogeneous plugin.
+         DNN_TARGET_FPGA
      };
  
      /** @brief This class provides all data needed to initialize layer.
index ff9faa0,0000000..62f0dd4
mode 100644,000000..100644
--- /dev/null
@@@ -1,21 -1,0 +1,21 @@@
- #define OPENCV_DNN_API_VERSION 20180917
 +// This file is part of OpenCV project.
 +// It is subject to the license terms in the LICENSE file found in the top-level directory
 +// of this distribution and at http://opencv.org/license.html.
 +
 +#ifndef OPENCV_DNN_VERSION_HPP
 +#define OPENCV_DNN_VERSION_HPP
 +
 +/// Use with major OpenCV version only.
++#define OPENCV_DNN_API_VERSION 20181121
 +
 +#if !defined CV_DOXYGEN && !defined CV_DNN_DONT_ADD_INLINE_NS
 +#define CV__DNN_INLINE_NS __CV_CAT(dnn4_v, OPENCV_DNN_API_VERSION)
 +#define CV__DNN_INLINE_NS_BEGIN namespace CV__DNN_INLINE_NS {
 +#define CV__DNN_INLINE_NS_END }
 +namespace cv { namespace dnn { namespace CV__DNN_INLINE_NS { } using namespace CV__DNN_INLINE_NS; }}
 +#else
 +#define CV__DNN_INLINE_NS_BEGIN
 +#define CV__DNN_INLINE_NS_END
 +#endif
 +
 +#endif  // OPENCV_DNN_VERSION_HPP
@@@ -1104,9 -1077,8 +1104,10 @@@ struct Net::Imp
                    preferableTarget == DNN_TARGET_CPU ||
                    preferableTarget == DNN_TARGET_OPENCL ||
                    preferableTarget == DNN_TARGET_OPENCL_FP16 ||
-                   preferableTarget == DNN_TARGET_MYRIAD);
+                   preferableTarget == DNN_TARGET_MYRIAD ||
+                   preferableTarget == DNN_TARGET_FPGA);
 +        CV_Assert(preferableBackend != DNN_BACKEND_VKCOM ||
 +                  preferableTarget == DNN_TARGET_VULKAN);
          if (!netWasAllocated || this->blobsToKeep != blobsToKeep_)
          {
              if (preferableBackend == DNN_BACKEND_OPENCV && IS_DNN_OPENCL_TARGET(preferableTarget))
@@@ -220,12 -219,15 +220,17 @@@ public
  
      virtual bool supportBackend(int backendId) CV_OVERRIDE
      {
+ #ifdef HAVE_INF_ENGINE
          if (backendId == DNN_BACKEND_INFERENCE_ENGINE)
-             return preferableTarget != DNN_TARGET_MYRIAD || dilation.width == dilation.height;
+         {
+             return INF_ENGINE_VER_MAJOR_GE(INF_ENGINE_RELEASE_2018R4) ||
+                    (preferableTarget != DNN_TARGET_MYRIAD || dilation.width == dilation.height);
+         }
          else
 -            return backendId == DNN_BACKEND_OPENCV || backendId == DNN_BACKEND_HALIDE;
+ #endif
 +            return backendId == DNN_BACKEND_OPENCV ||
 +                   backendId == DNN_BACKEND_HALIDE ||
 +                   (backendId == DNN_BACKEND_VKCOM && haveVulkan());
      }
  
      bool getMemoryShapes(const std::vector<MatShape> &inputs,
@@@ -312,12 -313,13 +313,13 @@@ InferenceEngine::TargetDevice InfEngine
      return const_cast<const InfEngineBackendNet*>(this)->getTargetDevice();
  }
  
 -InferenceEngine::TargetDevice InfEngineBackendNet::getTargetDevice() const noexcept
 +InferenceEngine::TargetDevice InfEngineBackendNet::getTargetDevice() const CV_NOEXCEPT
  {
-     return targetDevice;
+     return targetDevice == InferenceEngine::TargetDevice::eFPGA ?
+            InferenceEngine::TargetDevice::eHETERO : targetDevice;
  }
  
 -InferenceEngine::StatusCode InfEngineBackendNet::setBatchSize(const size_t) noexcept
 +InferenceEngine::StatusCode InfEngineBackendNet::setBatchSize(const size_t) CV_NOEXCEPT
  {
      CV_Error(Error::StsNotImplemented, "");
      return InferenceEngine::StatusCode::OK;
@@@ -67,7 -66,7 +67,8 @@@ static inline void PrintTo(const cv::dn
      case DNN_TARGET_OPENCL: *os << "OCL"; return;
      case DNN_TARGET_OPENCL_FP16: *os << "OCL_FP16"; return;
      case DNN_TARGET_MYRIAD: *os << "MYRIAD"; return;
 +    case DNN_TARGET_VULKAN: *os << "VULKAN"; return;
+     case DNN_TARGET_FPGA: *os << "FPGA"; return;
      } // don't use "default:" to emit compiler warnings
      *os << "DNN_TARGET_UNKNOWN(" << (int)v << ")";
  }
Simple merge
Simple merge