#include "opencv2/core/ocl.hpp"
#endif
+#define CV_TEST_TAG_DNN_SKIP_HALIDE "dnn_skip_halide"
+#define CV_TEST_TAG_DNN_SKIP_OPENCL "dnn_skip_ocl"
+#define CV_TEST_TAG_DNN_SKIP_OPENCL_FP16 "dnn_skip_ocl_fp16"
+#define CV_TEST_TAG_DNN_SKIP_IE "dnn_skip_ie"
+#define CV_TEST_TAG_DNN_SKIP_IE_2018R5 "dnn_skip_ie_2018r5"
+#define CV_TEST_TAG_DNN_SKIP_IE_2019R1 "dnn_skip_ie_2019r1"
+#define CV_TEST_TAG_DNN_SKIP_IE_2019R1_1 "dnn_skip_ie_2019r1_1"
+#define CV_TEST_TAG_DNN_SKIP_IE_2019R2 "dnn_skip_ie_2019r2"
+#define CV_TEST_TAG_DNN_SKIP_IE_2019R3 "dnn_skip_ie_2019r3"
+#define CV_TEST_TAG_DNN_SKIP_IE_OPENCL "dnn_skip_ie_ocl"
+#define CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16 "dnn_skip_ie_ocl_fp16"
+#define CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_2 "dnn_skip_ie_myriad2"
+#define CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X "dnn_skip_ie_myriadx"
+#define CV_TEST_TAG_DNN_SKIP_IE_MYRIAD CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_2, CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X
+
+#define CV_TEST_TAG_DNN_SKIP_VULKAN "dnn_skip_vulkan"
+
+#define CV_TEST_TAG_DNN_SKIP_CUDA "dnn_skip_cuda"
+#define CV_TEST_TAG_DNN_SKIP_CUDA_FP16 "dnn_skip_cuda_fp16"
+#define CV_TEST_TAG_DNN_SKIP_CUDA_FP32 "dnn_skip_cuda_fp32"
namespace cv { namespace dnn {
CV__DNN_INLINE_NS_BEGIN
namespace opencv_test {
+void initDNNTests();
+
using namespace cv::dnn;
static inline const std::string &getOpenCVExtraDir()
double confThreshold = 0.0, double scores_diff = 1e-5,
double boxes_iou_diff = 1e-4);
-bool readFileInMemory(const std::string& filename, std::string& content);
+void readFileContent(const std::string& filename, CV_OUT std::vector<char>& content);
#ifdef HAVE_INF_ENGINE
bool validateVPUType();
bool withInferenceEngine = true,
bool withHalide = false,
bool withCpuOCV = true,
- bool withVkCom = true
+ bool withVkCom = true,
+ bool withCUDA = true
);
static void getDefaultThresholds(int backend, int target, double* l1, double* lInf)
{
- if (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD)
+ if (target == DNN_TARGET_CUDA_FP16 || target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD)
{
*l1 = 4e-3;
*lInf = 2e-2;
{
if (inp && ref && inp->dims == 4 && ref->dims == 4 &&
inp->size[0] != 1 && inp->size[0] != ref->size[0])
+ {
+ applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD);
throw SkipTestException("Inconsistent batch size of input and output blobs for Myriad plugin");
+ }
+ }
+ }
+
+ void expectNoFallbacks(Net& net)
+ {
+ // Check if all the layers are supported with current backend and target.
+ // Some layers might be fused so their timings equal to zero.
+ std::vector<double> timings;
+ net.getPerfProfile(timings);
+ std::vector<String> names = net.getLayerNames();
+ CV_Assert(names.size() == timings.size());
+
+ for (int i = 0; i < names.size(); ++i)
+ {
+ Ptr<dnn::Layer> l = net.getLayer(net.getLayerId(names[i]));
+ bool fused = !timings[i];
+ if ((!l->supportBackend(backend) || l->preferableTarget != target) && !fused)
+ CV_Error(Error::StsNotImplemented, "Layer [" + l->name + "] of type [" +
+ l->type + "] is expected to has backend implementation");
}
}
+ void expectNoFallbacksFromIE(Net& net)
+ {
+ if (backend == DNN_BACKEND_INFERENCE_ENGINE)
+ expectNoFallbacks(net);
+ }
+
+ void expectNoFallbacksFromCUDA(Net& net)
+ {
+ if (backend == DNN_BACKEND_CUDA)
+ expectNoFallbacks(net);
+ }
+
protected:
void checkBackend(Mat* inp = 0, Mat* ref = 0)
{