Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
67f9406c
O
opencv
项目概览
OpenCV
/
opencv
上一次同步 9 个月
通知
992
Star
71100
Fork
55581
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
67f9406c
编写于
1月 04, 2018
作者:
L
Li Peng
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add normalize_bbox layer ocl implementation
Signed-off-by:
N
Li Peng
<
peng.li@intel.com
>
上级
f99a135e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
68 addition
and
0 deletion
+68
-0
modules/dnn/src/layers/normalize_bbox_layer.cpp
modules/dnn/src/layers/normalize_bbox_layer.cpp
+63
-0
modules/dnn/test/test_torch_importer.cpp
modules/dnn/test/test_torch_importer.cpp
+5
-0
未找到文件。
modules/dnn/src/layers/normalize_bbox_layer.cpp
浏览文件 @
67f9406c
...
...
@@ -69,11 +69,74 @@ public:
return
true
;
}
#ifdef HAVE_OPENCL
bool
forward_ocl
(
InputArrayOfArrays
inputs_
,
OutputArrayOfArrays
outputs_
,
OutputArrayOfArrays
internals_
)
{
std
::
vector
<
UMat
>
inputs
;
std
::
vector
<
UMat
>
outputs
;
std
::
vector
<
UMat
>
internals
;
inputs_
.
getUMatVector
(
inputs
);
outputs_
.
getUMatVector
(
outputs
);
internals_
.
getUMatVector
(
internals
);
CV_Assert
(
inputs
.
size
()
==
1
&&
outputs
.
size
()
==
1
);
CV_Assert
(
inputs
[
0
].
total
()
==
outputs
[
0
].
total
());
const
UMat
&
inp0
=
inputs
[
0
];
UMat
&
buffer
=
internals
[
0
];
size_t
num
=
inp0
.
size
[
0
];
size_t
channels
=
inp0
.
size
[
1
];
size_t
channelSize
=
inp0
.
total
()
/
(
num
*
channels
);
for
(
size_t
i
=
0
;
i
<
num
;
++
i
)
{
MatShape
s
=
shape
(
channels
,
channelSize
);
UMat
src
=
inputs
[
i
].
reshape
(
1
,
s
.
size
(),
&
s
[
0
]);
UMat
dst
=
outputs
[
i
].
reshape
(
1
,
s
.
size
(),
&
s
[
0
]);
UMat
abs_mat
;
absdiff
(
src
,
cv
::
Scalar
::
all
(
0
),
abs_mat
);
pow
(
abs_mat
,
pnorm
,
buffer
);
if
(
acrossSpatial
)
{
// add eps to avoid overflow
float
absSum
=
sum
(
buffer
)[
0
]
+
epsilon
;
float
norm
=
pow
(
absSum
,
1.0
f
/
pnorm
);
multiply
(
src
,
1.0
f
/
norm
,
dst
);
}
if
(
!
blobs
.
empty
())
{
// scale the output
Mat
scale
=
blobs
[
0
];
if
(
scale
.
total
()
==
1
)
{
// _scale: 1 x 1
multiply
(
dst
,
scale
.
at
<
float
>
(
0
,
0
),
dst
);
}
else
{
// _scale: _channels x 1
CV_Assert
(
scale
.
total
()
==
channels
);
repeat
(
scale
,
1
,
dst
.
cols
,
buffer
);
multiply
(
dst
,
buffer
,
dst
);
}
}
}
return
true
;
}
#endif
void
forward
(
InputArrayOfArrays
inputs_arr
,
OutputArrayOfArrays
outputs_arr
,
OutputArrayOfArrays
internals_arr
)
{
CV_TRACE_FUNCTION
();
CV_TRACE_ARG_VALUE
(
name
,
"name"
,
name
.
c_str
());
CV_OCL_RUN
((
preferableTarget
==
DNN_TARGET_OPENCL
)
&&
OCL_PERFORMANCE_CHECK
(
ocl
::
Device
::
getDefault
().
isIntel
()),
forward_ocl
(
inputs_arr
,
outputs_arr
,
internals_arr
))
Layer
::
forward_fallback
(
inputs_arr
,
outputs_arr
,
internals_arr
);
}
...
...
modules/dnn/test/test_torch_importer.cpp
浏览文件 @
67f9406c
...
...
@@ -225,6 +225,11 @@ TEST(Torch_Importer, net_normalize)
runTorchNet
(
"net_normalize"
,
DNN_TARGET_CPU
,
""
,
false
,
true
);
}
OCL_TEST
(
Torch_Importer
,
net_normalize
)
{
runTorchNet
(
"net_normalize"
,
DNN_TARGET_OPENCL
,
""
,
false
,
true
);
}
TEST
(
Torch_Importer
,
net_padding
)
{
runTorchNet
(
"net_padding"
,
DNN_TARGET_CPU
,
""
,
false
,
true
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录