Skip to content

Commit e7d35d5

Browse files
committed
Fix for opencv face detector ocl test
Signed-off-by: Li Peng <[email protected]>
1 parent c524f66 commit e7d35d5

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

modules/dnn/src/layers/normalize_bbox_layer.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@ class NormalizeBBoxLayerImpl : public NormalizeBBoxLayer
105105
float norm = pow(absSum, 1.0f / pnorm);
106106
multiply(src, 1.0f / norm, dst);
107107
}
108+
else
109+
{
110+
Mat norm;
111+
reduce(buffer, norm, 0, REDUCE_SUM);
112+
norm += epsilon;
113+
114+
// compute inverted norm to call multiply instead divide
115+
cv::pow(norm, -1.0f / pnorm, norm);
116+
117+
repeat(norm, channels, 1, buffer);
118+
multiply(src, buffer, dst);
119+
}
108120

109121
if (!blobs.empty())
110122
{

modules/dnn/test/test_backends.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,7 @@ TEST_P(DNNTestNetwork, OpenFace)
222222

223223
TEST_P(DNNTestNetwork, opencv_face_detector)
224224
{
225-
if (backend == DNN_BACKEND_HALIDE ||
226-
backend == DNN_BACKEND_DEFAULT && target == DNN_TARGET_OPENCL)
227-
throw SkipTestException("");
225+
if (backend == DNN_BACKEND_HALIDE) throw SkipTestException("");
228226
Mat img = imread(findDataFile("gpu/lbpcascade/er.png", false));
229227
Mat inp = blobFromImage(img, 1.0, Size(), Scalar(104.0, 177.0, 123.0), false, false);
230228
processNet("dnn/opencv_face_detector.caffemodel", "dnn/opencv_face_detector.prototxt",

modules/dnn/test/test_caffe_importer.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -456,16 +456,21 @@ TEST(Test_Caffe, multiple_inputs)
456456
normAssert(out, first_image + second_image);
457457
}
458458

459-
typedef testing::TestWithParam<std::string> opencv_face_detector;
459+
CV_ENUM(DNNTarget, DNN_TARGET_CPU, DNN_TARGET_OPENCL)
460+
typedef testing::TestWithParam<tuple<std::string, DNNTarget> > opencv_face_detector;
460461
TEST_P(opencv_face_detector, Accuracy)
461462
{
462463
std::string proto = findDataFile("dnn/opencv_face_detector.prototxt", false);
463-
std::string model = findDataFile(GetParam(), false);
464+
std::string model = findDataFile(get<0>(GetParam()), false);
465+
dnn::Target targetId = (dnn::Target)(int)get<1>(GetParam());
464466

465467
Net net = readNetFromCaffe(proto, model);
466468
Mat img = imread(findDataFile("gpu/lbpcascade/er.png", false));
467469
Mat blob = blobFromImage(img, 1.0, Size(), Scalar(104.0, 177.0, 123.0), false, false);
468470

471+
net.setPreferableBackend(DNN_BACKEND_DEFAULT);
472+
net.setPreferableTarget(targetId);
473+
469474
net.setInput(blob);
470475
// Output has shape 1x1xNx7 where N - number of detections.
471476
// An every detection is a vector of values [id, classId, confidence, left, top, right, bottom]
@@ -479,11 +484,13 @@ TEST_P(opencv_face_detector, Accuracy)
479484
0.95097077, 0.51901293, 0.45863652, 0.5777427, 0.5347801);
480485
normAssert(out.reshape(1, out.total() / 7).rowRange(0, 6).colRange(2, 7), ref);
481486
}
482-
INSTANTIATE_TEST_CASE_P(Test_Caffe, opencv_face_detector, Values(
483-
"dnn/opencv_face_detector.caffemodel",
484-
"dnn/opencv_face_detector_fp16.caffemodel"
485-
));
486-
487+
INSTANTIATE_TEST_CASE_P(Test_Caffe, opencv_face_detector,
488+
Combine(
489+
Values("dnn/opencv_face_detector.caffemodel",
490+
"dnn/opencv_face_detector_fp16.caffemodel"),
491+
Values(DNN_TARGET_CPU, DNN_TARGET_OPENCL)
492+
)
493+
);
487494

488495
TEST(Test_Caffe, FasterRCNN_and_RFCN)
489496
{

0 commit comments

Comments
 (0)