|
|
|
@ -245,6 +245,13 @@ public: |
|
|
|
|
nms_boxes.push_back(box); |
|
|
|
|
nms_confidences.push_back(conf); |
|
|
|
|
nms_classIds.push_back(class_id); |
|
|
|
|
#if 0 // use to update test reference data
|
|
|
|
|
std::cout << b << ", " << class_id << ", " << conf << "f, " |
|
|
|
|
<< box.x << "f, " << box.y << "f, " |
|
|
|
|
<< box.x + box.width << "f, " << box.y + box.height << "f," |
|
|
|
|
<< std::endl; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
normAssertDetections(refClassIds[b], refConfidences[b], refBoxes[b], nms_classIds, |
|
|
|
@ -395,6 +402,9 @@ TEST_P(Test_Darknet_nets_async, Accuracy) |
|
|
|
|
|
|
|
|
|
std::string prefix = get<0>(GetParam()); |
|
|
|
|
|
|
|
|
|
if (targetId == DNN_TARGET_MYRIAD && prefix == "yolov4") // NC_OUT_OF_MEMORY
|
|
|
|
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_VERSION); |
|
|
|
|
|
|
|
|
|
if (backendId != DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && backendId != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) |
|
|
|
|
throw SkipTestException("No support for async forward"); |
|
|
|
|
|
|
|
|
@ -439,7 +449,7 @@ TEST_P(Test_Darknet_nets_async, Accuracy) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_CASE_P(/**/, Test_Darknet_nets_async, Combine( |
|
|
|
|
Values("yolo-voc", "tiny-yolo-voc", "yolov3"), |
|
|
|
|
Values("yolo-voc", "tiny-yolo-voc", "yolov3", "yolov4"), |
|
|
|
|
dnnBackendsAndTargets() |
|
|
|
|
)); |
|
|
|
|
|
|
|
|
@ -453,15 +463,21 @@ TEST_P(Test_Darknet_nets, YOLOv3) |
|
|
|
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); |
|
|
|
|
|
|
|
|
|
// batchId, classId, confidence, left, top, right, bottom
|
|
|
|
|
Mat ref = (Mat_<float>(9, 7) << 0, 7, 0.952983f, 0.614622f, 0.150257f, 0.901369f, 0.289251f, // a truck
|
|
|
|
|
0, 1, 0.987908f, 0.150913f, 0.221933f, 0.742255f, 0.74626f, // a bicycle
|
|
|
|
|
0, 16, 0.998836f, 0.160024f, 0.389964f, 0.417885f, 0.943716f, // a dog (COCO)
|
|
|
|
|
1, 9, 0.384801f, 0.659824f, 0.372389f, 0.673926f, 0.429412f, // a traffic light
|
|
|
|
|
1, 9, 0.733283f, 0.376029f, 0.315694f, 0.401776f, 0.395165f, // a traffic light
|
|
|
|
|
1, 9, 0.785352f, 0.665503f, 0.373543f, 0.688893f, 0.439245f, // a traffic light
|
|
|
|
|
1, 0, 0.980052f, 0.195856f, 0.378454f, 0.258626f, 0.629258f, // a person
|
|
|
|
|
1, 2, 0.989633f, 0.450719f, 0.463353f, 0.496305f, 0.522258f, // a car
|
|
|
|
|
1, 2, 0.997412f, 0.647584f, 0.459939f, 0.821038f, 0.663947f); // a car
|
|
|
|
|
const int N0 = 3; |
|
|
|
|
const int N1 = 6; |
|
|
|
|
static const float ref_[/* (N0 + N1) * 7 */] = { |
|
|
|
|
0, 16, 0.998836f, 0.160024f, 0.389964f, 0.417885f, 0.943716f, |
|
|
|
|
0, 1, 0.987908f, 0.150913f, 0.221933f, 0.742255f, 0.746261f, |
|
|
|
|
0, 7, 0.952983f, 0.614621f, 0.150257f, 0.901368f, 0.289251f, |
|
|
|
|
|
|
|
|
|
1, 2, 0.997412f, 0.647584f, 0.459939f, 0.821037f, 0.663947f, |
|
|
|
|
1, 2, 0.989633f, 0.450719f, 0.463353f, 0.496306f, 0.522258f, |
|
|
|
|
1, 0, 0.980053f, 0.195856f, 0.378454f, 0.258626f, 0.629257f, |
|
|
|
|
1, 9, 0.785341f, 0.665503f, 0.373543f, 0.688893f, 0.439244f, |
|
|
|
|
1, 9, 0.733275f, 0.376029f, 0.315694f, 0.401776f, 0.395165f, |
|
|
|
|
1, 9, 0.384815f, 0.659824f, 0.372389f, 0.673927f, 0.429412f, |
|
|
|
|
}; |
|
|
|
|
Mat ref(N0 + N1, 7, CV_32FC1, (void*)ref_); |
|
|
|
|
|
|
|
|
|
double scoreDiff = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.006 : 8e-5; |
|
|
|
|
double iouDiff = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.042 : 3e-4; |
|
|
|
@ -480,8 +496,8 @@ TEST_P(Test_Darknet_nets, YOLOv3) |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
SCOPED_TRACE("batch size 1"); |
|
|
|
|
testDarknetModel(config_file, weights_file, ref.rowRange(0, 3), scoreDiff, iouDiff); |
|
|
|
|
SCOPED_TRACE("batch size 1"); |
|
|
|
|
testDarknetModel(config_file, weights_file, ref.rowRange(0, N0), scoreDiff, iouDiff); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if defined(INF_ENGINE_RELEASE) |
|
|
|
@ -503,6 +519,75 @@ TEST_P(Test_Darknet_nets, YOLOv3) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_P(Test_Darknet_nets, YOLOv4) |
|
|
|
|
{ |
|
|
|
|
applyTestTag(CV_TEST_TAG_LONG, (target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_1GB : CV_TEST_TAG_MEMORY_2GB)); |
|
|
|
|
|
|
|
|
|
#if defined(INF_ENGINE_RELEASE) |
|
|
|
|
if (target == DNN_TARGET_MYRIAD) // NC_OUT_OF_MEMORY
|
|
|
|
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_VERSION); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
// batchId, classId, confidence, left, top, right, bottom
|
|
|
|
|
const int N0 = 3; |
|
|
|
|
const int N1 = 7; |
|
|
|
|
static const float ref_[/* (N0 + N1) * 7 */] = { |
|
|
|
|
0, 16, 0.992194f, 0.172375f, 0.402458f, 0.403918f, 0.932801f, |
|
|
|
|
0, 1, 0.988326f, 0.166708f, 0.228236f, 0.737208f, 0.735803f, |
|
|
|
|
0, 7, 0.94639f, 0.602523f, 0.130399f, 0.901623f, 0.298452f, |
|
|
|
|
|
|
|
|
|
1, 2, 0.99761f, 0.646556f, 0.45985f, 0.816041f, 0.659067f, |
|
|
|
|
1, 0, 0.988913f, 0.201726f, 0.360282f, 0.266181f, 0.631728f, |
|
|
|
|
1, 2, 0.98233f, 0.452007f, 0.462217f, 0.495612f, 0.521687f, |
|
|
|
|
1, 9, 0.919195f, 0.374642f, 0.316524f, 0.398126f, 0.393714f, |
|
|
|
|
1, 9, 0.856303f, 0.666842f, 0.372215f, 0.685539f, 0.44141f, |
|
|
|
|
1, 9, 0.313516f, 0.656791f, 0.374734f, 0.671959f, 0.438371f, |
|
|
|
|
1, 9, 0.256625f, 0.940232f, 0.326931f, 0.967586f, 0.374002f, |
|
|
|
|
}; |
|
|
|
|
Mat ref(N0 + N1, 7, CV_32FC1, (void*)ref_); |
|
|
|
|
|
|
|
|
|
double scoreDiff = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.006 : 8e-5; |
|
|
|
|
double iouDiff = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.042 : 3e-4; |
|
|
|
|
|
|
|
|
|
std::string config_file = "yolov4.cfg"; |
|
|
|
|
std::string weights_file = "yolov4.weights"; |
|
|
|
|
|
|
|
|
|
#if defined(INF_ENGINE_RELEASE) |
|
|
|
|
if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 || |
|
|
|
|
backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_MYRIAD && |
|
|
|
|
getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X) |
|
|
|
|
{ |
|
|
|
|
scoreDiff = 0.04; |
|
|
|
|
iouDiff = 0.2; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
SCOPED_TRACE("batch size 1"); |
|
|
|
|
testDarknetModel(config_file, weights_file, ref.rowRange(0, N0), scoreDiff, iouDiff); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
SCOPED_TRACE("batch size 2"); |
|
|
|
|
|
|
|
|
|
#if defined(INF_ENGINE_RELEASE) |
|
|
|
|
if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019) |
|
|
|
|
{ |
|
|
|
|
if (target == DNN_TARGET_OPENCL) |
|
|
|
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_VERSION); |
|
|
|
|
else if (target == DNN_TARGET_OPENCL_FP16 && INF_ENGINE_VER_MAJOR_LE(202010000)) |
|
|
|
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_VERSION); |
|
|
|
|
else if (target == DNN_TARGET_MYRIAD && |
|
|
|
|
getInferenceEngineVPUType() == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X) |
|
|
|
|
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
testDarknetModel(config_file, weights_file, ref, scoreDiff, iouDiff); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INSTANTIATE_TEST_CASE_P(/**/, Test_Darknet_nets, dnnBackendsAndTargets()); |
|
|
|
|
|
|
|
|
|
TEST_P(Test_Darknet_layers, shortcut) |
|
|
|
|