void runTorchNet(const String& prefix, String outLayerName = "", bool check2ndBlob = false, bool isBinary = false, double l1 = 0.0, double lInf = 0.0) { String suffix = (isBinary) ? ".dat" : ".txt"; Mat inp, outRef; ASSERT_NO_THROW( inp = readTorchBlob(_tf(prefix + "_input" + suffix), isBinary) ); ASSERT_NO_THROW( outRef = readTorchBlob(_tf(prefix + "_output" + suffix), isBinary) ); checkBackend(backend, target, &inp, &outRef); Net net = readNetFromTorch(_tf(prefix + "_net" + suffix), isBinary); ASSERT_FALSE(net.empty()); net.setPreferableBackend(backend); net.setPreferableTarget(target); if (outLayerName.empty()) outLayerName = net.getLayerNames().back(); net.setInput(inp); std::vector<Mat> outBlobs; net.forward(outBlobs, outLayerName); l1 = l1 ? l1 : default_l1; lInf = lInf ? lInf : default_lInf; normAssert(outRef, outBlobs[0], "", l1, lInf); if (check2ndBlob && backend != DNN_BACKEND_INFERENCE_ENGINE) { Mat out2 = outBlobs[1]; Mat ref2 = readTorchBlob(_tf(prefix + "_output_2" + suffix), isBinary); normAssert(out2, ref2, "", l1, lInf); } }
static void runTorchNet(String prefix, int targetId = DNN_TARGET_CPU, String outLayerName = "", bool check2ndBlob = false, bool isBinary = false) { String suffix = (isBinary) ? ".dat" : ".txt"; Net net = readNetFromTorch(_tf(prefix + "_net" + suffix), isBinary); ASSERT_FALSE(net.empty()); net.setPreferableBackend(DNN_BACKEND_DEFAULT); net.setPreferableTarget(targetId); Mat inp, outRef; ASSERT_NO_THROW( inp = readTorchBlob(_tf(prefix + "_input" + suffix), isBinary) ); ASSERT_NO_THROW( outRef = readTorchBlob(_tf(prefix + "_output" + suffix), isBinary) ); if (outLayerName.empty()) outLayerName = net.getLayerNames().back(); net.setInput(inp, "0"); std::vector<Mat> outBlobs; net.forward(outBlobs, outLayerName); normAssert(outRef, outBlobs[0]); if (check2ndBlob) { Mat out2 = outBlobs[1]; Mat ref2 = readTorchBlob(_tf(prefix + "_output_2" + suffix), isBinary); normAssert(out2, ref2); } }
TEST_P(Test_Torch_nets, OpenFace_accuracy) { #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_RELEASE < 2018030000 if (backend == DNN_BACKEND_INFERENCE_ENGINE && target == DNN_TARGET_MYRIAD) throw SkipTestException("Test is enabled starts from OpenVINO 2018R3"); #endif checkBackend(); if (backend == DNN_BACKEND_INFERENCE_ENGINE && target == DNN_TARGET_OPENCL_FP16) throw SkipTestException(""); const string model = findDataFile("dnn/openface_nn4.small2.v1.t7", false); Net net = readNetFromTorch(model); net.setPreferableBackend(backend); net.setPreferableTarget(target); Mat sample = imread(findDataFile("cv/shared/lena.png", false)); Mat sampleF32(sample.size(), CV_32FC3); sample.convertTo(sampleF32, sampleF32.type()); sampleF32 /= 255; resize(sampleF32, sampleF32, Size(96, 96), 0, 0, INTER_NEAREST); Mat inputBlob = blobFromImage(sampleF32, 1.0, Size(), Scalar(), /*swapRB*/true); net.setInput(inputBlob); Mat out = net.forward(); Mat outRef = readTorchBlob(_tf("net_openface_output.dat"), true); normAssert(out, outRef, "", default_l1, default_lInf); }
TEST_P(Test_Torch_nets, OpenFace_accuracy) { const string model = findDataFile("dnn/openface_nn4.small2.v1.t7", false); Net net = readNetFromTorch(model); net.setPreferableTarget(GetParam()); Mat sample = imread(findDataFile("cv/shared/lena.png", false)); Mat sampleF32(sample.size(), CV_32FC3); sample.convertTo(sampleF32, sampleF32.type()); sampleF32 /= 255; resize(sampleF32, sampleF32, Size(96, 96), 0, 0, INTER_NEAREST); Mat inputBlob = blobFromImage(sampleF32); net.setInput(inputBlob); Mat out = net.forward(); Mat outRef = readTorchBlob(_tf("net_openface_output.dat"), true); normAssert(out, outRef); }