Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
61d3222a
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 搜索 >>
提交
61d3222a
编写于
5月 27, 2019
作者:
L
Lubov Batanina
提交者:
Alexander Alekhin
5月 27, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge pull request #14537 from l-bat:fix_network_vizualizer
Fix dnn visualizer (#14537) * Fixed print layer params * Fix print
上级
a81c0e6d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
53 addition
and
28 deletion
+53
-28
modules/dnn/src/dnn.cpp
modules/dnn/src/dnn.cpp
+53
-28
未找到文件。
modules/dnn/src/dnn.cpp
浏览文件 @
61d3222a
...
...
@@ -2980,6 +2980,23 @@ int Net::getLayerId(const String &layer)
return
impl
->
getLayerId
(
layer
);
}
String
parseLayerParams
(
const
String
&
name
,
const
LayerParams
&
lp
)
{
DictValue
param
=
lp
.
get
(
name
);
std
::
ostringstream
out
;
out
<<
name
<<
" "
;
switch
(
param
.
size
())
{
case
1
:
out
<<
": "
;
break
;
case
2
:
out
<<
"(HxW): "
;
break
;
case
3
:
out
<<
"(DxHxW): "
;
break
;
default:
CV_Error
(
Error
::
StsNotImplemented
,
format
(
"Unsupported %s size = %d"
,
name
.
c_str
(),
param
.
size
()));
}
for
(
size_t
i
=
0
;
i
<
param
.
size
()
-
1
;
i
++
)
{
out
<<
param
.
get
<
int
>
(
i
)
<<
" x "
;
}
out
<<
param
.
get
<
int
>
(
param
.
size
()
-
1
)
<<
"
\\
l"
;
return
out
.
str
();
}
String
Net
::
dump
()
{
CV_Assert
(
!
empty
());
...
...
@@ -3065,39 +3082,47 @@ String Net::dump()
out
<<
" | "
;
}
out
<<
lp
.
name
<<
"
\\
n"
<<
lp
.
type
<<
"
\\
n"
;
if
(
lp
.
has
(
"kernel_size"
))
{
DictValue
size
=
lp
.
get
(
"kernel_size"
);
out
<<
"kernel (HxW): "
<<
size
<<
" x "
<<
size
<<
"
\\
l"
;
}
else
if
(
lp
.
has
(
"kernel_h"
)
&&
lp
.
has
(
"kernel_w"
))
{
DictValue
h
=
lp
.
get
(
"kernel_h"
);
DictValue
w
=
lp
.
get
(
"kernel_w"
);
out
<<
"kernel (HxW): "
<<
h
<<
" x "
<<
w
<<
"
\\
l"
;
}
if
(
lp
.
has
(
"stride"
))
{
DictValue
stride
=
lp
.
get
(
"stride"
);
out
<<
"stride (HxW): "
<<
stride
<<
" x "
<<
stride
<<
"
\\
l"
;
}
else
if
(
lp
.
has
(
"stride_h"
)
&&
lp
.
has
(
"stride_w"
))
{
DictValue
h
=
lp
.
get
(
"stride_h"
);
DictValue
w
=
lp
.
get
(
"stride_w"
);
out
<<
"stride (HxW): "
<<
h
<<
" x "
<<
w
<<
"
\\
l"
;
}
if
(
lp
.
has
(
"dilation"
))
{
DictValue
dilation
=
lp
.
get
(
"dilation"
);
out
<<
"dilation (HxW): "
<<
dilation
<<
" x "
<<
dilation
<<
"
\\
l"
;
}
else
if
(
lp
.
has
(
"dilation_h"
)
&&
lp
.
has
(
"dilation_w"
))
{
DictValue
h
=
lp
.
get
(
"dilation_h"
);
DictValue
w
=
lp
.
get
(
"dilation_w"
);
out
<<
"dilation (HxW): "
<<
h
<<
" x "
<<
w
<<
"
\\
l"
;
}
if
(
lp
.
has
(
"pad"
))
{
DictValue
pad
=
lp
.
get
(
"pad"
);
out
<<
"pad (LxTxRxB): "
<<
pad
<<
" x "
<<
pad
<<
" x "
<<
pad
<<
" x "
<<
pad
<<
"
\\
l"
;
if
(
lp
.
has
(
"kernel_size"
))
{
String
kernel
=
parseLayerParams
(
"kernel_size"
,
lp
);
out
<<
kernel
;
}
else
if
(
lp
.
has
(
"kernel_h"
)
&&
lp
.
has
(
"kernel_w"
))
{
DictValue
h
=
lp
.
get
(
"kernel_h"
);
DictValue
w
=
lp
.
get
(
"kernel_w"
);
out
<<
"kernel (HxW): "
<<
h
<<
" x "
<<
w
<<
"
\\
l"
;
}
if
(
lp
.
has
(
"stride"
))
{
String
stride
=
parseLayerParams
(
"stride"
,
lp
);
out
<<
stride
;
}
else
if
(
lp
.
has
(
"stride_h"
)
&&
lp
.
has
(
"stride_w"
))
{
DictValue
h
=
lp
.
get
(
"stride_h"
);
DictValue
w
=
lp
.
get
(
"stride_w"
);
out
<<
"stride (HxW): "
<<
h
<<
" x "
<<
w
<<
"
\\
l"
;
}
if
(
lp
.
has
(
"dilation"
))
{
String
dilation
=
parseLayerParams
(
"dilation"
,
lp
);
out
<<
dilation
;
}
else
if
(
lp
.
has
(
"dilation_h"
)
&&
lp
.
has
(
"dilation_w"
))
{
DictValue
h
=
lp
.
get
(
"dilation_h"
);
DictValue
w
=
lp
.
get
(
"dilation_w"
);
out
<<
"dilation (HxW): "
<<
h
<<
" x "
<<
w
<<
"
\\
l"
;
}
if
(
lp
.
has
(
"pad"
))
{
DictValue
pad
=
lp
.
get
(
"pad"
);
out
<<
"pad "
;
switch
(
pad
.
size
())
{
case
1
:
out
<<
": "
<<
pad
<<
"
\\
l"
;
break
;
case
2
:
out
<<
"(HxW): ("
<<
pad
.
get
<
int
>
(
0
)
<<
" x "
<<
pad
.
get
<
int
>
(
1
)
<<
")"
<<
"
\\
l"
;
break
;
case
4
:
out
<<
"(HxW): ("
<<
pad
.
get
<
int
>
(
0
)
<<
", "
<<
pad
.
get
<
int
>
(
2
)
<<
") x ("
<<
pad
.
get
<
int
>
(
1
)
<<
", "
<<
pad
.
get
<
int
>
(
3
)
<<
")"
<<
"
\\
l"
;
break
;
case
6
:
out
<<
"(DxHxW): ("
<<
pad
.
get
<
int
>
(
0
)
<<
", "
<<
pad
.
get
<
int
>
(
3
)
<<
") x ("
<<
pad
.
get
<
int
>
(
1
)
<<
", "
<<
pad
.
get
<
int
>
(
4
)
<<
") x ("
<<
pad
.
get
<
int
>
(
2
)
<<
", "
<<
pad
.
get
<
int
>
(
5
)
<<
")"
<<
"
\\
l"
;
break
;
default:
CV_Error
(
Error
::
StsNotImplemented
,
format
(
"Unsupported pad size = %d"
,
pad
.
size
()));
}
}
else
if
(
lp
.
has
(
"pad_l"
)
&&
lp
.
has
(
"pad_t"
)
&&
lp
.
has
(
"pad_r"
)
&&
lp
.
has
(
"pad_b"
))
{
DictValue
l
=
lp
.
get
(
"pad_l"
);
DictValue
t
=
lp
.
get
(
"pad_t"
);
DictValue
r
=
lp
.
get
(
"pad_r"
);
DictValue
b
=
lp
.
get
(
"pad_b"
);
out
<<
"pad (
LxTxRxB): "
<<
l
<<
" x "
<<
t
<<
" x "
<<
r
<<
" x "
<<
b
<<
"
\\
l"
;
out
<<
"pad (
HxW): ("
<<
t
<<
", "
<<
b
<<
") x ("
<<
l
<<
", "
<<
r
<<
")"
<<
"
\\
l"
;
}
else
if
(
lp
.
has
(
"pooled_w"
)
||
lp
.
has
(
"pooled_h"
))
{
DictValue
h
=
lp
.
get
(
"pooled_h"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录