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
fa466b02
Commit
fa466b02
authored
Jul 26, 2018
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #12052 from dkurt:dnn_ie_torch_tests
parents
43820d89
faa6c4e1
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
303 additions
and
153 deletions
+303
-153
dnn.hpp
modules/dnn/include/opencv2/dnn/dnn.hpp
+1
-1
dnn.cpp
modules/dnn/src/dnn.cpp
+8
-0
detection_output_layer.cpp
modules/dnn/src/layers/detection_output_layer.cpp
+7
-4
pooling_layer.cpp
modules/dnn/src/layers/pooling_layer.cpp
+50
-21
proposal_layer.cpp
modules/dnn/src/layers/proposal_layer.cpp
+48
-7
ocl4dnn_pool.cpp
modules/dnn/src/ocl4dnn/src/ocl4dnn_pool.cpp
+2
-1
ocl4dnn_pooling.cl
modules/dnn/src/opencl/ocl4dnn_pooling.cl
+2
-2
torch_importer.cpp
modules/dnn/src/torch/torch_importer.cpp
+10
-0
test_caffe_importer.cpp
modules/dnn/test/test_caffe_importer.cpp
+68
-33
test_layers.cpp
modules/dnn/test/test_layers.cpp
+1
-9
test_torch_importer.cpp
modules/dnn/test/test_torch_importer.cpp
+105
-74
object_detection.py
samples/dnn/object_detection.py
+1
-1
No files found.
modules/dnn/include/opencv2/dnn/dnn.hpp
View file @
fa466b02
...
@@ -201,7 +201,7 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
...
@@ -201,7 +201,7 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param[out] outputs allocated output blobs, which will store results of the computation.
* @param[out] outputs allocated output blobs, which will store results of the computation.
* @param[out] internals allocated internal blobs
* @param[out] internals allocated internal blobs
*/
*/
virtual
void
forward
(
InputArrayOfArrays
inputs
,
OutputArrayOfArrays
outputs
,
OutputArrayOfArrays
internals
)
=
0
;
virtual
void
forward
(
InputArrayOfArrays
inputs
,
OutputArrayOfArrays
outputs
,
OutputArrayOfArrays
internals
);
/** @brief Given the @p input blobs, computes the output @p blobs.
/** @brief Given the @p input blobs, computes the output @p blobs.
* @param[in] inputs the input blobs.
* @param[in] inputs the input blobs.
...
...
modules/dnn/src/dnn.cpp
View file @
fa466b02
...
@@ -3071,6 +3071,14 @@ std::vector<Mat> Layer::finalize(const std::vector<Mat> &inputs)
...
@@ -3071,6 +3071,14 @@ std::vector<Mat> Layer::finalize(const std::vector<Mat> &inputs)
return
outputs
;
return
outputs
;
}
}
void
Layer
::
forward
(
InputArrayOfArrays
inputs
,
OutputArrayOfArrays
outputs
,
OutputArrayOfArrays
internals
)
{
CV_TRACE_FUNCTION
();
CV_TRACE_ARG_VALUE
(
name
,
"name"
,
name
.
c_str
());
Layer
::
forward_fallback
(
inputs
,
outputs
,
internals
);
}
void
Layer
::
forward_fallback
(
InputArrayOfArrays
inputs_arr
,
OutputArrayOfArrays
outputs_arr
,
OutputArrayOfArrays
internals_arr
)
void
Layer
::
forward_fallback
(
InputArrayOfArrays
inputs_arr
,
OutputArrayOfArrays
outputs_arr
,
OutputArrayOfArrays
internals_arr
)
{
{
CV_TRACE_FUNCTION
();
CV_TRACE_FUNCTION
();
...
...
modules/dnn/src/layers/detection_output_layer.cpp
View file @
fa466b02
...
@@ -196,7 +196,7 @@ public:
...
@@ -196,7 +196,7 @@ public:
virtual
bool
supportBackend
(
int
backendId
)
CV_OVERRIDE
virtual
bool
supportBackend
(
int
backendId
)
CV_OVERRIDE
{
{
return
backendId
==
DNN_BACKEND_OPENCV
||
return
backendId
==
DNN_BACKEND_OPENCV
||
backendId
==
DNN_BACKEND_INFERENCE_ENGINE
&&
haveInfEngine
()
&&
!
_locPredTranspos
ed
;
backendId
==
DNN_BACKEND_INFERENCE_ENGINE
&&
!
_locPredTransposed
&&
_bboxesNormaliz
ed
;
}
}
bool
getMemoryShapes
(
const
std
::
vector
<
MatShape
>
&
inputs
,
bool
getMemoryShapes
(
const
std
::
vector
<
MatShape
>
&
inputs
,
...
@@ -411,9 +411,12 @@ public:
...
@@ -411,9 +411,12 @@ public:
CV_TRACE_FUNCTION
();
CV_TRACE_FUNCTION
();
CV_TRACE_ARG_VALUE
(
name
,
"name"
,
name
.
c_str
());
CV_TRACE_ARG_VALUE
(
name
,
"name"
,
name
.
c_str
());
CV_OCL_RUN
(
IS_DNN_OPENCL_TARGET
(
preferableTarget
)
&&
if
(
_bboxesNormalized
)
OCL_PERFORMANCE_CHECK
(
ocl
::
Device
::
getDefault
().
isIntel
()),
{
forward_ocl
(
inputs_arr
,
outputs_arr
,
internals_arr
))
CV_OCL_RUN
(
IS_DNN_OPENCL_TARGET
(
preferableTarget
)
&&
OCL_PERFORMANCE_CHECK
(
ocl
::
Device
::
getDefault
().
isIntel
()),
forward_ocl
(
inputs_arr
,
outputs_arr
,
internals_arr
))
}
Layer
::
forward_fallback
(
inputs_arr
,
outputs_arr
,
internals_arr
);
Layer
::
forward_fallback
(
inputs_arr
,
outputs_arr
,
internals_arr
);
}
}
...
...
modules/dnn/src/layers/pooling_layer.cpp
View file @
fa466b02
...
@@ -135,10 +135,17 @@ public:
...
@@ -135,10 +135,17 @@ public:
virtual
bool
supportBackend
(
int
backendId
)
CV_OVERRIDE
virtual
bool
supportBackend
(
int
backendId
)
CV_OVERRIDE
{
{
return
backendId
==
DNN_BACKEND_OPENCV
||
if
(
backendId
==
DNN_BACKEND_INFERENCE_ENGINE
)
backendId
==
DNN_BACKEND_HALIDE
&&
haveHalide
()
&&
{
(
type
==
MAX
||
type
==
AVE
&&
!
pad
.
width
&&
!
pad
.
height
)
||
if
(
preferableTarget
==
DNN_TARGET_MYRIAD
)
backendId
==
DNN_BACKEND_INFERENCE_ENGINE
&&
haveInfEngine
()
&&
(
type
==
MAX
||
type
==
AVE
);
return
type
==
MAX
||
type
==
AVE
;
else
return
type
!=
STOCHASTIC
;
}
else
return
backendId
==
DNN_BACKEND_OPENCV
||
backendId
==
DNN_BACKEND_HALIDE
&&
haveHalide
()
&&
(
type
==
MAX
||
type
==
AVE
&&
!
pad
.
width
&&
!
pad
.
height
);
}
}
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
...
@@ -192,8 +199,11 @@ public:
...
@@ -192,8 +199,11 @@ public:
CV_TRACE_FUNCTION
();
CV_TRACE_FUNCTION
();
CV_TRACE_ARG_VALUE
(
name
,
"name"
,
name
.
c_str
());
CV_TRACE_ARG_VALUE
(
name
,
"name"
,
name
.
c_str
());
CV_OCL_RUN
(
IS_DNN_OPENCL_TARGET
(
preferableTarget
),
if
(
type
==
MAX
||
type
==
AVE
||
type
==
STOCHASTIC
)
forward_ocl
(
inputs_arr
,
outputs_arr
,
internals_arr
))
{
CV_OCL_RUN
(
IS_DNN_OPENCL_TARGET
(
preferableTarget
),
forward_ocl
(
inputs_arr
,
outputs_arr
,
internals_arr
))
}
Layer
::
forward_fallback
(
inputs_arr
,
outputs_arr
,
internals_arr
);
Layer
::
forward_fallback
(
inputs_arr
,
outputs_arr
,
internals_arr
);
}
}
...
@@ -238,22 +248,41 @@ public:
...
@@ -238,22 +248,41 @@ public:
#ifdef HAVE_INF_ENGINE
#ifdef HAVE_INF_ENGINE
InferenceEngine
::
LayerParams
lp
;
InferenceEngine
::
LayerParams
lp
;
lp
.
name
=
name
;
lp
.
name
=
name
;
lp
.
type
=
"Pooling"
;
lp
.
precision
=
InferenceEngine
::
Precision
::
FP32
;
lp
.
precision
=
InferenceEngine
::
Precision
::
FP32
;
std
::
shared_ptr
<
InferenceEngine
::
PoolingLayer
>
ieLayer
(
new
InferenceEngine
::
PoolingLayer
(
lp
));
std
::
shared_ptr
<
InferenceEngine
::
CNNLayer
>
ieLayer
;
ieLayer
->
_kernel_x
=
kernel
.
width
;
if
(
type
==
MAX
||
type
==
AVE
)
ieLayer
->
_kernel_y
=
kernel
.
height
;
{
ieLayer
->
_stride_x
=
stride
.
width
;
lp
.
type
=
"Pooling"
;
ieLayer
->
_stride_y
=
stride
.
height
;
InferenceEngine
::
PoolingLayer
*
poolLayer
=
new
InferenceEngine
::
PoolingLayer
(
lp
);
ieLayer
->
_padding_x
=
pad
.
width
;
poolLayer
->
_kernel_x
=
kernel
.
width
;
ieLayer
->
_padding_y
=
pad
.
height
;
poolLayer
->
_kernel_y
=
kernel
.
height
;
ieLayer
->
_exclude_pad
=
type
==
AVE
&&
padMode
==
"SAME"
;
poolLayer
->
_stride_x
=
stride
.
width
;
ieLayer
->
params
[
"rounding-type"
]
=
ceilMode
?
"ceil"
:
"floor"
;
poolLayer
->
_stride_y
=
stride
.
height
;
if
(
type
==
MAX
)
poolLayer
->
_padding_x
=
pad
.
width
;
ieLayer
->
_type
=
InferenceEngine
::
PoolingLayer
::
PoolType
::
MAX
;
poolLayer
->
_padding_y
=
pad
.
height
;
else
if
(
type
==
AVE
)
poolLayer
->
_exclude_pad
=
type
==
AVE
&&
padMode
==
"SAME"
;
ieLayer
->
_type
=
InferenceEngine
::
PoolingLayer
::
PoolType
::
AVG
;
poolLayer
->
params
[
"rounding-type"
]
=
ceilMode
?
"ceil"
:
"floor"
;
poolLayer
->
_type
=
type
==
MAX
?
InferenceEngine
::
PoolingLayer
::
PoolType
::
MAX
:
InferenceEngine
::
PoolingLayer
::
PoolType
::
AVG
;
ieLayer
=
std
::
shared_ptr
<
InferenceEngine
::
CNNLayer
>
(
poolLayer
);
}
else
if
(
type
==
ROI
)
{
lp
.
type
=
"ROIPooling"
;
ieLayer
=
std
::
shared_ptr
<
InferenceEngine
::
CNNLayer
>
(
new
InferenceEngine
::
CNNLayer
(
lp
));
ieLayer
->
params
[
"pooled_w"
]
=
format
(
"%d"
,
pooledSize
.
width
);
ieLayer
->
params
[
"pooled_h"
]
=
format
(
"%d"
,
pooledSize
.
height
);
ieLayer
->
params
[
"spatial_scale"
]
=
format
(
"%f"
,
spatialScale
);
}
else
if
(
type
==
PSROI
)
{
lp
.
type
=
"PSROIPooling"
;
ieLayer
=
std
::
shared_ptr
<
InferenceEngine
::
CNNLayer
>
(
new
InferenceEngine
::
CNNLayer
(
lp
));
ieLayer
->
params
[
"output_dim"
]
=
format
(
"%d"
,
psRoiOutChannels
);
ieLayer
->
params
[
"group_size"
]
=
format
(
"%d"
,
pooledSize
.
width
);
ieLayer
->
params
[
"spatial_scale"
]
=
format
(
"%f"
,
spatialScale
);
}
else
else
CV_Error
(
Error
::
StsNotImplemented
,
"Unsupported pooling type"
);
CV_Error
(
Error
::
StsNotImplemented
,
"Unsupported pooling type"
);
...
...
modules/dnn/src/layers/proposal_layer.cpp
View file @
fa466b02
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
// Third party copyrights are property of their respective owners.
// Third party copyrights are property of their respective owners.
#include "../precomp.hpp"
#include "../precomp.hpp"
#include "layers_common.hpp"
#include "layers_common.hpp"
#include "../op_inf_engine.hpp"
namespace
cv
{
namespace
dnn
{
namespace
cv
{
namespace
dnn
{
...
@@ -16,14 +17,14 @@ public:
...
@@ -16,14 +17,14 @@ public:
{
{
setParamsFrom
(
params
);
setParamsFrom
(
params
);
uint32_t
featStride
=
params
.
get
<
uint32_t
>
(
"feat_stride"
,
16
);
featStride
=
params
.
get
<
uint32_t
>
(
"feat_stride"
,
16
);
uint32_t
baseSize
=
params
.
get
<
uint32_t
>
(
"base_size"
,
16
);
baseSize
=
params
.
get
<
uint32_t
>
(
"base_size"
,
16
);
// uint32_t minSize = params.get<uint32_t>("min_size", 16);
// uint32_t minSize = params.get<uint32_t>("min_size", 16);
uint32_t
keepTopBeforeNMS
=
params
.
get
<
uint32_t
>
(
"pre_nms_topn"
,
6000
);
keepTopBeforeNMS
=
params
.
get
<
uint32_t
>
(
"pre_nms_topn"
,
6000
);
keepTopAfterNMS
=
params
.
get
<
uint32_t
>
(
"post_nms_topn"
,
300
);
keepTopAfterNMS
=
params
.
get
<
uint32_t
>
(
"post_nms_topn"
,
300
);
float
nmsThreshold
=
params
.
get
<
float
>
(
"nms_thresh"
,
0.7
);
nmsThreshold
=
params
.
get
<
float
>
(
"nms_thresh"
,
0.7
);
DictValue
ratios
=
params
.
get
(
"ratio"
);
ratios
=
params
.
get
(
"ratio"
);
DictValue
scales
=
params
.
get
(
"scale"
);
scales
=
params
.
get
(
"scale"
);
{
{
LayerParams
lp
;
LayerParams
lp
;
...
@@ -83,6 +84,12 @@ public:
...
@@ -83,6 +84,12 @@ public:
}
}
}
}
virtual
bool
supportBackend
(
int
backendId
)
CV_OVERRIDE
{
return
backendId
==
DNN_BACKEND_OPENCV
||
backendId
==
DNN_BACKEND_INFERENCE_ENGINE
&&
preferableTarget
!=
DNN_TARGET_MYRIAD
;
}
bool
getMemoryShapes
(
const
std
::
vector
<
MatShape
>
&
inputs
,
bool
getMemoryShapes
(
const
std
::
vector
<
MatShape
>
&
inputs
,
const
int
requiredOutputs
,
const
int
requiredOutputs
,
std
::
vector
<
MatShape
>
&
outputs
,
std
::
vector
<
MatShape
>
&
outputs
,
...
@@ -312,6 +319,38 @@ public:
...
@@ -312,6 +319,38 @@ public:
outputs
[
i
].
rowRange
(
numDets
,
keepTopAfterNMS
).
setTo
(
0
);
outputs
[
i
].
rowRange
(
numDets
,
keepTopAfterNMS
).
setTo
(
0
);
}
}
virtual
Ptr
<
BackendNode
>
initInfEngine
(
const
std
::
vector
<
Ptr
<
BackendWrapper
>
>&
)
CV_OVERRIDE
{
#ifdef HAVE_INF_ENGINE
InferenceEngine
::
LayerParams
lp
;
lp
.
name
=
name
;
lp
.
type
=
"Proposal"
;
lp
.
precision
=
InferenceEngine
::
Precision
::
FP32
;
std
::
shared_ptr
<
InferenceEngine
::
CNNLayer
>
ieLayer
(
new
InferenceEngine
::
CNNLayer
(
lp
));
ieLayer
->
params
[
"base_size"
]
=
format
(
"%d"
,
baseSize
);
ieLayer
->
params
[
"feat_stride"
]
=
format
(
"%d"
,
featStride
);
ieLayer
->
params
[
"min_size"
]
=
"16"
;
ieLayer
->
params
[
"nms_thresh"
]
=
format
(
"%f"
,
nmsThreshold
);
ieLayer
->
params
[
"post_nms_topn"
]
=
format
(
"%d"
,
keepTopAfterNMS
);
ieLayer
->
params
[
"pre_nms_topn"
]
=
format
(
"%d"
,
keepTopBeforeNMS
);
if
(
ratios
.
size
())
{
ieLayer
->
params
[
"ratio"
]
=
format
(
"%f"
,
ratios
.
get
<
float
>
(
0
));
for
(
int
i
=
1
;
i
<
ratios
.
size
();
++
i
)
ieLayer
->
params
[
"ratio"
]
+=
format
(
",%f"
,
ratios
.
get
<
float
>
(
i
));
}
if
(
scales
.
size
())
{
ieLayer
->
params
[
"scale"
]
=
format
(
"%f"
,
scales
.
get
<
float
>
(
0
));
for
(
int
i
=
1
;
i
<
scales
.
size
();
++
i
)
ieLayer
->
params
[
"scale"
]
+=
format
(
",%f"
,
scales
.
get
<
float
>
(
i
));
}
return
Ptr
<
BackendNode
>
(
new
InfEngineBackendNode
(
ieLayer
));
#endif // HAVE_INF_ENGINE
return
Ptr
<
BackendNode
>
();
}
private
:
private
:
// A first half of channels are background scores. We need only a second one.
// A first half of channels are background scores. We need only a second one.
static
Mat
getObjectScores
(
const
Mat
&
m
)
static
Mat
getObjectScores
(
const
Mat
&
m
)
...
@@ -342,8 +381,10 @@ private:
...
@@ -342,8 +381,10 @@ private:
Ptr
<
PermuteLayer
>
deltasPermute
;
Ptr
<
PermuteLayer
>
deltasPermute
;
Ptr
<
PermuteLayer
>
scoresPermute
;
Ptr
<
PermuteLayer
>
scoresPermute
;
uint32_t
keepTop
AfterNMS
;
uint32_t
keepTop
BeforeNMS
,
keepTopAfterNMS
,
featStride
,
baseSize
;
Mat
fakeImageBlob
;
Mat
fakeImageBlob
;
float
nmsThreshold
;
DictValue
ratios
,
scales
;
#ifdef HAVE_OPENCL
#ifdef HAVE_OPENCL
UMat
umat_fakeImageBlob
;
UMat
umat_fakeImageBlob
;
#endif
#endif
...
...
modules/dnn/src/ocl4dnn/src/ocl4dnn_pool.cpp
View file @
fa466b02
...
@@ -183,8 +183,9 @@ bool OCL4DNNPool<Dtype>::Forward(const UMat& bottom,
...
@@ -183,8 +183,9 @@ bool OCL4DNNPool<Dtype>::Forward(const UMat& bottom,
ocl
::
Kernel
oclk_sto_pool_forward
(
ocl
::
Kernel
oclk_sto_pool_forward
(
kname
.
c_str
(),
kname
.
c_str
(),
ocl
::
dnn
::
ocl4dnn_pooling_oclsrc
,
ocl
::
dnn
::
ocl4dnn_pooling_oclsrc
,
format
(
"-D KERNEL_STO_POOL=1 -D KERNEL_W=%d -D KERNEL_H=%d"
format
(
"
-D Dtype=%s
-D KERNEL_STO_POOL=1 -D KERNEL_W=%d -D KERNEL_H=%d"
" -D STRIDE_W=%d -D STRIDE_H=%d"
,
" -D STRIDE_W=%d -D STRIDE_H=%d"
,
(
use_half
)
?
"half"
:
"float"
,
kernel_w_
,
kernel_h_
,
kernel_w_
,
kernel_h_
,
stride_w_
,
stride_h_
stride_w_
,
stride_h_
));
));
...
...
modules/dnn/src/opencl/ocl4dnn_pooling.cl
View file @
fa466b02
...
@@ -104,7 +104,7 @@ __kernel void
...
@@ -104,7 +104,7 @@ __kernel void
#
elif
defined
KERNEL_AVE_POOL
#
elif
defined
KERNEL_AVE_POOL
__kernel
void
TEMPLATE
(
ave_pool_forward,
Dtype
)(
__kernel
void
TEMPLATE
(
ave_pool_forward,
Dtype
)(
const
int
nthreads,
__global
const
Dtype*
const
bottom_data,
const
int
nthreads,
__global
const
Dtype*
bottom_data,
const
int
channels,
const
int
height,
const
int
width,
const
int
channels,
const
int
height,
const
int
width,
const
int
pooled_height,
const
int
pooled_width,
const
int
pooled_height,
const
int
pooled_width,
__global
Dtype*
top_data
)
__global
Dtype*
top_data
)
...
@@ -150,7 +150,7 @@ __kernel void TEMPLATE(ave_pool_forward, Dtype)(
...
@@ -150,7 +150,7 @@ __kernel void TEMPLATE(ave_pool_forward, Dtype)(
#
elif
defined
KERNEL_STO_POOL
#
elif
defined
KERNEL_STO_POOL
__kernel
void
TEMPLATE
(
sto_pool_forward_test,Dtype
)(
__kernel
void
TEMPLATE
(
sto_pool_forward_test,Dtype
)(
const
int
nthreads,
__global
const
Dtype*
const
bottom_data,
const
int
nthreads,
__global
const
Dtype*
bottom_data,
const
int
channels,
const
int
height,
const
int
width,
const
int
channels,
const
int
height,
const
int
width,
const
int
pooled_height,
const
int
pooled_width,
const
int
pooled_height,
const
int
pooled_width,
__global
Dtype*
top_data
)
__global
Dtype*
top_data
)
...
...
modules/dnn/src/torch/torch_importer.cpp
View file @
fa466b02
...
@@ -938,6 +938,16 @@ struct TorchImporter
...
@@ -938,6 +938,16 @@ struct TorchImporter
layerParams
.
set
(
"end"
,
DictValue
::
arrayInt
<
int
*>
(
&
ends
[
0
],
4
));
layerParams
.
set
(
"end"
,
DictValue
::
arrayInt
<
int
*>
(
&
ends
[
0
],
4
));
curModule
->
modules
.
push_back
(
newModule
);
curModule
->
modules
.
push_back
(
newModule
);
}
}
else
if
(
nnName
==
"SpatialUpSamplingNearest"
)
{
readTorchTable
(
scalarParams
,
tensorParams
);
CV_Assert
(
scalarParams
.
has
(
"scale_factor"
));
int
scale_factor
=
scalarParams
.
get
<
int
>
(
"scale_factor"
);
newModule
->
apiType
=
"Resize"
;
layerParams
.
set
(
"interpolation"
,
"nearest"
);
layerParams
.
set
(
"zoom_factor"
,
scale_factor
);
curModule
->
modules
.
push_back
(
newModule
);
}
else
else
{
{
// Importer does not know how to map Torch's layer type to an OpenCV's one.
// Importer does not know how to map Torch's layer type to an OpenCV's one.
...
...
modules/dnn/test/test_caffe_importer.cpp
View file @
fa466b02
...
@@ -51,6 +51,33 @@ static std::string _tf(TString filename)
...
@@ -51,6 +51,33 @@ static std::string _tf(TString filename)
return
(
getOpenCVExtraDir
()
+
"/dnn/"
)
+
filename
;
return
(
getOpenCVExtraDir
()
+
"/dnn/"
)
+
filename
;
}
}
class
Test_Caffe_nets
:
public
DNNTestLayer
{
public
:
void
testFaster
(
const
std
::
string
&
proto
,
const
std
::
string
&
model
,
const
Mat
&
ref
,
double
scoreDiff
=
0.0
,
double
iouDiff
=
0.0
)
{
checkBackend
();
Net
net
=
readNetFromCaffe
(
findDataFile
(
"dnn/"
+
proto
,
false
),
findDataFile
(
"dnn/"
+
model
,
false
));
net
.
setPreferableBackend
(
backend
);
net
.
setPreferableTarget
(
target
);
Mat
img
=
imread
(
findDataFile
(
"dnn/dog416.png"
,
false
));
resize
(
img
,
img
,
Size
(
800
,
600
));
Mat
blob
=
blobFromImage
(
img
,
1.0
,
Size
(),
Scalar
(
102.9801
,
115.9465
,
122.7717
),
false
,
false
);
Mat
imInfo
=
(
Mat_
<
float
>
(
1
,
3
)
<<
img
.
rows
,
img
.
cols
,
1.6
f
);
net
.
setInput
(
blob
,
"data"
);
net
.
setInput
(
imInfo
,
"im_info"
);
// Output has shape 1x1xNx7 where N - number of detections.
// An every detection is a vector of values [id, classId, confidence, left, top, right, bottom]
Mat
out
=
net
.
forward
();
scoreDiff
=
scoreDiff
?
scoreDiff
:
default_l1
;
iouDiff
=
iouDiff
?
iouDiff
:
default_lInf
;
normAssertDetections
(
ref
,
out
,
(
"model name: "
+
model
).
c_str
(),
0.8
,
scoreDiff
,
iouDiff
);
}
};
TEST
(
Test_Caffe
,
memory_read
)
TEST
(
Test_Caffe
,
memory_read
)
{
{
const
string
proto
=
findDataFile
(
"dnn/bvlc_googlenet.prototxt"
,
false
);
const
string
proto
=
findDataFile
(
"dnn/bvlc_googlenet.prototxt"
,
false
);
...
@@ -344,9 +371,15 @@ TEST(Reproducibility_GoogLeNet_fp16, Accuracy)
...
@@ -344,9 +371,15 @@ TEST(Reproducibility_GoogLeNet_fp16, Accuracy)
}
}
// https://github.com/richzhang/colorization
// https://github.com/richzhang/colorization
TEST
(
Reproducibility_Colorization
,
Accuracy
)
TEST
_P
(
Test_Caffe_nets
,
Colorization
)
{
{
const
float
l1
=
3e-5
;
checkBackend
();
if
((
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_OPENCL_FP16
)
||
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_MYRIAD
)
||
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
))
throw
SkipTestException
(
""
);
const
float
l1
=
4e-4
;
const
float
lInf
=
3e-3
;
const
float
lInf
=
3e-3
;
Mat
inp
=
blobFromNPY
(
_tf
(
"colorization_inp.npy"
));
Mat
inp
=
blobFromNPY
(
_tf
(
"colorization_inp.npy"
));
...
@@ -356,7 +389,8 @@ TEST(Reproducibility_Colorization, Accuracy)
...
@@ -356,7 +389,8 @@ TEST(Reproducibility_Colorization, Accuracy)
const
string
proto
=
findDataFile
(
"dnn/colorization_deploy_v2.prototxt"
,
false
);
const
string
proto
=
findDataFile
(
"dnn/colorization_deploy_v2.prototxt"
,
false
);
const
string
model
=
findDataFile
(
"dnn/colorization_release_v2.caffemodel"
,
false
);
const
string
model
=
findDataFile
(
"dnn/colorization_release_v2.caffemodel"
,
false
);
Net
net
=
readNetFromCaffe
(
proto
,
model
);
Net
net
=
readNetFromCaffe
(
proto
,
model
);
net
.
setPreferableBackend
(
DNN_BACKEND_OPENCV
);
net
.
setPreferableBackend
(
backend
);
net
.
setPreferableTarget
(
target
);
net
.
getLayer
(
net
.
getLayerId
(
"class8_ab"
))
->
blobs
.
push_back
(
kernel
);
net
.
getLayer
(
net
.
getLayerId
(
"class8_ab"
))
->
blobs
.
push_back
(
kernel
);
net
.
getLayer
(
net
.
getLayerId
(
"conv8_313_rh"
))
->
blobs
.
push_back
(
Mat
(
1
,
313
,
CV_32F
,
2.606
));
net
.
getLayer
(
net
.
getLayerId
(
"conv8_313_rh"
))
->
blobs
.
push_back
(
Mat
(
1
,
313
,
CV_32F
,
2.606
));
...
@@ -447,39 +481,40 @@ INSTANTIATE_TEST_CASE_P(Test_Caffe, opencv_face_detector,
...
@@ -447,39 +481,40 @@ INSTANTIATE_TEST_CASE_P(Test_Caffe, opencv_face_detector,
)
)
);
);
TEST
(
Test_Caffe
,
FasterRCNN_and_RFCN
)
TEST
_P
(
Test_Caffe_nets
,
FasterRCNN_vgg16
)
{
{
std
::
string
models
[]
=
{
"VGG16_faster_rcnn_final.caffemodel"
,
"ZF_faster_rcnn_final.caffemodel"
,
if
((
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_MYRIAD
)
||
"resnet50_rfcn_final.caffemodel"
};
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
))
std
::
string
protos
[]
=
{
"faster_rcnn_vgg16.prototxt"
,
"faster_rcnn_zf.prototxt"
,
throw
SkipTestException
(
""
);
"rfcn_pascal_voc_resnet50.prototxt"
};
static
Mat
ref
=
(
Mat_
<
float
>
(
3
,
7
)
<<
0
,
2
,
0.949398
,
99.2454
,
210.141
,
601.205
,
462.849
,
Mat
refs
[]
=
{(
Mat_
<
float
>
(
3
,
7
)
<<
0
,
2
,
0.949398
,
99.2454
,
210.141
,
601.205
,
462.849
,
0
,
7
,
0.997022
,
481.841
,
92.3218
,
722.685
,
175.953
,
0
,
7
,
0.997022
,
481.841
,
92.3218
,
722.685
,
175.953
,
0
,
12
,
0.993028
,
133.221
,
189.377
,
350.994
,
563.166
);
0
,
12
,
0.993028
,
133.221
,
189.377
,
350.994
,
563.166
),
testFaster
(
"faster_rcnn_vgg16.prototxt"
,
"VGG16_faster_rcnn_final.caffemodel"
,
ref
);
(
Mat_
<
float
>
(
3
,
7
)
<<
0
,
2
,
0.90121
,
120.407
,
115.83
,
570.586
,
528.395
,
}
0
,
7
,
0.988779
,
469.849
,
75.1756
,
718.64
,
186.762
,
0
,
12
,
0.967198
,
138.588
,
206.843
,
329.766
,
553.176
),
(
Mat_
<
float
>
(
2
,
7
)
<<
0
,
7
,
0.991359
,
491.822
,
81.1668
,
702.573
,
178.234
,
0
,
12
,
0.94786
,
132.093
,
223.903
,
338.077
,
566.16
)};
for
(
int
i
=
0
;
i
<
3
;
++
i
)
{
std
::
string
proto
=
findDataFile
(
"dnn/"
+
protos
[
i
],
false
);
std
::
string
model
=
findDataFile
(
"dnn/"
+
models
[
i
],
false
);
Net
net
=
readNetFromCaffe
(
proto
,
model
);
TEST_P
(
Test_Caffe_nets
,
FasterRCNN_zf
)
net
.
setPreferableBackend
(
DNN_BACKEND_OPENCV
);
{
Mat
img
=
imread
(
findDataFile
(
"dnn/dog416.png"
,
false
));
if
((
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_OPENCL_FP16
)
||
resize
(
img
,
img
,
Size
(
800
,
600
));
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_MYRIAD
)
||
Mat
blob
=
blobFromImage
(
img
,
1.0
,
Size
(),
Scalar
(
102.9801
,
115.9465
,
122.7717
),
false
,
false
);
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
))
Mat
imInfo
=
(
Mat_
<
float
>
(
1
,
3
)
<<
img
.
rows
,
img
.
cols
,
1.6
f
);
throw
SkipTestException
(
""
);
static
Mat
ref
=
(
Mat_
<
float
>
(
3
,
7
)
<<
0
,
2
,
0.90121
,
120.407
,
115.83
,
570.586
,
528.395
,
0
,
7
,
0.988779
,
469.849
,
75.1756
,
718.64
,
186.762
,
0
,
12
,
0.967198
,
138.588
,
206.843
,
329.766
,
553.176
);
testFaster
(
"faster_rcnn_zf.prototxt"
,
"ZF_faster_rcnn_final.caffemodel"
,
ref
);
}
net
.
setInput
(
blob
,
"data"
);
TEST_P
(
Test_Caffe_nets
,
RFCN
)
net
.
setInput
(
imInfo
,
"im_info"
);
{
// Output has shape 1x1xNx7 where N - number of detections.
if
((
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_OPENCL_FP16
)
||
// An every detection is a vector of values [id, classId, confidence, left, top, right, bottom]
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_MYRIAD
)
||
Mat
out
=
net
.
forward
();
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
))
normAssertDetections
(
refs
[
i
],
out
,
(
"model name: "
+
models
[
i
]).
c_str
(),
0.8
);
throw
SkipTestException
(
""
);
}
static
Mat
ref
=
(
Mat_
<
float
>
(
2
,
7
)
<<
0
,
7
,
0.991359
,
491.822
,
81.1668
,
702.573
,
178.234
,
0
,
12
,
0.94786
,
132.093
,
223.903
,
338.077
,
566.16
);
testFaster
(
"rfcn_pascal_voc_resnet50.prototxt"
,
"resnet50_rfcn_final.caffemodel"
,
ref
);
}
}
INSTANTIATE_TEST_CASE_P
(
/**/
,
Test_Caffe_nets
,
dnnBackendsAndTargets
());
}}
// namespace
}}
// namespace
modules/dnn/test/test_layers.cpp
View file @
fa466b02
...
@@ -1205,14 +1205,6 @@ public:
...
@@ -1205,14 +1205,6 @@ public:
}
}
}
}
void
forward
(
InputArrayOfArrays
inputs
,
OutputArrayOfArrays
outputs
,
OutputArrayOfArrays
internals
)
CV_OVERRIDE
{
CV_TRACE_FUNCTION
();
CV_TRACE_ARG_VALUE
(
name
,
"name"
,
name
.
c_str
());
Layer
::
forward_fallback
(
inputs
,
outputs
,
internals
);
}
private
:
private
:
int
outWidth
,
outHeight
,
zoomFactor
;
int
outWidth
,
outHeight
,
zoomFactor
;
};
};
...
@@ -1225,7 +1217,7 @@ TEST_P(Test_Caffe_layers, DISABLED_Interp) // requires patched protobuf (availa
...
@@ -1225,7 +1217,7 @@ TEST_P(Test_Caffe_layers, DISABLED_Interp) // requires patched protobuf (availa
{
{
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_MYRIAD
)
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_MYRIAD
)
throw
SkipTestException
(
""
);
throw
SkipTestException
(
""
);
// Test a cusom layer.
// Test a cus
t
om layer.
CV_DNN_REGISTER_LAYER_CLASS
(
Interp
,
CustomInterpLayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
Interp
,
CustomInterpLayer
);
try
try
{
{
...
...
modules/dnn/test/test_torch_importer.cpp
View file @
fa466b02
...
@@ -69,100 +69,119 @@ TEST(Torch_Importer, simple_read)
...
@@ -69,100 +69,119 @@ TEST(Torch_Importer, simple_read)
ASSERT_FALSE
(
net
.
empty
());
ASSERT_FALSE
(
net
.
empty
());
}
}
static
void
runTorchNet
(
String
prefix
,
int
targetId
=
DNN_TARGET_CPU
,
String
outLayerName
=
""
,
class
Test_Torch_layers
:
public
DNNTestLayer
bool
check2ndBlob
=
false
,
bool
isBinary
=
false
)
{
{
String
suffix
=
(
isBinary
)
?
".dat"
:
".txt"
;
public
:
void
runTorchNet
(
const
String
&
prefix
,
String
outLayerName
=
""
,
bool
check2ndBlob
=
false
,
bool
isBinary
=
false
,
double
l1
=
0.0
,
double
lInf
=
0.0
)
{
String
suffix
=
(
isBinary
)
?
".dat"
:
".txt"
;
Net
net
=
readNetFromTorch
(
_tf
(
prefix
+
"_net"
+
suffix
),
isBinary
);
Mat
inp
,
outRef
;
ASSERT_FALSE
(
net
.
empty
());
ASSERT_NO_THROW
(
inp
=
readTorchBlob
(
_tf
(
prefix
+
"_input"
+
suffix
),
isBinary
)
);
ASSERT_NO_THROW
(
outRef
=
readTorchBlob
(
_tf
(
prefix
+
"_output"
+
suffix
),
isBinary
)
);
net
.
setPreferableBackend
(
DNN_BACKEND_OPENCV
);
checkBackend
(
backend
,
target
,
&
inp
,
&
outRef
);
net
.
setPreferableTarget
(
targetId
);
Mat
inp
,
outRef
;
Net
net
=
readNetFromTorch
(
_tf
(
prefix
+
"_net"
+
suffix
),
isBinary
);
ASSERT_NO_THROW
(
inp
=
readTorchBlob
(
_tf
(
prefix
+
"_input"
+
suffix
),
isBinary
)
);
ASSERT_FALSE
(
net
.
empty
());
ASSERT_NO_THROW
(
outRef
=
readTorchBlob
(
_tf
(
prefix
+
"_output"
+
suffix
),
isBinary
)
);
if
(
outLayerName
.
empty
())
net
.
setPreferableBackend
(
backend
);
outLayerName
=
net
.
getLayerNames
().
back
(
);
net
.
setPreferableTarget
(
target
);
net
.
setInput
(
inp
);
if
(
outLayerName
.
empty
())
std
::
vector
<
Mat
>
outBlobs
;
outLayerName
=
net
.
getLayerNames
().
back
();
net
.
forward
(
outBlobs
,
outLayerName
);
normAssert
(
outRef
,
outBlobs
[
0
]);
if
(
check2ndBlob
)
net
.
setInput
(
inp
);
{
std
::
vector
<
Mat
>
outBlobs
;
Mat
out2
=
outBlobs
[
1
];
net
.
forward
(
outBlobs
,
outLayerName
);
Mat
ref2
=
readTorchBlob
(
_tf
(
prefix
+
"_output_2"
+
suffix
),
isBinary
);
l1
=
l1
?
l1
:
default_l1
;
normAssert
(
out2
,
ref2
);
lInf
=
lInf
?
lInf
:
default_lInf
;
}
normAssert
(
outRef
,
outBlobs
[
0
],
""
,
l1
,
lInf
);
}
typedef
testing
::
TestWithParam
<
Target
>
Test_Torch_layers
;
if
(
check2ndBlob
&&
backend
!=
DNN_BACKEND_INFERENCE_ENGINE
)
{
Mat
out2
=
outBlobs
[
1
];
Mat
ref2
=
readTorchBlob
(
_tf
(
prefix
+
"_output_2"
+
suffix
),
isBinary
);
normAssert
(
out2
,
ref2
,
""
,
l1
,
lInf
);
}
}
};
TEST_P
(
Test_Torch_layers
,
run_convolution
)
TEST_P
(
Test_Torch_layers
,
run_convolution
)
{
{
runTorchNet
(
"net_conv"
,
GetParam
(),
""
,
false
,
true
);
if
((
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
!=
DNN_TARGET_CPU
)
||
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
))
throw
SkipTestException
(
""
);
runTorchNet
(
"net_conv"
,
""
,
false
,
true
);
}
}
TEST_P
(
Test_Torch_layers
,
run_pool_max
)
TEST_P
(
Test_Torch_layers
,
run_pool_max
)
{
{
runTorchNet
(
"net_pool_max"
,
GetParam
(),
""
,
true
);
if
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
)
throw
SkipTestException
(
""
);
runTorchNet
(
"net_pool_max"
,
""
,
true
);
}
}
TEST_P
(
Test_Torch_layers
,
run_pool_ave
)
TEST_P
(
Test_Torch_layers
,
run_pool_ave
)
{
{
runTorchNet
(
"net_pool_ave"
,
GetParam
()
);
runTorchNet
(
"net_pool_ave"
);
}
}
TEST_P
(
Test_Torch_layers
,
run_reshape
)
TEST_P
(
Test_Torch_layers
,
run_reshape
)
{
{
int
targetId
=
GetParam
();
runTorchNet
(
"net_reshape"
);
runTorchNet
(
"net_reshape"
,
targetId
);
runTorchNet
(
"net_reshape_batch"
);
runTorchNet
(
"net_reshape_batch"
,
targetId
);
runTorchNet
(
"net_reshape_channels"
,
""
,
false
,
true
);
runTorchNet
(
"net_reshape_single_sample"
,
targetId
);
}
runTorchNet
(
"net_reshape_channels"
,
targetId
,
""
,
false
,
true
);
TEST_P
(
Test_Torch_layers
,
run_reshape_single_sample
)
{
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_OPENCL_FP16
)
throw
SkipTestException
(
""
);
runTorchNet
(
"net_reshape_single_sample"
,
""
,
false
,
false
,
(
target
==
DNN_TARGET_MYRIAD
||
target
==
DNN_TARGET_OPENCL_FP16
)
?
0.0052
:
0.0
);
}
}
TEST_P
(
Test_Torch_layers
,
run_linear
)
TEST_P
(
Test_Torch_layers
,
run_linear
)
{
{
runTorchNet
(
"net_linear_2d"
,
GetParam
());
if
(
backend
==
DNN_BACKEND_OPENCV
&&
target
==
DNN_TARGET_OPENCL_FP16
)
throw
SkipTestException
(
""
);
runTorchNet
(
"net_linear_2d"
);
}
}
TEST_P
(
Test_Torch_layers
,
run_concat
)
TEST_P
(
Test_Torch_layers
,
run_concat
)
{
{
int
targetId
=
GetParam
(
);
runTorchNet
(
"net_concat"
,
"l5_torchMerge"
);
runTorchNet
(
"net_
concat"
,
targetId
,
"l5_torchMerge"
);
runTorchNet
(
"net_
depth_concat"
,
""
,
false
,
true
,
0.0
,
runTorchNet
(
"net_depth_concat"
,
targetId
,
""
,
false
,
true
);
target
==
DNN_TARGET_OPENCL_FP16
?
0.021
:
0.0
);
}
}
TEST_P
(
Test_Torch_layers
,
run_deconv
)
TEST_P
(
Test_Torch_layers
,
run_deconv
)
{
{
runTorchNet
(
"net_deconv"
,
GetParam
()
);
runTorchNet
(
"net_deconv"
);
}
}
TEST_P
(
Test_Torch_layers
,
run_batch_norm
)
TEST_P
(
Test_Torch_layers
,
run_batch_norm
)
{
{
runTorchNet
(
"net_batch_norm"
,
GetParam
(),
""
,
false
,
true
);
runTorchNet
(
"net_batch_norm"
,
""
,
false
,
true
);
}
}
TEST_P
(
Test_Torch_layers
,
net_prelu
)
TEST_P
(
Test_Torch_layers
,
net_prelu
)
{
{
runTorchNet
(
"net_prelu"
,
GetParam
()
);
runTorchNet
(
"net_prelu"
);
}
}
TEST_P
(
Test_Torch_layers
,
net_cadd_table
)
TEST_P
(
Test_Torch_layers
,
net_cadd_table
)
{
{
runTorchNet
(
"net_cadd_table"
,
GetParam
()
);
runTorchNet
(
"net_cadd_table"
);
}
}
TEST_P
(
Test_Torch_layers
,
net_softmax
)
TEST_P
(
Test_Torch_layers
,
net_softmax
)
{
{
int
targetId
=
GetParam
();
runTorchNet
(
"net_softmax"
);
runTorchNet
(
"net_softmax"
,
targetId
);
runTorchNet
(
"net_softmax_spatial"
);
runTorchNet
(
"net_softmax_spatial"
,
targetId
);
}
}
TEST_P
(
Test_Torch_layers
,
net_logsoftmax
)
TEST_P
(
Test_Torch_layers
,
net_logsoftmax
)
...
@@ -173,40 +192,55 @@ TEST_P(Test_Torch_layers, net_logsoftmax)
...
@@ -173,40 +192,55 @@ TEST_P(Test_Torch_layers, net_logsoftmax)
TEST_P
(
Test_Torch_layers
,
net_lp_pooling
)
TEST_P
(
Test_Torch_layers
,
net_lp_pooling
)
{
{
int
targetId
=
GetParam
();
runTorchNet
(
"net_lp_pooling_square"
,
""
,
false
,
true
);
runTorchNet
(
"net_lp_pooling_square"
,
targetId
,
""
,
false
,
true
);
runTorchNet
(
"net_lp_pooling_power"
,
""
,
false
,
true
);
runTorchNet
(
"net_lp_pooling_power"
,
targetId
,
""
,
false
,
true
);
}
}
TEST_P
(
Test_Torch_layers
,
net_conv_gemm_lrn
)
TEST_P
(
Test_Torch_layers
,
net_conv_gemm_lrn
)
{
{
runTorchNet
(
"net_conv_gemm_lrn"
,
GetParam
(),
""
,
false
,
true
);
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
target
==
DNN_TARGET_MYRIAD
)
throw
SkipTestException
(
""
);
runTorchNet
(
"net_conv_gemm_lrn"
,
""
,
false
,
true
,
target
==
DNN_TARGET_OPENCL_FP16
?
0.046
:
0.0
,
target
==
DNN_TARGET_OPENCL_FP16
?
0.023
:
0.0
);
}
}
TEST_P
(
Test_Torch_layers
,
net_inception_block
)
TEST_P
(
Test_Torch_layers
,
net_inception_block
)
{
{
runTorchNet
(
"net_inception_block"
,
GetParam
(),
""
,
false
,
true
);
runTorchNet
(
"net_inception_block"
,
""
,
false
,
true
);
}
}
TEST_P
(
Test_Torch_layers
,
net_normalize
)
TEST_P
(
Test_Torch_layers
,
net_normalize
)
{
{
runTorchNet
(
"net_normalize"
,
GetParam
(),
""
,
false
,
true
);
runTorchNet
(
"net_normalize"
,
""
,
false
,
true
);
}
}
TEST_P
(
Test_Torch_layers
,
net_padding
)
TEST_P
(
Test_Torch_layers
,
net_padding
)
{
{
int
targetId
=
GetParam
();
runTorchNet
(
"net_padding"
,
""
,
false
,
true
);
runTorchNet
(
"net_padding"
,
targetId
,
""
,
false
,
true
);
runTorchNet
(
"net_spatial_zero_padding"
,
""
,
false
,
true
);
runTorchNet
(
"net_spatial_zero_padding"
,
targetId
,
""
,
false
,
true
);
runTorchNet
(
"net_spatial_reflection_padding"
,
""
,
false
,
true
);
runTorchNet
(
"net_spatial_reflection_padding"
,
targetId
,
""
,
false
,
true
);
}
}
TEST_P
(
Test_Torch_layers
,
net_non_spatial
)
TEST_P
(
Test_Torch_layers
,
net_non_spatial
)
{
{
runTorchNet
(
"net_non_spatial"
,
GetParam
(),
""
,
false
,
true
);
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
&&
(
target
==
DNN_TARGET_OPENCL
||
target
==
DNN_TARGET_OPENCL_FP16
))
throw
SkipTestException
(
""
);
runTorchNet
(
"net_non_spatial"
,
""
,
false
,
true
);
}
TEST_P
(
Test_Torch_layers
,
run_paralel
)
{
if
(
backend
!=
DNN_BACKEND_OPENCV
||
target
!=
DNN_TARGET_CPU
)
throw
SkipTestException
(
""
);
runTorchNet
(
"net_parallel"
,
"l5_torchMerge"
);
}
}
INSTANTIATE_TEST_CASE_P
(
/**/
,
Test_Torch_layers
,
availableDnnTargets
());
TEST_P
(
Test_Torch_layers
,
net_residual
)
{
runTorchNet
(
"net_residual"
,
""
,
false
,
true
);
}
typedef
testing
::
TestWithParam
<
Target
>
Test_Torch_nets
;
typedef
testing
::
TestWithParam
<
Target
>
Test_Torch_nets
;
...
@@ -313,21 +347,6 @@ TEST_P(Test_Torch_nets, FastNeuralStyle_accuracy)
...
@@ -313,21 +347,6 @@ TEST_P(Test_Torch_nets, FastNeuralStyle_accuracy)
INSTANTIATE_TEST_CASE_P
(
/**/
,
Test_Torch_nets
,
availableDnnTargets
());
INSTANTIATE_TEST_CASE_P
(
/**/
,
Test_Torch_nets
,
availableDnnTargets
());
// TODO: fix OpenCL and add to the rest of tests
TEST
(
Torch_Importer
,
run_paralel
)
{
runTorchNet
(
"net_parallel"
,
DNN_TARGET_CPU
,
"l5_torchMerge"
);
}
TEST
(
Torch_Importer
,
DISABLED_run_paralel
)
{
runTorchNet
(
"net_parallel"
,
DNN_TARGET_OPENCL
,
"l5_torchMerge"
);
}
TEST
(
Torch_Importer
,
net_residual
)
{
runTorchNet
(
"net_residual"
,
DNN_TARGET_CPU
,
""
,
false
,
true
);
}
// Test a custom layer
// Test a custom layer
// https://github.com/torch/nn/blob/master/doc/convolution.md#nn.SpatialUpSamplingNearest
// https://github.com/torch/nn/blob/master/doc/convolution.md#nn.SpatialUpSamplingNearest
...
@@ -374,17 +393,29 @@ public:
...
@@ -374,17 +393,29 @@ public:
}
}
}
}
virtual
void
forward
(
InputArrayOfArrays
,
OutputArrayOfArrays
,
OutputArrayOfArrays
)
CV_OVERRIDE
{}
private
:
private
:
int
scale
;
int
scale
;
};
};
TEST
(
Torch_Importer
,
upsampling_nearest
)
TEST
_P
(
Test_Torch_layers
,
upsampling_nearest
)
{
{
// Test a custom layer.
CV_DNN_REGISTER_LAYER_CLASS
(
SpatialUpSamplingNearest
,
SpatialUpSamplingNearestLayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
SpatialUpSamplingNearest
,
SpatialUpSamplingNearestLayer
);
runTorchNet
(
"net_spatial_upsampling_nearest"
,
DNN_TARGET_CPU
,
""
,
false
,
true
);
try
{
runTorchNet
(
"net_spatial_upsampling_nearest"
,
""
,
false
,
true
);
}
catch
(...)
{
LayerFactory
::
unregisterLayer
(
"SpatialUpSamplingNearest"
);
throw
;
}
LayerFactory
::
unregisterLayer
(
"SpatialUpSamplingNearest"
);
LayerFactory
::
unregisterLayer
(
"SpatialUpSamplingNearest"
);
// Test an implemented layer.
runTorchNet
(
"net_spatial_upsampling_nearest"
,
""
,
false
,
true
);
}
}
INSTANTIATE_TEST_CASE_P
(
/**/
,
Test_Torch_layers
,
dnnBackendsAndTargets
());
}
}
samples/dnn/object_detection.py
View file @
fa466b02
...
@@ -190,7 +190,7 @@ while cv.waitKey(1) < 0:
...
@@ -190,7 +190,7 @@ while cv.waitKey(1) < 0:
net
.
setInput
(
blob
)
net
.
setInput
(
blob
)
if
net
.
getLayer
(
0
)
.
outputNameToIndex
(
'im_info'
)
!=
-
1
:
# Faster-RCNN or R-FCN
if
net
.
getLayer
(
0
)
.
outputNameToIndex
(
'im_info'
)
!=
-
1
:
# Faster-RCNN or R-FCN
frame
=
cv
.
resize
(
frame
,
(
inpWidth
,
inpHeight
))
frame
=
cv
.
resize
(
frame
,
(
inpWidth
,
inpHeight
))
net
.
setInput
(
np
.
array
([
inpHeight
,
inpWidth
,
1.6
],
dtype
=
np
.
float32
),
'im_info'
)
net
.
setInput
(
np
.
array
([
[
inpHeight
,
inpWidth
,
1.6
]
],
dtype
=
np
.
float32
),
'im_info'
)
outs
=
net
.
forward
(
getOutputsNames
(
net
))
outs
=
net
.
forward
(
getOutputsNames
(
net
))
postprocess
(
frame
,
outs
)
postprocess
(
frame
,
outs
)
...
...
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