Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
s920243400
PaddleDetection
提交
befec463
P
PaddleDetection
项目概览
s920243400
/
PaddleDetection
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleDetection
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
befec463
编写于
7月 08, 2021
作者:
G
Guanghua Yu
提交者:
GitHub
7月 08, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add flops (#3629)
* add flops
上级
1f6087ad
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
39 addition
and
2 deletion
+39
-2
configs/runtime.yml
configs/runtime.yml
+1
-0
docs/tutorials/FAQ.md
docs/tutorials/FAQ.md
+4
-0
ppdet/engine/trainer.py
ppdet/engine/trainer.py
+32
-0
ppdet/slim/prune.py
ppdet/slim/prune.py
+2
-2
未找到文件。
configs/runtime.yml
浏览文件 @
befec463
...
...
@@ -2,3 +2,4 @@ use_gpu: true
log_iter
:
20
save_dir
:
output
snapshot_epoch
:
1
print_flops
:
false
docs/tutorials/FAQ.md
浏览文件 @
befec463
...
...
@@ -94,3 +94,7 @@ TestDataset:
!ImageFolder
anno_path: annotations/instances_val2017.json
```
**Q:**
如何打印网络FLOPs?
**A:**
在
`configs/runtime.yml`
中设置
`print_flops: true`
,同时需要安装PaddleSlim(比如:pip install paddleslim),即可打印模型的FLOPs。
ppdet/engine/trainer.py
浏览文件 @
befec463
...
...
@@ -325,6 +325,9 @@ class Trainer(object):
self
.
cfg
.
log_iter
,
fmt
=
'{avg:.4f}'
)
self
.
status
[
'training_staus'
]
=
stats
.
TrainingStats
(
self
.
cfg
.
log_iter
)
if
self
.
cfg
.
get
(
'print_flops'
,
False
):
self
.
_flops
(
self
.
loader
)
for
epoch_id
in
range
(
self
.
start_epoch
,
self
.
cfg
.
epoch
):
self
.
status
[
'mode'
]
=
'train'
self
.
status
[
'epoch_id'
]
=
epoch_id
...
...
@@ -405,6 +408,8 @@ class Trainer(object):
self
.
_compose_callback
.
on_epoch_begin
(
self
.
status
)
self
.
status
[
'mode'
]
=
'eval'
self
.
model
.
eval
()
if
self
.
cfg
.
get
(
'print_flops'
,
False
):
self
.
_flops
(
loader
)
for
step_id
,
data
in
enumerate
(
loader
):
self
.
status
[
'step_id'
]
=
step_id
self
.
_compose_callback
.
on_step_begin
(
self
.
status
)
...
...
@@ -450,6 +455,8 @@ class Trainer(object):
# Run Infer
self
.
status
[
'mode'
]
=
'test'
self
.
model
.
eval
()
if
self
.
cfg
.
get
(
'print_flops'
,
False
):
self
.
_flops
(
loader
)
for
step_id
,
data
in
enumerate
(
loader
):
self
.
status
[
'step_id'
]
=
step_id
# forward
...
...
@@ -587,3 +594,28 @@ class Trainer(object):
pass
paddle
.
disable_static
()
return
pruned_input_spec
def
_flops
(
self
,
loader
):
self
.
model
.
eval
()
try
:
import
paddleslim
except
Exception
as
e
:
logger
.
warning
(
'Unable to calculate flops, please install paddleslim, for example: `pip install paddleslim`'
)
return
from
paddleslim.analysis
import
dygraph_flops
as
flops
input_data
=
None
for
data
in
loader
:
input_data
=
data
break
input_spec
=
[{
"image"
:
input_data
[
'image'
][
0
].
unsqueeze
(
0
),
"im_shape"
:
input_data
[
'im_shape'
][
0
].
unsqueeze
(
0
),
"scale_factor"
:
input_data
[
'scale_factor'
][
0
].
unsqueeze
(
0
)
}]
flops
=
flops
(
self
.
model
,
input_spec
)
/
(
1000
**
3
)
logger
.
info
(
" Model FLOPs : {:.6f}G. (image shape is {})"
.
format
(
flops
,
input_data
[
'image'
][
0
].
unsqueeze
(
0
).
shape
))
ppdet/slim/prune.py
浏览文件 @
befec463
...
...
@@ -65,7 +65,7 @@ class Pruner(object):
if
self
.
print_params
:
print_prune_params
(
model
)
ori_flops
=
flops
(
model
,
input_spec
)
/
1000
ori_flops
=
flops
(
model
,
input_spec
)
/
(
1000
**
3
)
logger
.
info
(
"FLOPs before pruning: {}GFLOPs"
.
format
(
ori_flops
))
if
self
.
criterion
==
'fpgm'
:
pruner
=
paddleslim
.
dygraph
.
FPGMFilterPruner
(
model
,
input_spec
)
...
...
@@ -78,7 +78,7 @@ class Pruner(object):
for
i
,
param
in
enumerate
(
self
.
pruned_params
):
ratios
[
param
]
=
pruned_ratios
[
i
]
pruner
.
prune_vars
(
ratios
,
[
0
])
pruned_flops
=
flops
(
model
,
input_spec
)
/
1000
pruned_flops
=
flops
(
model
,
input_spec
)
/
(
1000
**
3
)
logger
.
info
(
"FLOPs after pruning: {}GFLOPs; pruned ratio: {}"
.
format
(
pruned_flops
,
(
ori_flops
-
pruned_flops
)
/
ori_flops
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录