mirror of
https://github.com/opencv/opencv.git
synced 2025-06-12 20:42:53 +08:00
dnn(test): add extra IR models, more checks in IE testing code
This commit is contained in:
parent
bc210b292b
commit
602e7c83e2
@ -112,6 +112,25 @@ static const std::map<std::string, OpenVINOModelTestCaseInfo>& getOpenVINOTestMo
|
|||||||
"intel/age-gender-recognition-retail-0013/FP16/age-gender-recognition-retail-0013",
|
"intel/age-gender-recognition-retail-0013/FP16/age-gender-recognition-retail-0013",
|
||||||
"intel/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013"
|
"intel/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013"
|
||||||
}},
|
}},
|
||||||
|
#endif
|
||||||
|
#if INF_ENGINE_RELEASE >= 2021020000
|
||||||
|
// OMZ: 2020.2
|
||||||
|
{ "face-detection-0105", {
|
||||||
|
"intel/face-detection-0105/FP32/face-detection-0105",
|
||||||
|
"intel/face-detection-0105/FP16/face-detection-0105"
|
||||||
|
}},
|
||||||
|
{ "face-detection-0106", {
|
||||||
|
"intel/face-detection-0106/FP32/face-detection-0106",
|
||||||
|
"intel/face-detection-0106/FP16/face-detection-0106"
|
||||||
|
}},
|
||||||
|
#endif
|
||||||
|
#if INF_ENGINE_RELEASE >= 2021040000
|
||||||
|
// OMZ: 2021.4
|
||||||
|
{ "person-vehicle-bike-detection-2004", {
|
||||||
|
"intel/person-vehicle-bike-detection-2004/FP32/person-vehicle-bike-detection-2004",
|
||||||
|
"intel/person-vehicle-bike-detection-2004/FP16/person-vehicle-bike-detection-2004"
|
||||||
|
//"intel/person-vehicle-bike-detection-2004/FP16-INT8/person-vehicle-bike-detection-2004"
|
||||||
|
}},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -145,10 +164,22 @@ inline static std::string getOpenVINOModel(const std::string &modelName, bool is
|
|||||||
static inline void genData(const InferenceEngine::TensorDesc& desc, Mat& m, Blob::Ptr& dataPtr)
|
static inline void genData(const InferenceEngine::TensorDesc& desc, Mat& m, Blob::Ptr& dataPtr)
|
||||||
{
|
{
|
||||||
const std::vector<size_t>& dims = desc.getDims();
|
const std::vector<size_t>& dims = desc.getDims();
|
||||||
m.create(std::vector<int>(dims.begin(), dims.end()), CV_32F);
|
if (desc.getPrecision() == InferenceEngine::Precision::FP32)
|
||||||
randu(m, -1, 1);
|
{
|
||||||
|
m.create(std::vector<int>(dims.begin(), dims.end()), CV_32F);
|
||||||
dataPtr = make_shared_blob<float>(desc, (float*)m.data);
|
randu(m, -1, 1);
|
||||||
|
dataPtr = make_shared_blob<float>(desc, (float*)m.data);
|
||||||
|
}
|
||||||
|
else if (desc.getPrecision() == InferenceEngine::Precision::I32)
|
||||||
|
{
|
||||||
|
m.create(std::vector<int>(dims.begin(), dims.end()), CV_32S);
|
||||||
|
randu(m, -100, 100);
|
||||||
|
dataPtr = make_shared_blob<int>(desc, (int*)m.data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FAIL() << "Unsupported precision: " << desc.getPrecision();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void runIE(Target target, const std::string& xmlPath, const std::string& binPath,
|
void runIE(Target target, const std::string& xmlPath, const std::string& binPath,
|
||||||
@ -254,7 +285,16 @@ void runIE(Target target, const std::string& xmlPath, const std::string& binPath
|
|||||||
BlobMap inputBlobs;
|
BlobMap inputBlobs;
|
||||||
for (auto& it : net.getInputsInfo())
|
for (auto& it : net.getInputsInfo())
|
||||||
{
|
{
|
||||||
genData(it.second->getTensorDesc(), inputsMap[it.first], inputBlobs[it.first]);
|
const InferenceEngine::TensorDesc& desc = it.second->getTensorDesc();
|
||||||
|
genData(desc, inputsMap[it.first], inputBlobs[it.first]);
|
||||||
|
if (cvtest::debugLevel > 0)
|
||||||
|
{
|
||||||
|
const std::vector<size_t>& dims = desc.getDims();
|
||||||
|
std::cout << "Input: '" << it.first << "' precison=" << desc.getPrecision() << " dims=" << dims.size() << " [";
|
||||||
|
for (auto d : dims)
|
||||||
|
std::cout << " " << d;
|
||||||
|
std::cout << "] ocv_mat=" << inputsMap[it.first].size << " of " << typeToString(inputsMap[it.first].type()) << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
infRequest.SetInput(inputBlobs);
|
infRequest.SetInput(inputBlobs);
|
||||||
|
|
||||||
@ -263,7 +303,16 @@ void runIE(Target target, const std::string& xmlPath, const std::string& binPath
|
|||||||
BlobMap outputBlobs;
|
BlobMap outputBlobs;
|
||||||
for (auto& it : net.getOutputsInfo())
|
for (auto& it : net.getOutputsInfo())
|
||||||
{
|
{
|
||||||
genData(it.second->getTensorDesc(), outputsMap[it.first], outputBlobs[it.first]);
|
const InferenceEngine::TensorDesc& desc = it.second->getTensorDesc();
|
||||||
|
genData(desc, outputsMap[it.first], outputBlobs[it.first]);
|
||||||
|
if (cvtest::debugLevel > 0)
|
||||||
|
{
|
||||||
|
const std::vector<size_t>& dims = desc.getDims();
|
||||||
|
std::cout << "Output: '" << it.first << "' precison=" << desc.getPrecision() << " dims=" << dims.size() << " [";
|
||||||
|
for (auto d : dims)
|
||||||
|
std::cout << " " << d;
|
||||||
|
std::cout << "] ocv_mat=" << outputsMap[it.first].size << " of " << typeToString(outputsMap[it.first].type()) << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
infRequest.SetOutput(outputBlobs);
|
infRequest.SetOutput(outputBlobs);
|
||||||
|
|
||||||
@ -284,6 +333,12 @@ void runCV(Backend backendId, Target targetId, const std::string& xmlPath, const
|
|||||||
net.setPreferableTarget(targetId);
|
net.setPreferableTarget(targetId);
|
||||||
|
|
||||||
std::vector<String> outNames = net.getUnconnectedOutLayersNames();
|
std::vector<String> outNames = net.getUnconnectedOutLayersNames();
|
||||||
|
if (cvtest::debugLevel > 0)
|
||||||
|
{
|
||||||
|
std::cout << "OpenCV output names: " << outNames.size() << std::endl;
|
||||||
|
for (auto name : outNames)
|
||||||
|
std::cout << "- " << name << std::endl;
|
||||||
|
}
|
||||||
std::vector<Mat> outs;
|
std::vector<Mat> outs;
|
||||||
net.forward(outs, outNames);
|
net.forward(outs, outNames);
|
||||||
|
|
||||||
@ -307,13 +362,26 @@ TEST_P(DNNTestOpenVINO, models)
|
|||||||
ASSERT_FALSE(backendId != DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && backendId != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) <<
|
ASSERT_FALSE(backendId != DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && backendId != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) <<
|
||||||
"Inference Engine backend is required";
|
"Inference Engine backend is required";
|
||||||
|
|
||||||
#if INF_ENGINE_VER_MAJOR_EQ(2021040000)
|
#if INF_ENGINE_VER_MAJOR_GE(2021030000)
|
||||||
if (targetId == DNN_TARGET_MYRIAD && (
|
if (targetId == DNN_TARGET_MYRIAD && (false
|
||||||
modelName == "person-detection-retail-0013" || // ncDeviceOpen:1013 Failed to find booted device after boot
|
|| modelName == "person-detection-retail-0013" // ncDeviceOpen:1013 Failed to find booted device after boot
|
||||||
modelName == "age-gender-recognition-retail-0013" // ncDeviceOpen:1013 Failed to find booted device after boot
|
|| modelName == "age-gender-recognition-retail-0013" // ncDeviceOpen:1013 Failed to find booted device after boot
|
||||||
|
|| modelName == "face-detection-0105" // get_element_type() must be called on a node with exactly one output
|
||||||
|
|| modelName == "face-detection-0106" // get_element_type() must be called on a node with exactly one output
|
||||||
|
|| modelName == "person-vehicle-bike-detection-2004" // 2021.4+: ncDeviceOpen:1013 Failed to find booted device after boot
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
|
||||||
|
if (targetId == DNN_TARGET_OPENCL && (false
|
||||||
|
|| modelName == "face-detection-0106" // Operation: 2278 of type ExperimentalDetectronPriorGridGenerator(op::v6) is not supported
|
||||||
|
)
|
||||||
|
)
|
||||||
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
|
||||||
|
if (targetId == DNN_TARGET_OPENCL_FP16 && (false
|
||||||
|
|| modelName == "face-detection-0106" // Operation: 2278 of type ExperimentalDetectronPriorGridGenerator(op::v6) is not supported
|
||||||
|
)
|
||||||
|
)
|
||||||
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_DNN_BACKEND_INFERENCE_ENGINE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if INF_ENGINE_VER_MAJOR_GE(2020020000)
|
#if INF_ENGINE_VER_MAJOR_GE(2020020000)
|
||||||
@ -350,6 +418,8 @@ TEST_P(DNNTestOpenVINO, models)
|
|||||||
if (targetId == DNN_TARGET_MYRIAD)
|
if (targetId == DNN_TARGET_MYRIAD)
|
||||||
resetMyriadDevice();
|
resetMyriadDevice();
|
||||||
EXPECT_NO_THROW(runIE(targetId, xmlPath, binPath, inputsMap, ieOutputsMap)) << "runIE";
|
EXPECT_NO_THROW(runIE(targetId, xmlPath, binPath, inputsMap, ieOutputsMap)) << "runIE";
|
||||||
|
if (targetId == DNN_TARGET_MYRIAD)
|
||||||
|
resetMyriadDevice();
|
||||||
EXPECT_NO_THROW(runCV(backendId, targetId, xmlPath, binPath, inputsMap, cvOutputsMap)) << "runCV";
|
EXPECT_NO_THROW(runCV(backendId, targetId, xmlPath, binPath, inputsMap, cvOutputsMap)) << "runCV";
|
||||||
|
|
||||||
double eps = 0;
|
double eps = 0;
|
||||||
@ -357,6 +427,14 @@ TEST_P(DNNTestOpenVINO, models)
|
|||||||
if (targetId == DNN_TARGET_CPU && checkHardwareSupport(CV_CPU_AVX_512F))
|
if (targetId == DNN_TARGET_CPU && checkHardwareSupport(CV_CPU_AVX_512F))
|
||||||
eps = 1e-5;
|
eps = 1e-5;
|
||||||
#endif
|
#endif
|
||||||
|
#if INF_ENGINE_VER_MAJOR_GE(2021030000)
|
||||||
|
if (targetId == DNN_TARGET_CPU && modelName == "face-detection-0105")
|
||||||
|
eps = 2e-4;
|
||||||
|
#endif
|
||||||
|
#if INF_ENGINE_VER_MAJOR_GE(2021040000)
|
||||||
|
if (targetId == DNN_TARGET_CPU && modelName == "person-vehicle-bike-detection-2004")
|
||||||
|
eps = 1e-6;
|
||||||
|
#endif
|
||||||
|
|
||||||
EXPECT_EQ(ieOutputsMap.size(), cvOutputsMap.size());
|
EXPECT_EQ(ieOutputsMap.size(), cvOutputsMap.size());
|
||||||
for (auto& srcIt : ieOutputsMap)
|
for (auto& srcIt : ieOutputsMap)
|
||||||
|
Loading…
Reference in New Issue
Block a user