13
13
namespace
14
14
{
15
15
16
- #ifdef HAVE_HALIDE
17
- #define TEST_DNN_BACKEND DNN_BACKEND_DEFAULT, DNN_BACKEND_HALIDE
18
- #else
19
- #define TEST_DNN_BACKEND DNN_BACKEND_DEFAULT
20
- #endif
21
- #define TEST_DNN_TARGET DNN_TARGET_CPU, DNN_TARGET_OPENCL
22
-
23
- CV_ENUM (DNNBackend, DNN_BACKEND_DEFAULT, DNN_BACKEND_HALIDE)
16
+ CV_ENUM (DNNBackend, DNN_BACKEND_DEFAULT, DNN_BACKEND_HALIDE, DNN_BACKEND_INFERENCE_ENGINE)
24
17
CV_ENUM (DNNTarget, DNN_TARGET_CPU, DNN_TARGET_OPENCL)
25
18
26
19
class DNNTestNetwork : public ::perf::TestBaseWithParam< tuple<DNNBackend, DNNTarget> >
@@ -31,13 +24,16 @@ class DNNTestNetwork : public ::perf::TestBaseWithParam< tuple<DNNBackend, DNNTa
31
24
32
25
dnn::Net net;
33
26
34
- void processNet (std::string weights, std::string proto, std::string halide_scheduler,
35
- const Mat& input, const std::string& outputLayer,
36
- const std::string& framework)
27
+ DNNTestNetwork ()
37
28
{
38
29
backend = (dnn::Backend)(int )get<0 >(GetParam ());
39
30
target = (dnn::Target)(int )get<1 >(GetParam ());
31
+ }
40
32
33
+ void processNet (std::string weights, std::string proto, std::string halide_scheduler,
34
+ const Mat& input, const std::string& outputLayer,
35
+ const std::string& framework)
36
+ {
41
37
if (backend == DNN_BACKEND_DEFAULT && target == DNN_TARGET_OPENCL)
42
38
{
43
39
#if defined(HAVE_OPENCL)
@@ -47,6 +43,8 @@ class DNNTestNetwork : public ::perf::TestBaseWithParam< tuple<DNNBackend, DNNTa
47
43
throw ::SkipTestException (" OpenCL is not available/disabled in OpenCV" );
48
44
}
49
45
}
46
+ if (backend == DNN_BACKEND_INFERENCE_ENGINE && target == DNN_TARGET_OPENCL)
47
+ throw SkipTestException (" Skip OpenCL target of Inference Engine backend" );
50
48
51
49
randu (input, 0 .0f , 1 .0f );
52
50
@@ -117,7 +115,7 @@ PERF_TEST_P_(DNNTestNetwork, GoogLeNet)
117
115
" " , Mat (cv::Size (224 , 224 ), CV_32FC3), " prob" , " caffe" );
118
116
}
119
117
120
- PERF_TEST_P_ (DNNTestNetwork, ResNet50 )
118
+ PERF_TEST_P_ (DNNTestNetwork, ResNet_50 )
121
119
{
122
120
processNet (" dnn/ResNet-50-model.caffemodel" , " dnn/ResNet-50-deploy.prototxt" ,
123
121
" resnet_50.yml" , Mat (cv::Size (224 , 224 ), CV_32FC3), " prob" , " caffe" );
@@ -131,19 +129,22 @@ PERF_TEST_P_(DNNTestNetwork, SqueezeNet_v1_1)
131
129
132
130
PERF_TEST_P_ (DNNTestNetwork, Inception_5h)
133
131
{
132
+ if (backend == DNN_BACKEND_INFERENCE_ENGINE) throw SkipTestException (" " );
134
133
processNet (" dnn/tensorflow_inception_graph.pb" , " " ,
135
134
" inception_5h.yml" ,
136
135
Mat (cv::Size (224 , 224 ), CV_32FC3), " softmax2" , " tensorflow" );
137
136
}
138
137
139
138
PERF_TEST_P_ (DNNTestNetwork, ENet)
140
139
{
140
+ if (backend == DNN_BACKEND_INFERENCE_ENGINE) throw SkipTestException (" " );
141
141
processNet (" dnn/Enet-model-best.net" , " " , " enet.yml" ,
142
142
Mat (cv::Size (512 , 256 ), CV_32FC3), " l367_Deconvolution" , " torch" );
143
143
}
144
144
145
145
PERF_TEST_P_ (DNNTestNetwork, SSD)
146
146
{
147
+ if (backend == DNN_BACKEND_INFERENCE_ENGINE) throw SkipTestException (" " );
147
148
processNet (" dnn/VGG_ILSVRC2016_SSD_300x300_iter_440000.caffemodel" , " dnn/ssd_vgg16.prototxt" , " disabled" ,
148
149
Mat (cv::Size (300 , 300 ), CV_32FC3), " detection_out" , " caffe" );
149
150
}
@@ -162,15 +163,53 @@ PERF_TEST_P_(DNNTestNetwork, MobileNet_SSD_Caffe)
162
163
163
164
PERF_TEST_P_ (DNNTestNetwork, MobileNet_SSD_TensorFlow)
164
165
{
166
+ if (backend == DNN_BACKEND_INFERENCE_ENGINE) throw SkipTestException (" " );
165
167
processNet (" dnn/ssd_mobilenet_v1_coco.pb" , " ssd_mobilenet_v1_coco.pbtxt" , " " ,
166
168
Mat (cv::Size (300 , 300 ), CV_32FC3), " " , " tensorflow" );
167
169
}
168
170
169
- INSTANTIATE_TEST_CASE_P (/* nothing*/ , DNNTestNetwork,
170
- testing::Combine (
171
- ::testing::Values (TEST_DNN_BACKEND),
172
- DNNTarget::all()
173
- )
174
- );
171
+ PERF_TEST_P_ (DNNTestNetwork, DenseNet_121)
172
+ {
173
+ if (backend == DNN_BACKEND_HALIDE) throw SkipTestException (" " );
174
+ processNet (" dnn/DenseNet_121.caffemodel" , " dnn/DenseNet_121.prototxt" , " " ,
175
+ Mat (cv::Size (224 , 224 ), CV_32FC3), " " , " caffe" );
176
+ }
177
+
178
+ PERF_TEST_P_ (DNNTestNetwork, OpenPose_pose_coco)
179
+ {
180
+ if (backend == DNN_BACKEND_HALIDE) throw SkipTestException (" " );
181
+ processNet (" dnn/openpose_pose_coco.caffemodel" , " dnn/openpose_pose_coco.prototxt" , " " ,
182
+ Mat (cv::Size (368 , 368 ), CV_32FC3), " " , " caffe" );
183
+ }
184
+
185
+ PERF_TEST_P_ (DNNTestNetwork, OpenPose_pose_mpi)
186
+ {
187
+ if (backend == DNN_BACKEND_HALIDE) throw SkipTestException (" " );
188
+ processNet (" dnn/openpose_pose_mpi.caffemodel" , " dnn/openpose_pose_mpi.prototxt" , " " ,
189
+ Mat (cv::Size (368 , 368 ), CV_32FC3), " " , " caffe" );
190
+ }
191
+
192
+ PERF_TEST_P_ (DNNTestNetwork, OpenPose_pose_mpi_faster_4_stages)
193
+ {
194
+ if (backend == DNN_BACKEND_HALIDE) throw SkipTestException (" " );
195
+ // The same .caffemodel but modified .prototxt
196
+ // See https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/src/openpose/pose/poseParameters.cpp
197
+ processNet (" dnn/openpose_pose_mpi.caffemodel" , " dnn/openpose_pose_mpi_faster_4_stages.prototxt" , " " ,
198
+ Mat (cv::Size (368 , 368 ), CV_32FC3), " " , " caffe" );
199
+ }
200
+
201
+ const tuple<DNNBackend, DNNTarget> testCases[] = {
202
+ #ifdef HAVE_HALIDE
203
+ tuple<DNNBackend, DNNTarget>(DNN_BACKEND_HALIDE, DNN_TARGET_CPU),
204
+ tuple<DNNBackend, DNNTarget>(DNN_BACKEND_HALIDE, DNN_TARGET_OPENCL),
205
+ #endif
206
+ #ifdef HAVE_INF_ENGINE
207
+ tuple<DNNBackend, DNNTarget>(DNN_BACKEND_INFERENCE_ENGINE, DNN_TARGET_CPU),
208
+ #endif
209
+ tuple<DNNBackend, DNNTarget>(DNN_BACKEND_DEFAULT, DNN_TARGET_CPU),
210
+ tuple<DNNBackend, DNNTarget>(DNN_BACKEND_DEFAULT, DNN_TARGET_OPENCL)
211
+ };
212
+
213
+ INSTANTIATE_TEST_CASE_P (/* nothing*/ , DNNTestNetwork, testing::ValuesIn(testCases));
175
214
176
215
} // namespace
0 commit comments