Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
6eb8faea
Commit
6eb8faea
authored
Jul 13, 2018
by
Dmitry Kurtaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Enable TensorFlow networks tests for different backends and targets
parent
23fc96e9
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
27 deletions
+53
-27
detection_output_layer.cpp
modules/dnn/src/layers/detection_output_layer.cpp
+4
-2
softmax_layer.cpp
modules/dnn/src/layers/softmax_layer.cpp
+6
-7
test_tf_importer.cpp
modules/dnn/test/test_tf_importer.cpp
+43
-18
No files found.
modules/dnn/src/layers/detection_output_layer.cpp
View file @
6eb8faea
...
...
@@ -295,7 +295,9 @@ public:
for
(
int
i
=
0
;
i
<
num
;
i
++
)
confPreds
.
push_back
(
Mat
(
2
,
shape
,
CV_32F
));
UMat
umat
=
inp1
.
reshape
(
1
,
num
*
numPredsPerClass
);
shape
[
0
]
=
num
*
numPredsPerClass
;
shape
[
1
]
=
inp1
.
total
()
/
shape
[
0
];
UMat
umat
=
inp1
.
reshape
(
1
,
2
,
&
shape
[
0
]);
for
(
int
i
=
0
;
i
<
num
;
++
i
)
{
Range
ranges
[]
=
{
Range
(
i
*
numPredsPerClass
,
(
i
+
1
)
*
numPredsPerClass
),
Range
::
all
()
};
...
...
@@ -342,7 +344,7 @@ public:
// Decode all loc predictions to bboxes
bool
ret
=
ocl_DecodeBBoxesAll
(
inputs
[
0
],
inputs
[
2
],
num
,
numPriors
,
_shareLocation
,
_numLocClasses
,
_backgroundLabelId
,
_codeType
,
_varianceEncodedInTarget
,
false
,
_codeType
,
_varianceEncodedInTarget
,
_clip
,
allDecodedBBoxes
);
if
(
!
ret
)
return
false
;
...
...
modules/dnn/src/layers/softmax_layer.cpp
View file @
6eb8faea
...
...
@@ -110,27 +110,26 @@ public:
outputs_
.
getUMatVector
(
outputs
);
internals_
.
getUMatVector
(
internals
);
UMat
&
src
=
inputs
[
0
];
UMat
&
dstMat
=
outputs
[
0
];
int
axis
=
clamp
(
axisRaw
,
src
.
dims
);
if
(
softmaxOp
.
empty
())
{
OCL4DNNSoftmaxConfig
config
;
config
.
in_shape
=
shape
(
inputs
[
0
]);
config
.
axis
=
axis
Raw
;
config
.
channels
=
inputs
[
0
].
size
[
axis
Raw
];
config
.
axis
=
axis
;
config
.
channels
=
inputs
[
0
].
size
[
axis
];
config
.
logsoftmax
=
logSoftMax
;
config
.
use_half
=
use_half
;
softmaxOp
=
Ptr
<
OCL4DNNSoftmax
<
float
>
>
(
new
OCL4DNNSoftmax
<
float
>
(
config
));
}
UMat
&
src
=
inputs
[
0
];
UMat
&
dstMat
=
outputs
[
0
];
if
(
softmaxOp
->
Forward
(
src
,
dstMat
))
return
true
;
UMat
&
bufMat
=
internals
[
0
];
int
axis
=
clamp
(
axisRaw
,
src
.
dims
);
MatShape
s
=
shape
(
src
);
size_t
outerSize
=
total
(
s
,
0
,
axis
);
size_t
channels
=
src
.
size
[
axis
];
...
...
modules/dnn/test/test_tf_importer.cpp
View file @
6eb8faea
...
...
@@ -243,10 +243,15 @@ TEST_P(Test_TensorFlow_layers, l2_normalize_3d)
runTensorFlowNet
(
"l2_normalize_3d"
);
}
typedef
testing
::
TestWithParam
<
Target
>
Test_TensorFlow_nets
;
class
Test_TensorFlow_nets
:
public
DNNTestLayer
{}
;
TEST_P
(
Test_TensorFlow_nets
,
MobileNet_SSD
)
{
checkBackend
();
if
((
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
!=
DNN_TARGET_CPU
)
||
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
))
throw
SkipTestException
(
""
);
std
::
string
netPath
=
findDataFile
(
"dnn/ssd_mobilenet_v1_coco.pb"
,
false
);
std
::
string
netConfig
=
findDataFile
(
"dnn/ssd_mobilenet_v1_coco.pbtxt"
,
false
);
std
::
string
imgPath
=
findDataFile
(
"dnn/street.png"
,
false
);
...
...
@@ -260,29 +265,30 @@ TEST_P(Test_TensorFlow_nets, MobileNet_SSD)
outNames
[
1
]
=
"concat_1"
;
outNames
[
2
]
=
"detection_out"
;
std
::
vector
<
Mat
>
target
(
outNames
.
size
());
std
::
vector
<
Mat
>
refs
(
outNames
.
size
());
for
(
int
i
=
0
;
i
<
outNames
.
size
();
++
i
)
{
std
::
string
path
=
findDataFile
(
"dnn/tensorflow/ssd_mobilenet_v1_coco."
+
outNames
[
i
]
+
".npy"
,
false
);
target
[
i
]
=
blobFromNPY
(
path
);
refs
[
i
]
=
blobFromNPY
(
path
);
}
Net
net
=
readNetFromTensorflow
(
netPath
,
netConfig
);
net
.
setPreferableBackend
(
DNN_BACKEND_OPENCV
);
net
.
setPreferableTarget
(
GetParam
()
);
net
.
setPreferableBackend
(
backend
);
net
.
setPreferableTarget
(
target
);
net
.
setInput
(
inp
);
std
::
vector
<
Mat
>
output
;
net
.
forward
(
output
,
outNames
);
normAssert
(
target
[
0
].
reshape
(
1
,
1
),
output
[
0
].
reshape
(
1
,
1
),
""
,
1e-5
,
1.5e-4
);
normAssert
(
target
[
1
].
reshape
(
1
,
1
),
output
[
1
].
reshape
(
1
,
1
),
""
,
1e-5
,
3e-4
);
normAssertDetections
(
target
[
2
],
output
[
2
],
""
,
0.2
);
normAssert
(
refs
[
0
].
reshape
(
1
,
1
),
output
[
0
].
reshape
(
1
,
1
),
""
,
1e-5
,
1.5e-4
);
normAssert
(
refs
[
1
].
reshape
(
1
,
1
),
output
[
1
].
reshape
(
1
,
1
),
""
,
1e-5
,
3e-4
);
normAssertDetections
(
refs
[
2
],
output
[
2
],
""
,
0.2
);
}
TEST_P
(
Test_TensorFlow_nets
,
Inception_v2_SSD
)
{
checkBackend
();
std
::
string
proto
=
findDataFile
(
"dnn/ssd_inception_v2_coco_2017_11_17.pbtxt"
,
false
);
std
::
string
model
=
findDataFile
(
"dnn/ssd_inception_v2_coco_2017_11_17.pb"
,
false
);
...
...
@@ -290,8 +296,8 @@ TEST_P(Test_TensorFlow_nets, Inception_v2_SSD)
Mat
img
=
imread
(
findDataFile
(
"dnn/street.png"
,
false
));
Mat
blob
=
blobFromImage
(
img
,
1.0
f
/
127.5
,
Size
(
300
,
300
),
Scalar
(
127.5
,
127.5
,
127.5
),
true
,
false
);
net
.
setPreferableBackend
(
DNN_BACKEND_OPENCV
);
net
.
setPreferableTarget
(
GetParam
()
);
net
.
setPreferableBackend
(
backend
);
net
.
setPreferableTarget
(
target
);
net
.
setInput
(
blob
);
// Output has shape 1x1xNx7 where N - number of detections.
...
...
@@ -302,16 +308,24 @@ TEST_P(Test_TensorFlow_nets, Inception_v2_SSD)
0
,
3
,
0.75838411
,
0.44668293
,
0.45907149
,
0.49459291
,
0.52197015
,
0
,
10
,
0.95932811
,
0.38349164
,
0.32528657
,
0.40387636
,
0.39165527
,
0
,
10
,
0.93973452
,
0.66561931
,
0.37841269
,
0.68074018
,
0.42907384
);
normAssertDetections
(
ref
,
out
,
""
,
0.5
);
double
scoreDiff
=
(
target
==
DNN_TARGET_OPENCL_FP16
||
target
==
DNN_TARGET_MYRIAD
)
?
5e-3
:
default_l1
;
double
iouDiff
=
(
target
==
DNN_TARGET_OPENCL_FP16
||
target
==
DNN_TARGET_MYRIAD
)
?
0.025
:
default_lInf
;
normAssertDetections
(
ref
,
out
,
""
,
0.5
,
scoreDiff
,
iouDiff
);
}
TEST_P
(
Test_TensorFlow_nets
,
Inception_v2_Faster_RCNN
)
{
checkBackend
();
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
||
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
))
throw
SkipTestException
(
""
);
std
::
string
proto
=
findDataFile
(
"dnn/faster_rcnn_inception_v2_coco_2018_01_28.pbtxt"
,
false
);
std
::
string
model
=
findDataFile
(
"dnn/faster_rcnn_inception_v2_coco_2018_01_28.pb"
,
false
);
Net
net
=
readNetFromTensorflow
(
model
,
proto
);
net
.
setPreferableBackend
(
DNN_BACKEND_OPENCV
);
net
.
setPreferableBackend
(
backend
);
net
.
setPreferableTarget
(
target
);
Mat
img
=
imread
(
findDataFile
(
"dnn/dog416.png"
,
false
));
Mat
blob
=
blobFromImage
(
img
,
1.0
f
/
127.5
,
Size
(
800
,
600
),
Scalar
(
127.5
,
127.5
,
127.5
),
true
,
false
);
...
...
@@ -324,6 +338,11 @@ TEST_P(Test_TensorFlow_nets, Inception_v2_Faster_RCNN)
TEST_P
(
Test_TensorFlow_nets
,
opencv_face_detector_uint8
)
{
checkBackend
();
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
(
target
==
DNN_TARGET_OPENCL
||
target
==
DNN_TARGET_OPENCL_FP16
||
target
==
DNN_TARGET_MYRIAD
))
throw
SkipTestException
(
""
);
std
::
string
proto
=
findDataFile
(
"dnn/opencv_face_detector.pbtxt"
,
false
);
std
::
string
model
=
findDataFile
(
"dnn/opencv_face_detector_uint8.pb"
,
false
);
...
...
@@ -331,9 +350,8 @@ TEST_P(Test_TensorFlow_nets, opencv_face_detector_uint8)
Mat
img
=
imread
(
findDataFile
(
"gpu/lbpcascade/er.png"
,
false
));
Mat
blob
=
blobFromImage
(
img
,
1.0
,
Size
(),
Scalar
(
104.0
,
177.0
,
123.0
),
false
,
false
);
net
.
setPreferableBackend
(
DNN_BACKEND_OPENCV
);
net
.
setPreferableTarget
(
GetParam
());
net
.
setPreferableBackend
(
backend
);
net
.
setPreferableTarget
(
target
);
net
.
setInput
(
blob
);
// Output has shape 1x1xNx7 where N - number of detections.
// An every detection is a vector of values [id, classId, confidence, left, top, right, bottom]
...
...
@@ -346,7 +364,9 @@ TEST_P(Test_TensorFlow_nets, opencv_face_detector_uint8)
0
,
1
,
0.98977017
,
0.23901358
,
0.09084064
,
0.29902688
,
0.1769477
,
0
,
1
,
0.97203469
,
0.67965847
,
0.06876482
,
0.73999709
,
0.1513494
,
0
,
1
,
0.95097077
,
0.51901293
,
0.45863652
,
0.5777427
,
0.5347801
);
normAssertDetections
(
ref
,
out
,
""
,
0.9
,
3.4e-3
,
1e-2
);
double
scoreDiff
=
(
target
==
DNN_TARGET_OPENCL_FP16
||
target
==
DNN_TARGET_MYRIAD
)
?
4e-3
:
3.4e-3
;
double
iouDiff
=
(
target
==
DNN_TARGET_OPENCL_FP16
||
target
==
DNN_TARGET_MYRIAD
)
?
0.017
:
1e-2
;
normAssertDetections
(
ref
,
out
,
""
,
0.9
,
scoreDiff
,
iouDiff
);
}
// inp = cv.imread('opencv_extra/testdata/cv/ximgproc/sources/08.png')
...
...
@@ -360,6 +380,10 @@ TEST_P(Test_TensorFlow_nets, opencv_face_detector_uint8)
// np.save('east_text_detection.geometry.npy', geometry)
TEST_P
(
Test_TensorFlow_nets
,
EAST_text_detection
)
{
checkBackend
();
if
(
target
==
DNN_TARGET_OPENCL_FP16
||
target
==
DNN_TARGET_MYRIAD
)
throw
SkipTestException
(
""
);
std
::
string
netPath
=
findDataFile
(
"dnn/frozen_east_text_detection.pb"
,
false
);
std
::
string
imgPath
=
findDataFile
(
"cv/ximgproc/sources/08.png"
,
false
);
std
::
string
refScoresPath
=
findDataFile
(
"dnn/east_text_detection.scores.npy"
,
false
);
...
...
@@ -367,7 +391,8 @@ TEST_P(Test_TensorFlow_nets, EAST_text_detection)
Net
net
=
readNet
(
findDataFile
(
"dnn/frozen_east_text_detection.pb"
,
false
));
net
.
setPreferableTarget
(
GetParam
());
net
.
setPreferableBackend
(
backend
);
net
.
setPreferableTarget
(
target
);
Mat
img
=
imread
(
imgPath
);
Mat
inp
=
blobFromImage
(
img
,
1.0
,
Size
(),
Scalar
(
123.68
,
116.78
,
103.94
),
true
,
false
);
...
...
@@ -386,7 +411,7 @@ TEST_P(Test_TensorFlow_nets, EAST_text_detection)
normAssert
(
geometry
,
blobFromNPY
(
refGeometryPath
),
"geometry"
,
1e-4
,
3e-3
);
}
INSTANTIATE_TEST_CASE_P
(
/**/
,
Test_TensorFlow_nets
,
availableDnn
Targets
());
INSTANTIATE_TEST_CASE_P
(
/**/
,
Test_TensorFlow_nets
,
dnnBackendsAnd
Targets
());
TEST_P
(
Test_TensorFlow_layers
,
fp16_weights
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment