Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
4d6efec9
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
4d6efec9
编写于
5月 21, 2020
作者:
S
SunAhong1993
提交者:
GitHub
5月 21, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #7 from PaddlePaddle/develop
00
上级
092ff478
278994a3
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
43 addition
and
21 deletion
+43
-21
docs/update.md
docs/update.md
+7
-2
paddlex/__init__.py
paddlex/__init__.py
+1
-1
paddlex/cv/transforms/cls_transforms.py
paddlex/cv/transforms/cls_transforms.py
+3
-3
paddlex/interpret/__init__.py
paddlex/interpret/__init__.py
+1
-1
paddlex/interpret/core/_session_preparation.py
paddlex/interpret/core/_session_preparation.py
+8
-11
paddlex/interpret/core/interpretation_algorithms.py
paddlex/interpret/core/interpretation_algorithms.py
+11
-1
paddlex/interpret/core/normlime_base.py
paddlex/interpret/core/normlime_base.py
+11
-1
setup.py
setup.py
+1
-1
未找到文件。
docs/update.md
浏览文件 @
4d6efec9
# 更新日志
# 更新日志
-
2020.05.20
> - 发布正式版 v1.0
> - 增加模型C++部署和Python部署代码
> - 增加模型加密部署方案
> - 增加分类模型的OpenVINO部署方案
> - 增加模型可解释性的接口
-
2020.05.17
-
2020.05.17
> - 发布v0.1.8 pip更新
> - 发布v0.1.8 pip更新
> - 修复部分代码Bug
> - 修复部分代码Bug
> - 新增EasyData平台数据标注格式支持
> - 新增EasyData平台数据标注格式支持
> - 支持imgaug数据增强库的pixel-level算子
> - 支持imgaug数据增强库的pixel-level算子
paddlex/__init__.py
浏览文件 @
4d6efec9
...
@@ -53,4 +53,4 @@ log_level = 2
...
@@ -53,4 +53,4 @@ log_level = 2
from
.
import
interpret
from
.
import
interpret
__version__
=
'1.0.
1
.github'
__version__
=
'1.0.
2
.github'
paddlex/cv/transforms/cls_transforms.py
浏览文件 @
4d6efec9
...
@@ -259,8 +259,8 @@ class ResizeByShort(ClsTransform):
...
@@ -259,8 +259,8 @@ class ResizeByShort(ClsTransform):
im_short_size
=
min
(
im
.
shape
[
0
],
im
.
shape
[
1
])
im_short_size
=
min
(
im
.
shape
[
0
],
im
.
shape
[
1
])
im_long_size
=
max
(
im
.
shape
[
0
],
im
.
shape
[
1
])
im_long_size
=
max
(
im
.
shape
[
0
],
im
.
shape
[
1
])
scale
=
float
(
self
.
short_size
)
/
im_short_size
scale
=
float
(
self
.
short_size
)
/
im_short_size
if
self
.
max_size
>
0
and
np
.
round
(
if
self
.
max_size
>
0
and
np
.
round
(
scale
*
scale
*
im_long_size
)
>
self
.
max_size
:
im_long_size
)
>
self
.
max_size
:
scale
=
float
(
self
.
max_size
)
/
float
(
im_long_size
)
scale
=
float
(
self
.
max_size
)
/
float
(
im_long_size
)
resized_width
=
int
(
round
(
im
.
shape
[
1
]
*
scale
))
resized_width
=
int
(
round
(
im
.
shape
[
1
]
*
scale
))
resized_height
=
int
(
round
(
im
.
shape
[
0
]
*
scale
))
resized_height
=
int
(
round
(
im
.
shape
[
0
]
*
scale
))
...
@@ -455,7 +455,7 @@ class ArrangeClassifier(ClsTransform):
...
@@ -455,7 +455,7 @@ class ArrangeClassifier(ClsTransform):
tuple: 当mode为'train'或'eval'时,返回(im, label),分别对应图像np.ndarray数据、
tuple: 当mode为'train'或'eval'时,返回(im, label),分别对应图像np.ndarray数据、
图像类别id;当mode为'test'或'quant'时,返回(im, ),对应图像np.ndarray数据。
图像类别id;当mode为'test'或'quant'时,返回(im, ),对应图像np.ndarray数据。
"""
"""
im
=
permute
(
im
,
False
)
im
=
permute
(
im
,
False
)
.
astype
(
'float32'
)
if
self
.
mode
==
'train'
or
self
.
mode
==
'eval'
:
if
self
.
mode
==
'train'
or
self
.
mode
==
'eval'
:
outputs
=
(
im
,
label
)
outputs
=
(
im
,
label
)
else
:
else
:
...
...
paddlex/interpret/__init__.py
浏览文件 @
4d6efec9
...
@@ -16,4 +16,4 @@ from __future__ import absolute_import
...
@@ -16,4 +16,4 @@ from __future__ import absolute_import
from
.
import
visualize
from
.
import
visualize
lime
=
visualize
.
lime
lime
=
visualize
.
lime
normlime
=
visualize
.
normlime
normlime
=
visualize
.
normlime
\ No newline at end of file
paddlex/interpret/core/_session_preparation.py
浏览文件 @
4d6efec9
...
@@ -28,17 +28,6 @@ def gen_user_home():
...
@@ -28,17 +28,6 @@ def gen_user_home():
return
os
.
path
.
expanduser
(
'~'
)
return
os
.
path
.
expanduser
(
'~'
)
root_path
=
gen_user_home
()
root_path
=
osp
.
join
(
root_path
,
'.paddlex'
)
h_pre_models
=
osp
.
join
(
root_path
,
"pre_models"
)
if
not
osp
.
exists
(
h_pre_models
):
if
not
osp
.
exists
(
root_path
):
os
.
makedirs
(
root_path
)
url
=
"https://bj.bcebos.com/paddlex/interpret/pre_models.tar.gz"
pdx
.
utils
.
download_and_decompress
(
url
,
path
=
root_path
)
h_pre_models_kmeans
=
osp
.
join
(
h_pre_models
,
"kmeans_model.pkl"
)
def
paddle_get_fc_weights
(
var_name
=
"fc_0.w_0"
):
def
paddle_get_fc_weights
(
var_name
=
"fc_0.w_0"
):
fc_weights
=
fluid
.
global_scope
().
find_var
(
var_name
).
get_tensor
()
fc_weights
=
fluid
.
global_scope
().
find_var
(
var_name
).
get_tensor
()
return
np
.
array
(
fc_weights
)
return
np
.
array
(
fc_weights
)
...
@@ -50,6 +39,14 @@ def paddle_resize(extracted_features, outsize):
...
@@ -50,6 +39,14 @@ def paddle_resize(extracted_features, outsize):
def
compute_features_for_kmeans
(
data_content
):
def
compute_features_for_kmeans
(
data_content
):
root_path
=
gen_user_home
()
root_path
=
osp
.
join
(
root_path
,
'.paddlex'
)
h_pre_models
=
osp
.
join
(
root_path
,
"pre_models"
)
if
not
osp
.
exists
(
h_pre_models
):
if
not
osp
.
exists
(
root_path
):
os
.
makedirs
(
root_path
)
url
=
"https://bj.bcebos.com/paddlex/interpret/pre_models.tar.gz"
pdx
.
utils
.
download_and_decompress
(
url
,
path
=
root_path
)
def
conv_bn_layer
(
input
,
def
conv_bn_layer
(
input
,
num_filters
,
num_filters
,
filter_size
,
filter_size
,
...
...
paddlex/interpret/core/interpretation_algorithms.py
浏览文件 @
4d6efec9
...
@@ -13,11 +13,12 @@
...
@@ -13,11 +13,12 @@
#limitations under the License.
#limitations under the License.
import
os
import
os
import
os.path
as
osp
import
numpy
as
np
import
numpy
as
np
import
time
import
time
from
.
import
lime_base
from
.
import
lime_base
from
._session_preparation
import
paddle_get_fc_weights
,
compute_features_for_kmeans
,
h_pre_models_kmeans
from
._session_preparation
import
paddle_get_fc_weights
,
compute_features_for_kmeans
,
gen_user_home
from
.normlime_base
import
combine_normlime_and_lime
,
get_feature_for_kmeans
,
load_kmeans_model
from
.normlime_base
import
combine_normlime_and_lime
,
get_feature_for_kmeans
,
load_kmeans_model
from
paddlex.interpret.as_data_reader.readers
import
read_image
from
paddlex.interpret.as_data_reader.readers
import
read_image
...
@@ -215,6 +216,15 @@ class LIME(object):
...
@@ -215,6 +216,15 @@ class LIME(object):
class
NormLIME
(
object
):
class
NormLIME
(
object
):
def
__init__
(
self
,
predict_fn
,
label_names
,
num_samples
=
3000
,
batch_size
=
50
,
def
__init__
(
self
,
predict_fn
,
label_names
,
num_samples
=
3000
,
batch_size
=
50
,
kmeans_model_for_normlime
=
None
,
normlime_weights
=
None
):
kmeans_model_for_normlime
=
None
,
normlime_weights
=
None
):
root_path
=
gen_user_home
()
root_path
=
osp
.
join
(
root_path
,
'.paddlex'
)
h_pre_models
=
osp
.
join
(
root_path
,
"pre_models"
)
if
not
osp
.
exists
(
h_pre_models
):
if
not
osp
.
exists
(
root_path
):
os
.
makedirs
(
root_path
)
url
=
"https://bj.bcebos.com/paddlex/interpret/pre_models.tar.gz"
pdx
.
utils
.
download_and_decompress
(
url
,
path
=
root_path
)
h_pre_models_kmeans
=
osp
.
join
(
h_pre_models
,
"kmeans_model.pkl"
)
if
kmeans_model_for_normlime
is
None
:
if
kmeans_model_for_normlime
is
None
:
try
:
try
:
self
.
kmeans_model
=
load_kmeans_model
(
h_pre_models_kmeans
)
self
.
kmeans_model
=
load_kmeans_model
(
h_pre_models_kmeans
)
...
...
paddlex/interpret/core/normlime_base.py
浏览文件 @
4d6efec9
...
@@ -13,13 +13,14 @@
...
@@ -13,13 +13,14 @@
#limitations under the License.
#limitations under the License.
import
os
import
os
import
os.path
as
osp
import
numpy
as
np
import
numpy
as
np
import
glob
import
glob
from
paddlex.interpret.as_data_reader.readers
import
read_image
from
paddlex.interpret.as_data_reader.readers
import
read_image
import
paddlex.utils.logging
as
logging
import
paddlex.utils.logging
as
logging
from
.
import
lime_base
from
.
import
lime_base
from
._session_preparation
import
compute_features_for_kmeans
,
h_pre_models_kmeans
from
._session_preparation
import
compute_features_for_kmeans
,
gen_user_home
def
load_kmeans_model
(
fname
):
def
load_kmeans_model
(
fname
):
...
@@ -103,6 +104,15 @@ def save_one_lime_predict_and_kmean_labels(lime_all_weights, image_pred_labels,
...
@@ -103,6 +104,15 @@ def save_one_lime_predict_and_kmean_labels(lime_all_weights, image_pred_labels,
def
precompute_lime_weights
(
list_data_
,
predict_fn
,
num_samples
,
batch_size
,
save_dir
):
def
precompute_lime_weights
(
list_data_
,
predict_fn
,
num_samples
,
batch_size
,
save_dir
):
root_path
=
gen_user_home
()
root_path
=
osp
.
join
(
root_path
,
'.paddlex'
)
h_pre_models
=
osp
.
join
(
root_path
,
"pre_models"
)
if
not
osp
.
exists
(
h_pre_models
):
if
not
osp
.
exists
(
root_path
):
os
.
makedirs
(
root_path
)
url
=
"https://bj.bcebos.com/paddlex/interpret/pre_models.tar.gz"
pdx
.
utils
.
download_and_decompress
(
url
,
path
=
root_path
)
h_pre_models_kmeans
=
osp
.
join
(
h_pre_models
,
"kmeans_model.pkl"
)
kmeans_model
=
load_kmeans_model
(
h_pre_models_kmeans
)
kmeans_model
=
load_kmeans_model
(
h_pre_models_kmeans
)
for
data_index
,
each_data_
in
enumerate
(
list_data_
):
for
data_index
,
each_data_
in
enumerate
(
list_data_
):
...
...
setup.py
浏览文件 @
4d6efec9
...
@@ -19,7 +19,7 @@ long_description = "PaddleX. A end-to-end deeplearning model development toolkit
...
@@ -19,7 +19,7 @@ long_description = "PaddleX. A end-to-end deeplearning model development toolkit
setuptools
.
setup
(
setuptools
.
setup
(
name
=
"paddlex"
,
name
=
"paddlex"
,
version
=
'1.0.
1
'
,
version
=
'1.0.
2
'
,
author
=
"paddlex"
,
author
=
"paddlex"
,
author_email
=
"paddlex@baidu.com"
,
author_email
=
"paddlex@baidu.com"
,
description
=
long_description
,
description
=
long_description
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录