Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
5dc2716d
P
PaddleX
项目概览
PaddlePaddle
/
PaddleX
通知
138
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
43
列表
看板
标记
里程碑
合并请求
5
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleX
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
43
Issue
43
列表
看板
标记
里程碑
合并请求
5
合并请求
5
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
5dc2716d
编写于
5月 16, 2020
作者:
S
SunAhong1993
提交者:
GitHub
5月 16, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update visualize.py
上级
7e661ba9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
10 deletion
+18
-10
paddlex/cv/models/explanation/visualize.py
paddlex/cv/models/explanation/visualize.py
+18
-10
未找到文件。
paddlex/cv/models/explanation/visualize.py
浏览文件 @
5dc2716d
...
@@ -23,7 +23,7 @@ from .core.normlime_base import precompute_normlime_weights
...
@@ -23,7 +23,7 @@ from .core.normlime_base import precompute_normlime_weights
def
visualize
(
img_file
,
def
visualize
(
img_file
,
model
,
model
,
normlime_
dataset
=
None
,
dataset
=
None
,
explanation_type
=
'lime'
,
explanation_type
=
'lime'
,
num_samples
=
3000
,
num_samples
=
3000
,
batch_size
=
50
,
batch_size
=
50
,
...
@@ -39,11 +39,11 @@ def visualize(img_file,
...
@@ -39,11 +39,11 @@ def visualize(img_file,
img
=
np
.
expand_dims
(
img
,
axis
=
0
)
img
=
np
.
expand_dims
(
img
,
axis
=
0
)
explaier
=
None
explaier
=
None
if
explanation_type
==
'lime'
:
if
explanation_type
==
'lime'
:
explaier
=
get_lime_explaier
(
img
,
model
,
num_samples
=
num_samples
,
batch_size
=
batch_size
)
explaier
=
get_lime_explaier
(
img
,
model
,
dataset
,
num_samples
=
num_samples
,
batch_size
=
batch_size
)
elif
explanation_type
==
'normlime'
:
elif
explanation_type
==
'normlime'
:
if
normlime_
dataset
is
None
:
if
dataset
is
None
:
raise
Exception
(
'The
normlime_
dataset is None. Cannot implement this kind of explanation'
)
raise
Exception
(
'The dataset is None. Cannot implement this kind of explanation'
)
explaier
=
get_normlime_explaier
(
img
,
model
,
normlime_
dataset
,
explaier
=
get_normlime_explaier
(
img
,
model
,
dataset
,
num_samples
=
num_samples
,
batch_size
=
batch_size
,
num_samples
=
num_samples
,
batch_size
=
batch_size
,
save_dir
=
save_dir
)
save_dir
=
save_dir
)
else
:
else
:
...
@@ -52,7 +52,7 @@ def visualize(img_file,
...
@@ -52,7 +52,7 @@ def visualize(img_file,
explaier
.
explain
(
img
,
save_dir
=
save_dir
)
explaier
.
explain
(
img
,
save_dir
=
save_dir
)
def
get_lime_explaier
(
img
,
model
,
num_samples
=
3000
,
batch_size
=
50
):
def
get_lime_explaier
(
img
,
model
,
dataset
,
num_samples
=
3000
,
batch_size
=
50
):
def
predict_func
(
image
):
def
predict_func
(
image
):
image
=
image
.
astype
(
'float32'
)
image
=
image
.
astype
(
'float32'
)
for
i
in
range
(
image
.
shape
[
0
]):
for
i
in
range
(
image
.
shape
[
0
]):
...
@@ -60,14 +60,18 @@ def get_lime_explaier(img, model, num_samples=3000, batch_size=50):
...
@@ -60,14 +60,18 @@ def get_lime_explaier(img, model, num_samples=3000, batch_size=50):
model
.
test_transforms
.
transforms
=
model
.
test_transforms
.
transforms
[
-
2
:]
model
.
test_transforms
.
transforms
=
model
.
test_transforms
.
transforms
[
-
2
:]
out
=
model
.
explanation_predict
(
image
)
out
=
model
.
explanation_predict
(
image
)
return
out
[
0
]
return
out
[
0
]
labels_name
=
None
if
dataset
is
not
None
:
labels_name
=
dataset
.
labels
explaier
=
Explanation
(
'lime'
,
explaier
=
Explanation
(
'lime'
,
predict_func
,
predict_func
,
labels_name
,
num_samples
=
num_samples
,
num_samples
=
num_samples
,
batch_size
=
batch_size
)
batch_size
=
batch_size
)
return
explaier
return
explaier
def
get_normlime_explaier
(
img
,
model
,
normlime_
dataset
,
num_samples
=
3000
,
batch_size
=
50
,
save_dir
=
'./'
):
def
get_normlime_explaier
(
img
,
model
,
dataset
,
num_samples
=
3000
,
batch_size
=
50
,
save_dir
=
'./'
):
def
precompute_predict_func
(
image
):
def
precompute_predict_func
(
image
):
image
=
image
.
astype
(
'float32'
)
image
=
image
.
astype
(
'float32'
)
model
.
test_transforms
.
transforms
=
model
.
test_transforms
.
transforms
[
-
2
:]
model
.
test_transforms
.
transforms
=
model
.
test_transforms
.
transforms
[
-
2
:]
...
@@ -80,6 +84,9 @@ def get_normlime_explaier(img, model, normlime_dataset, num_samples=3000, batch_
...
@@ -80,6 +84,9 @@ def get_normlime_explaier(img, model, normlime_dataset, num_samples=3000, batch_
model
.
test_transforms
.
transforms
=
model
.
test_transforms
.
transforms
[
-
2
:]
model
.
test_transforms
.
transforms
=
model
.
test_transforms
.
transforms
[
-
2
:]
out
=
model
.
explanation_predict
(
image
)
out
=
model
.
explanation_predict
(
image
)
return
out
[
0
]
return
out
[
0
]
labels_name
=
None
if
dataset
is
not
None
:
labels_name
=
dataset
.
labels
root_path
=
os
.
environ
[
'HOME'
]
root_path
=
os
.
environ
[
'HOME'
]
root_path
=
osp
.
join
(
root_path
,
'.paddlex'
)
root_path
=
osp
.
join
(
root_path
,
'.paddlex'
)
pre_models_path
=
osp
.
join
(
root_path
,
"pre_models"
)
pre_models_path
=
osp
.
join
(
root_path
,
"pre_models"
)
...
@@ -88,21 +95,22 @@ def get_normlime_explaier(img, model, normlime_dataset, num_samples=3000, batch_
...
@@ -88,21 +95,22 @@ def get_normlime_explaier(img, model, normlime_dataset, num_samples=3000, batch_
# TODO
# TODO
# paddlex.utils.download_and_decompress(url, path=pre_models_path)
# paddlex.utils.download_and_decompress(url, path=pre_models_path)
npy_dir
=
precompute_for_normlime
(
precompute_predict_func
,
npy_dir
=
precompute_for_normlime
(
precompute_predict_func
,
normlime_
dataset
,
dataset
,
num_samples
=
num_samples
,
num_samples
=
num_samples
,
batch_size
=
batch_size
,
batch_size
=
batch_size
,
save_dir
=
save_dir
)
save_dir
=
save_dir
)
explaier
=
Explanation
(
'normlime'
,
explaier
=
Explanation
(
'normlime'
,
predict_func
,
predict_func
,
labels_name
,
num_samples
=
num_samples
,
num_samples
=
num_samples
,
batch_size
=
batch_size
,
batch_size
=
batch_size
,
normlime_weights
=
npy_dir
)
normlime_weights
=
npy_dir
)
return
explaier
return
explaier
def
precompute_for_normlime
(
predict_func
,
normlime_
dataset
,
num_samples
=
3000
,
batch_size
=
50
,
save_dir
=
'./'
):
def
precompute_for_normlime
(
predict_func
,
dataset
,
num_samples
=
3000
,
batch_size
=
50
,
save_dir
=
'./'
):
image_list
=
[]
image_list
=
[]
for
item
in
normlime_
dataset
.
file_list
:
for
item
in
dataset
.
file_list
:
image_list
.
append
(
item
[
0
])
image_list
.
append
(
item
[
0
])
return
precompute_normlime_weights
(
return
precompute_normlime_weights
(
image_list
,
image_list
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录