Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
f9f16040
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 搜索 >>
提交
f9f16040
编写于
7月 27, 2019
作者:
D
Dmitry Kurtaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add support for slice from ONNX with multiple outputs
上级
2693ed9b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
44 addition
and
4 deletion
+44
-4
modules/dnn/src/onnx/onnx_importer.cpp
modules/dnn/src/onnx/onnx_importer.cpp
+37
-4
modules/dnn/test/test_onnx_importer.cpp
modules/dnn/test/test_onnx_importer.cpp
+7
-0
未找到文件。
modules/dnn/src/onnx/onnx_importer.cpp
浏览文件 @
f9f16040
...
...
@@ -465,6 +465,20 @@ void ONNXImporter::populateNet(Net dstNet)
}
layerParams
.
set
(
"begin"
,
DictValue
::
arrayInt
(
&
begin
[
0
],
begin
.
size
()));
layerParams
.
set
(
"end"
,
DictValue
::
arrayInt
(
&
end
[
0
],
end
.
size
()));
}
else
if
(
layer_type
==
"Split"
)
{
DictValue
splits
=
layerParams
.
get
(
"split"
);
const
int
numSplits
=
splits
.
size
();
CV_Assert
(
numSplits
>
1
);
std
::
vector
<
int
>
slicePoints
(
numSplits
-
1
,
splits
.
get
<
int
>
(
0
));
for
(
int
i
=
1
;
i
<
splits
.
size
()
-
1
;
++
i
)
{
slicePoints
[
i
]
=
slicePoints
[
i
-
1
]
+
splits
.
get
<
int
>
(
i
-
1
);
}
layerParams
.
set
(
"slice_point"
,
DictValue
::
arrayInt
(
&
slicePoints
[
0
],
slicePoints
.
size
()));
layerParams
.
type
=
"Slice"
;
}
else
if
(
layer_type
==
"Add"
||
layer_type
==
"Sum"
)
{
...
...
@@ -486,6 +500,11 @@ void ONNXImporter::populateNet(Net dstNet)
layerParams
.
type
=
"Eltwise"
;
}
}
else
if
(
layer_type
==
"Max"
)
{
layerParams
.
type
=
"Eltwise"
;
layerParams
.
set
(
"operation"
,
"max"
);
}
else
if
(
layer_type
==
"Sub"
)
{
Mat
blob
=
getBlob
(
node_proto
,
constBlobs
,
1
);
...
...
@@ -741,6 +760,16 @@ void ONNXImporter::populateNet(Net dstNet)
{
layerParams
.
type
=
"Permute"
;
replaceLayerParam
(
layerParams
,
"perm"
,
"order"
);
CV_Assert
(
node_proto
.
input_size
()
==
1
);
if
(
constBlobs
.
find
(
node_proto
.
input
(
0
))
!=
constBlobs
.
end
())
{
std
::
vector
<
Mat
>
inputs
(
1
,
getBlob
(
node_proto
,
constBlobs
,
0
)),
transposed
;
runLayer
(
layerParams
,
inputs
,
transposed
);
CV_Assert
(
transposed
.
size
()
==
1
);
constBlobs
.
insert
(
std
::
make_pair
(
layerParams
.
name
,
transposed
[
0
]));
continue
;
}
}
else
if
(
layer_type
==
"Unsqueeze"
)
{
...
...
@@ -906,8 +935,10 @@ void ONNXImporter::populateNet(Net dstNet)
}
int
id
=
dstNet
.
addLayer
(
layerParams
.
name
,
layerParams
.
type
,
layerParams
);
layer_id
.
insert
(
std
::
make_pair
(
layerParams
.
name
,
LayerInfo
(
id
,
0
)));
for
(
int
i
=
0
;
i
<
node_proto
.
output_size
();
++
i
)
{
layer_id
.
insert
(
std
::
make_pair
(
node_proto
.
output
(
i
),
LayerInfo
(
id
,
i
)));
}
std
::
vector
<
MatShape
>
layerInpShapes
,
layerOutShapes
,
layerInternalShapes
;
for
(
int
j
=
0
;
j
<
node_proto
.
input_size
();
j
++
)
{
...
...
@@ -924,8 +955,10 @@ void ONNXImporter::populateNet(Net dstNet)
// Compute shape of output blob for this layer.
Ptr
<
Layer
>
layer
=
dstNet
.
getLayer
(
id
);
layer
->
getMemoryShapes
(
layerInpShapes
,
0
,
layerOutShapes
,
layerInternalShapes
);
CV_Assert
(
!
layerOutShapes
.
empty
());
outShapes
[
layerParams
.
name
]
=
layerOutShapes
[
0
];
for
(
int
i
=
0
;
i
<
node_proto
.
output_size
()
&&
i
<
(
int
)
layerOutShapes
.
size
();
++
i
)
{
outShapes
[
node_proto
.
output
(
i
)]
=
layerOutShapes
[
i
];
}
}
}
...
...
modules/dnn/test/test_onnx_importer.cpp
浏览文件 @
f9f16040
...
...
@@ -348,6 +348,13 @@ TEST_P(Test_ONNX_layers, Softmax)
testONNXModels
(
"log_softmax"
,
npy
,
0
,
0
,
false
,
false
);
}
TEST_P
(
Test_ONNX_layers
,
Split_EltwiseMax
)
{
if
(
backend
==
DNN_BACKEND_INFERENCE_ENGINE
)
applyTestTag
(
CV_TEST_TAG_DNN_SKIP_IE
);
testONNXModels
(
"split_max"
);
}
INSTANTIATE_TEST_CASE_P
(
/*nothing*/
,
Test_ONNX_layers
,
dnnBackendsAndTargets
());
class
Test_ONNX_nets
:
public
Test_ONNX_layers
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录