Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
8d6b8b45
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8d6b8b45
编写于
8月 01, 2017
作者:
A
Aleksandr Rybnikov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added ELU and test for it
上级
4ad45af5
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
69 addition
and
0 deletion
+69
-0
modules/dnn/include/opencv2/dnn/all_layers.hpp
modules/dnn/include/opencv2/dnn/all_layers.hpp
+6
-0
modules/dnn/src/init.cpp
modules/dnn/src/init.cpp
+1
-0
modules/dnn/src/layers/elementwise_layers.cpp
modules/dnn/src/layers/elementwise_layers.cpp
+37
-0
modules/dnn/src/tensorflow/tf_importer.cpp
modules/dnn/src/tensorflow/tf_importer.cpp
+7
-0
modules/dnn/test/test_layers.cpp
modules/dnn/test/test_layers.cpp
+18
-0
未找到文件。
modules/dnn/include/opencv2/dnn/all_layers.hpp
浏览文件 @
8d6b8b45
...
...
@@ -349,6 +349,12 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
static
Ptr
<
ChannelsPReLULayer
>
create
(
const
LayerParams
&
params
);
};
class
CV_EXPORTS
ELULayer
:
public
ActivationLayer
{
public:
static
Ptr
<
ELULayer
>
create
(
const
LayerParams
&
params
);
};
class
CV_EXPORTS
TanHLayer
:
public
ActivationLayer
{
public:
...
...
modules/dnn/src/init.cpp
浏览文件 @
8d6b8b45
...
...
@@ -96,6 +96,7 @@ void initializeLayerFactory()
CV_DNN_REGISTER_LAYER_CLASS
(
ChannelsPReLU
,
ChannelsPReLULayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
Sigmoid
,
SigmoidLayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
TanH
,
TanHLayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
ELU
,
ELULayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
BNLL
,
BNLLLayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
AbsVal
,
AbsLayer
);
CV_DNN_REGISTER_LAYER_CLASS
(
Power
,
PowerLayer
);
...
...
modules/dnn/src/layers/elementwise_layers.cpp
浏览文件 @
8d6b8b45
...
...
@@ -302,6 +302,35 @@ struct SigmoidFunctor
int64
getFLOPSPerElement
()
const
{
return
3
;
}
};
struct
ELUFunctor
{
typedef
ELULayer
Layer
;
explicit
ELUFunctor
()
{}
void
apply
(
const
float
*
srcptr
,
float
*
dstptr
,
int
len
,
size_t
planeSize
,
int
cn0
,
int
cn1
)
const
{
for
(
int
cn
=
cn0
;
cn
<
cn1
;
cn
++
,
srcptr
+=
planeSize
,
dstptr
+=
planeSize
)
{
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
float
x
=
srcptr
[
i
];
dstptr
[
i
]
=
x
>=
0.
f
?
x
:
exp
(
x
)
-
1
;
}
}
}
#ifdef HAVE_HALIDE
void
attachHalide
(
const
Halide
::
Expr
&
input
,
Halide
::
Func
&
top
)
{
Halide
::
Var
x
(
"x"
),
y
(
"y"
),
c
(
"c"
),
n
(
"n"
);
top
(
x
,
y
,
c
,
n
)
=
select
(
input
>=
0.0
f
,
input
,
exp
(
input
)
-
1
);
}
#endif // HAVE_HALIDE
int64
getFLOPSPerElement
()
const
{
return
2
;
}
};
struct
AbsValFunctor
{
typedef
AbsLayer
Layer
;
...
...
@@ -504,6 +533,14 @@ Ptr<SigmoidLayer> SigmoidLayer::create(const LayerParams& params)
return
l
;
}
Ptr
<
ELULayer
>
ELULayer
::
create
(
const
LayerParams
&
params
)
{
Ptr
<
ELULayer
>
l
(
new
ElementWiseLayer
<
ELUFunctor
>
(
ELUFunctor
()));
l
->
setParamsFrom
(
params
);
return
l
;
}
Ptr
<
AbsLayer
>
AbsLayer
::
create
(
const
LayerParams
&
params
)
{
Ptr
<
AbsLayer
>
l
(
new
ElementWiseLayer
<
AbsValFunctor
>
());
...
...
modules/dnn/src/tensorflow/tf_importer.cpp
浏览文件 @
8d6b8b45
...
...
@@ -677,6 +677,13 @@ void TFImporter::populateNet(Net dstNet)
connectToAllBlobs
(
layer_id
,
dstNet
,
parsePin
(
layer
.
input
(
0
)),
id
,
layer
.
input_size
());
}
else
if
(
type
==
"Elu"
)
{
int
id
=
dstNet
.
addLayer
(
name
,
"ELU"
,
layerParams
);
layer_id
[
name
]
=
id
;
connectToAllBlobs
(
layer_id
,
dstNet
,
parsePin
(
layer
.
input
(
0
)),
id
,
layer
.
input_size
());
}
else
if
(
type
==
"MaxPool"
)
{
layerParams
.
set
(
"pool"
,
"max"
);
...
...
modules/dnn/test/test_layers.cpp
浏览文件 @
8d6b8b45
...
...
@@ -268,11 +268,29 @@ static void test_Reshape_Split_Slice_layers()
normAssert
(
input
,
output
);
}
TEST
(
Layer_Test_Reshape_Split_Slice
,
Accuracy
)
{
test_Reshape_Split_Slice_layers
();
}
TEST
(
Layer_Conv_Elu
,
Accuracy
)
{
Net
net
;
{
Ptr
<
Importer
>
importer
=
createTensorflowImporter
(
_tf
(
"layer_elu_model.pb"
));
ASSERT_TRUE
(
importer
!=
NULL
);
importer
->
populateNet
(
net
);
}
Mat
inp
=
blobFromNPY
(
_tf
(
"layer_elu_in.npy"
));
Mat
ref
=
blobFromNPY
(
_tf
(
"layer_elu_out.npy"
));
net
.
setInput
(
inp
,
"input"
);
Mat
out
=
net
.
forward
();
normAssert
(
ref
,
out
);
}
class
Layer_LSTM_Test
:
public
::
testing
::
Test
{
public:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录