@@ -245,6 +245,13 @@ class Test_Darknet_nets : public DNNTestLayer
245
245
nms_boxes.push_back (box);
246
246
nms_confidences.push_back (conf);
247
247
nms_classIds.push_back (class_id);
248
+ #if 0 // use to update test reference data
249
+ std::cout << b << ", " << class_id << ", " << conf << "f, "
250
+ << box.x << "f, " << box.y << "f, "
251
+ << box.x + box.width << "f, " << box.y + box.height << "f,"
252
+ << std::endl;
253
+ #endif
254
+
248
255
}
249
256
250
257
normAssertDetections (refClassIds[b], refConfidences[b], refBoxes[b], nms_classIds,
@@ -395,6 +402,9 @@ TEST_P(Test_Darknet_nets_async, Accuracy)
395
402
396
403
std::string prefix = get<0 >(GetParam ());
397
404
405
+ if (targetId == DNN_TARGET_MYRIAD && prefix == " yolov4" ) // NC_OUT_OF_MEMORY
406
+ applyTestTag (CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
407
+
398
408
if (backendId != DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 && backendId != DNN_BACKEND_INFERENCE_ENGINE_NGRAPH)
399
409
throw SkipTestException (" No support for async forward" );
400
410
@@ -439,7 +449,7 @@ TEST_P(Test_Darknet_nets_async, Accuracy)
439
449
}
440
450
441
451
INSTANTIATE_TEST_CASE_P (/* */ , Test_Darknet_nets_async, Combine(
442
- Values (" yolo-voc" , " tiny-yolo-voc" , " yolov3" ),
452
+ Values (" yolo-voc" , " tiny-yolo-voc" , " yolov3" , " yolov4 " ),
443
453
dnnBackendsAndTargets()
444
454
));
445
455
@@ -453,15 +463,21 @@ TEST_P(Test_Darknet_nets, YOLOv3)
453
463
applyTestTag (CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
454
464
455
465
// batchId, classId, confidence, left, top, right, bottom
456
- Mat ref = (Mat_<float >(9 , 7 ) << 0 , 7 , 0 .952983f , 0 .614622f , 0 .150257f , 0 .901369f , 0 .289251f , // a truck
457
- 0 , 1 , 0 .987908f , 0 .150913f , 0 .221933f , 0 .742255f , 0 .74626f , // a bicycle
458
- 0 , 16 , 0 .998836f , 0 .160024f , 0 .389964f , 0 .417885f , 0 .943716f , // a dog (COCO)
459
- 1 , 9 , 0 .384801f , 0 .659824f , 0 .372389f , 0 .673926f , 0 .429412f , // a traffic light
460
- 1 , 9 , 0 .733283f , 0 .376029f , 0 .315694f , 0 .401776f , 0 .395165f , // a traffic light
461
- 1 , 9 , 0 .785352f , 0 .665503f , 0 .373543f , 0 .688893f , 0 .439245f , // a traffic light
462
- 1 , 0 , 0 .980052f , 0 .195856f , 0 .378454f , 0 .258626f , 0 .629258f , // a person
463
- 1 , 2 , 0 .989633f , 0 .450719f , 0 .463353f , 0 .496305f , 0 .522258f , // a car
464
- 1 , 2 , 0 .997412f , 0 .647584f , 0 .459939f , 0 .821038f , 0 .663947f ); // a car
466
+ const int N0 = 3 ;
467
+ const int N1 = 6 ;
468
+ static const float ref_[/* (N0 + N1) * 7 */ ] = {
469
+ 0 , 16 , 0 .998836f , 0 .160024f , 0 .389964f , 0 .417885f , 0 .943716f ,
470
+ 0 , 1 , 0 .987908f , 0 .150913f , 0 .221933f , 0 .742255f , 0 .746261f ,
471
+ 0 , 7 , 0 .952983f , 0 .614621f , 0 .150257f , 0 .901368f , 0 .289251f ,
472
+
473
+ 1 , 2 , 0 .997412f , 0 .647584f , 0 .459939f , 0 .821037f , 0 .663947f ,
474
+ 1 , 2 , 0 .989633f , 0 .450719f , 0 .463353f , 0 .496306f , 0 .522258f ,
475
+ 1 , 0 , 0 .980053f , 0 .195856f , 0 .378454f , 0 .258626f , 0 .629257f ,
476
+ 1 , 9 , 0 .785341f , 0 .665503f , 0 .373543f , 0 .688893f , 0 .439244f ,
477
+ 1 , 9 , 0 .733275f , 0 .376029f , 0 .315694f , 0 .401776f , 0 .395165f ,
478
+ 1 , 9 , 0 .384815f , 0 .659824f , 0 .372389f , 0 .673927f , 0 .429412f ,
479
+ };
480
+ Mat ref (N0 + N1, 7 , CV_32FC1, (void *)ref_);
465
481
466
482
double scoreDiff = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.006 : 8e-5 ;
467
483
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)
480
496
#endif
481
497
482
498
{
483
- SCOPED_TRACE (" batch size 1" );
484
- testDarknetModel (config_file, weights_file, ref.rowRange (0 , 3 ), scoreDiff, iouDiff);
499
+ SCOPED_TRACE (" batch size 1" );
500
+ testDarknetModel (config_file, weights_file, ref.rowRange (0 , N0 ), scoreDiff, iouDiff);
485
501
}
486
502
487
503
#if defined(INF_ENGINE_RELEASE)
@@ -503,6 +519,75 @@ TEST_P(Test_Darknet_nets, YOLOv3)
503
519
}
504
520
}
505
521
522
+ TEST_P (Test_Darknet_nets, YOLOv4)
523
+ {
524
+ applyTestTag (CV_TEST_TAG_LONG, (target == DNN_TARGET_CPU ? CV_TEST_TAG_MEMORY_1GB : CV_TEST_TAG_MEMORY_2GB));
525
+
526
+ #if defined(INF_ENGINE_RELEASE)
527
+ if (target == DNN_TARGET_MYRIAD) // NC_OUT_OF_MEMORY
528
+ applyTestTag (CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
529
+ #endif
530
+
531
+ // batchId, classId, confidence, left, top, right, bottom
532
+ const int N0 = 3 ;
533
+ const int N1 = 7 ;
534
+ static const float ref_[/* (N0 + N1) * 7 */ ] = {
535
+ 0 , 16 , 0 .992194f , 0 .172375f , 0 .402458f , 0 .403918f , 0 .932801f ,
536
+ 0 , 1 , 0 .988326f , 0 .166708f , 0 .228236f , 0 .737208f , 0 .735803f ,
537
+ 0 , 7 , 0 .94639f , 0 .602523f , 0 .130399f , 0 .901623f , 0 .298452f ,
538
+
539
+ 1 , 2 , 0 .99761f , 0 .646556f , 0 .45985f , 0 .816041f , 0 .659067f ,
540
+ 1 , 0 , 0 .988913f , 0 .201726f , 0 .360282f , 0 .266181f , 0 .631728f ,
541
+ 1 , 2 , 0 .98233f , 0 .452007f , 0 .462217f , 0 .495612f , 0 .521687f ,
542
+ 1 , 9 , 0 .919195f , 0 .374642f , 0 .316524f , 0 .398126f , 0 .393714f ,
543
+ 1 , 9 , 0 .856303f , 0 .666842f , 0 .372215f , 0 .685539f , 0 .44141f ,
544
+ 1 , 9 , 0 .313516f , 0 .656791f , 0 .374734f , 0 .671959f , 0 .438371f ,
545
+ 1 , 9 , 0 .256625f , 0 .940232f , 0 .326931f , 0 .967586f , 0 .374002f ,
546
+ };
547
+ Mat ref (N0 + N1, 7 , CV_32FC1, (void *)ref_);
548
+
549
+ double scoreDiff = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.006 : 8e-5 ;
550
+ double iouDiff = (target == DNN_TARGET_OPENCL_FP16 || target == DNN_TARGET_MYRIAD) ? 0.042 : 3e-4 ;
551
+
552
+ std::string config_file = " yolov4.cfg" ;
553
+ std::string weights_file = " yolov4.weights" ;
554
+
555
+ #if defined(INF_ENGINE_RELEASE)
556
+ if ((backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019 ||
557
+ backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH) && target == DNN_TARGET_MYRIAD &&
558
+ getInferenceEngineVPUType () == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
559
+ {
560
+ scoreDiff = 0.04 ;
561
+ iouDiff = 0.2 ;
562
+ }
563
+ #endif
564
+
565
+ {
566
+ SCOPED_TRACE (" batch size 1" );
567
+ testDarknetModel (config_file, weights_file, ref.rowRange (0 , N0), scoreDiff, iouDiff);
568
+ }
569
+
570
+ {
571
+ SCOPED_TRACE (" batch size 2" );
572
+
573
+ #if defined(INF_ENGINE_RELEASE)
574
+ if (backend == DNN_BACKEND_INFERENCE_ENGINE_NN_BUILDER_2019)
575
+ {
576
+ if (target == DNN_TARGET_OPENCL)
577
+ applyTestTag (CV_TEST_TAG_DNN_SKIP_IE_OPENCL, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
578
+ else if (target == DNN_TARGET_OPENCL_FP16 && INF_ENGINE_VER_MAJOR_LE (202010000 ))
579
+ applyTestTag (CV_TEST_TAG_DNN_SKIP_IE_OPENCL_FP16, CV_TEST_TAG_DNN_SKIP_IE_VERSION);
580
+ else if (target == DNN_TARGET_MYRIAD &&
581
+ getInferenceEngineVPUType () == CV_DNN_INFERENCE_ENGINE_VPU_TYPE_MYRIAD_X)
582
+ applyTestTag (CV_TEST_TAG_DNN_SKIP_IE_MYRIAD_X);
583
+ }
584
+ #endif
585
+
586
+ testDarknetModel (config_file, weights_file, ref, scoreDiff, iouDiff);
587
+ }
588
+ }
589
+
590
+
506
591
INSTANTIATE_TEST_CASE_P (/* */ , Test_Darknet_nets, dnnBackendsAndTargets());
507
592
508
593
TEST_P (Test_Darknet_layers, shortcut)
0 commit comments