Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleX
提交
0c1eb3b1
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看板
提交
0c1eb3b1
编写于
5月 07, 2020
作者:
F
FlyingQianMM
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add draw_pr_curve in docs
上级
5925df75
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
78 addition
and
9 deletion
+78
-9
docs/apis/images/insect_bbox_pr_curve(iou-0.5).png
docs/apis/images/insect_bbox_pr_curve(iou-0.5).png
+0
-0
docs/apis/images/xiaoduxiong_bbox_pr_curve(iou-0.5).png
docs/apis/images/xiaoduxiong_bbox_pr_curve(iou-0.5).png
+0
-0
docs/apis/images/xiaoduxiong_segm_pr_curve(iou-0.5).png
docs/apis/images/xiaoduxiong_segm_pr_curve(iou-0.5).png
+0
-0
docs/apis/visualize.md
docs/apis/visualize.md
+69
-5
paddlex/cv/models/utils/visualize.py
paddlex/cv/models/utils/visualize.py
+8
-4
paddlex/det.py
paddlex/det.py
+1
-0
未找到文件。
docs/apis/images/insect_bbox_pr_curve(iou-0.5).png
0 → 100644
浏览文件 @
0c1eb3b1
711.2 KB
docs/apis/images/xiaoduxiong_bbox_pr_curve(iou-0.5).png
0 → 100644
浏览文件 @
0c1eb3b1
315.9 KB
docs/apis/images/xiaoduxiong_segm_pr_curve(iou-0.5).png
0 → 100644
浏览文件 @
0c1eb3b1
316.4 KB
docs/apis/visualize.md
浏览文件 @
0c1eb3b1
...
@@ -3,7 +3,7 @@ PaddleX提供了一系列模型预测和结果分析的可视化函数。
...
@@ -3,7 +3,7 @@ PaddleX提供了一系列模型预测和结果分析的可视化函数。
## 目标检测/实例分割预测结果可视化
## 目标检测/实例分割预测结果可视化
```
```
paddlex.det.visualize(image, result, threshold=0.5, save_dir=
None
)
paddlex.det.visualize(image, result, threshold=0.5, save_dir=
'./'
)
```
```
将目标检测/实例分割模型预测得到的Box框和Mask在原图上进行可视化
将目标检测/实例分割模型预测得到的Box框和Mask在原图上进行可视化
...
@@ -11,7 +11,7 @@ paddlex.det.visualize(image, result, threshold=0.5, save_dir=None)
...
@@ -11,7 +11,7 @@ paddlex.det.visualize(image, result, threshold=0.5, save_dir=None)
> * **image** (str): 原图文件路径。
> * **image** (str): 原图文件路径。
> * **result** (str): 模型预测结果。
> * **result** (str): 模型预测结果。
> * **threshold**(float): score阈值,将Box置信度低于该阈值的框过滤不进行可视化。默认0.5
> * **threshold**(float): score阈值,将Box置信度低于该阈值的框过滤不进行可视化。默认0.5
> * **save_dir**(str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下
> * **save_dir**(str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下
。默认值为'./'。
### 使用示例
### 使用示例
> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/xiaoduxiong_epoch_12.tar.gz)和[测试图片](https://bj.bcebos.com/paddlex/datasets/xiaoduxiong.jpeg)
> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/xiaoduxiong_epoch_12.tar.gz)和[测试图片](https://bj.bcebos.com/paddlex/datasets/xiaoduxiong.jpeg)
...
@@ -23,17 +23,81 @@ pdx.det.visualize('xiaoduxiong.jpeg', result, save_dir='./')
...
@@ -23,17 +23,81 @@ pdx.det.visualize('xiaoduxiong.jpeg', result, save_dir='./')
#
预测结果保存在
./
visualize_xiaoduxiong
.
jpeg
#
预测结果保存在
./
visualize_xiaoduxiong
.
jpeg
```
```
## 目标检测/实例分割准确率-召回率可视化
```
paddlex.det.draw_pr_curve(eval_details_file=None, gt=None, pred_bbox=None, pred_mask=None, iou_thresh=0.5, save_dir='./')
```
将目标检测/实例分割模型评估结果中各个类别的准确率和召回率的对应关系进行可视化,同时可视化召回率和置信度阈值的对应关系。
### 参数
> * **eval_details_file** (str): 模型评估结果的保存路径,包含真值信息和预测结果。默认值为None。
> * **gt** (list): 数据集的真值信息。默认值为None。
> * **pred_bbox** (list): 模型在数据集上的预测框。默认值为None。
> * **pred_mask** (list): 模型在数据集上的预测mask。默认值为None。
> * **iou_thresh** (float): 判断预测框或预测mask为真阳时的IoU阈值。默认值为0.5。
> * **save_dir** (str): 可视化结果保存路径。默认值为'./'。
**注意:**
`eval_details_file`
的优先级更高,只要
`eval_details_file`
不为None,就会从
`eval_details_file`
提取真值信息和预测结果做分析。当
`eval_details_file`
为None时,则用
`gt`
、
`pred_mask`
、
`pred_mask`
做分析。
### 使用示例
> 示例一:
点击下载如下示例中的
[
模型
](
https://bj.bcebos.com/paddlex/models/xiaoduxiong_epoch_12.tar.gz
)
和
[
数据集
](
https://bj.bcebos.com/paddlex/datasets/xiaoduxiong_ins_det.tar.gz
)
```
import
os
#
选择使用
0
号卡
os
.
environ
[
'CUDA_VISIBLE_DEVICES'
]
=
'0'
from
paddlex
.
det
import
transforms
import
paddlex
as
pdx
eval_transforms
=
transforms
.
Compose
([
transforms
.
Normalize
(),
transforms
.
ResizeByShort
(
short_size
=
800
,
max_size
=
1333
),
transforms
.
Padding
(
coarsest_stride
=
32
)
])
eval_dataset
=
pdx
.
datasets
.
CocoDetection
(
data_dir
=
'xiaoduxiong_ins_det/JPEGImages'
,
ann_file
=
'xiaoduxiong_ins_det/val.json'
,
transforms
=
eval_transforms
)
model
=
pdx
.
load_model
(
'xiaoduxiong_epoch_12'
)
metrics
,
evaluate_details
=
model
.
evaluate
(
eval_dataset
,
batch_size
=
1
,
return_details
=
True
)
gt
=
evaluate_details
[
'gt'
]
bbox
=
evaluate_details
[
'bbox'
]
mask
=
evaluate_details
[
'mask'
]
#
分别可视化
bbox
和
mask
的准召曲线
pdx
.
det
.
draw_pr_curve
(
gt
=
gt
,
pred_bbox
=
bbox
,
pred_mask
=
mask
,
save_dir
=
'./xiaoduxiong'
)
```
预测框的各个类别的准确率和召回率的对应关系、召回率和置信度阈值的对应关系可视化如下:
![](
./images/xiaoduxiong_bbox_pr_curve(iou-0.5
)
.png)
预测mask的各个类别的准确率和召回率的对应关系、召回率和置信度阈值的对应关系可视化如下:
![](
./images/xiaoduxiong_segm_pr_curve(iou-0.5
)
.png)
> 示例二:
使用
[
yolov3_darknet53.py示例代码
](
https://github.com/PaddlePaddle/PaddleX/blob/develop/tutorials/train/detection/yolov3_darknet53.py
)
训练完成后,加载模型评估结果文件进行分析:
```
import paddlex as pdx
eval_details_file = 'output/yolov3_darknet53/best_model/eval_details.json'
pdx.det.draw_pr_curve(eval_details_file, save_dir='./insect')
```
预测框的各个类别的准确率和召回率的对应关系、召回率和置信度阈值的对应关系可视化如下:
![](
./images/insect_bbox_pr_curve(iou-0.5
)
.png)
## 语义分割预测结果可视化
## 语义分割预测结果可视化
```
```
paddlex.seg.visualize(image, result, weight=0.6, save_dir=
None
)
paddlex.seg.visualize(image, result, weight=0.6, save_dir=
'./'
)
```
```
将语义分割模型预测得到的Mask在原图上进行可视化
将语义分割模型预测得到的Mask在原图上进行可视化
### 参数
### 参数
> * **image** (str): 原图文件路径。
> * **image** (str): 原图文件路径。
> * **result** (str): 模型预测结果。
> * **result** (str): 模型预测结果。
> * **weight**(float): mask可视化结果与原图权重因子,weight表示原图的权重。默认0.6
> * **weight**(float): mask可视化结果与原图权重因子,weight表示原图的权重。默认0.6
。
> * **save_dir**(str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下
> * **save_dir**(str): 可视化结果保存路径。若为None,则表示不保存,该函数将可视化的结果以np.ndarray的形式返回;若设为目录路径,则将可视化结果保存至该目录下
。默认值为'./'。
### 使用示例
### 使用示例
> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/cityscape_deeplab.tar.gz)和[测试图片](https://bj.bcebos.com/paddlex/datasets/city.png)
> 点击下载如下示例中的[模型](https://bj.bcebos.com/paddlex/models/cityscape_deeplab.tar.gz)和[测试图片](https://bj.bcebos.com/paddlex/datasets/city.png)
...
...
paddlex/cv/models/utils/visualize.py
浏览文件 @
0c1eb3b1
...
@@ -15,14 +15,14 @@
...
@@ -15,14 +15,14 @@
import
os
import
os
import
cv2
import
cv2
import
numpy
as
np
import
numpy
as
np
#import matplotlib
#matplotlib.use('Agg')
import
matplotlib.pyplot
as
plt
import
matplotlib.pyplot
as
plt
from
PIL
import
Image
,
ImageDraw
from
PIL
import
Image
,
ImageDraw
import
paddlex.utils.logging
as
logging
from
.detection_eval
import
fixed_linspace
,
backup_linspace
,
loadRes
from
.detection_eval
import
fixed_linspace
,
backup_linspace
,
loadRes
def
visualize_detection
(
image
,
result
,
threshold
=
0.5
,
save_dir
=
None
):
def
visualize_detection
(
image
,
result
,
threshold
=
0.5
,
save_dir
=
'./'
):
"""
"""
Visualize bbox and mask results
Visualize bbox and mask results
"""
"""
...
@@ -35,11 +35,12 @@ def visualize_detection(image, result, threshold=0.5, save_dir=None):
...
@@ -35,11 +35,12 @@ def visualize_detection(image, result, threshold=0.5, save_dir=None):
os
.
makedirs
(
save_dir
)
os
.
makedirs
(
save_dir
)
out_path
=
os
.
path
.
join
(
save_dir
,
'visualize_{}'
.
format
(
image_name
))
out_path
=
os
.
path
.
join
(
save_dir
,
'visualize_{}'
.
format
(
image_name
))
image
.
save
(
out_path
,
quality
=
95
)
image
.
save
(
out_path
,
quality
=
95
)
logging
.
info
(
'The visualized result is saved as {}'
.
format
(
out_path
))
else
:
else
:
return
image
return
image
def
visualize_segmentation
(
image
,
result
,
weight
=
0.6
,
save_dir
=
None
):
def
visualize_segmentation
(
image
,
result
,
weight
=
0.6
,
save_dir
=
'./'
):
"""
"""
Convert segment result to color image, and save added image.
Convert segment result to color image, and save added image.
Args:
Args:
...
@@ -66,6 +67,7 @@ def visualize_segmentation(image, result, weight=0.6, save_dir=None):
...
@@ -66,6 +67,7 @@ def visualize_segmentation(image, result, weight=0.6, save_dir=None):
image_name
=
os
.
path
.
split
(
image
)[
-
1
]
image_name
=
os
.
path
.
split
(
image
)[
-
1
]
out_path
=
os
.
path
.
join
(
save_dir
,
'visualize_{}'
.
format
(
image_name
))
out_path
=
os
.
path
.
join
(
save_dir
,
'visualize_{}'
.
format
(
image_name
))
cv2
.
imwrite
(
out_path
,
vis_result
)
cv2
.
imwrite
(
out_path
,
vis_result
)
logging
.
info
(
'The visualized result is saved as {}'
.
format
(
out_path
))
else
:
else
:
return
vis_result
return
vis_result
...
@@ -285,6 +287,8 @@ def draw_pr_curve(eval_details_file=None,
...
@@ -285,6 +287,8 @@ def draw_pr_curve(eval_details_file=None,
dpi
=
800
)
dpi
=
800
)
plt
.
close
()
plt
.
close
()
if
not
os
.
path
.
exists
(
save_dir
):
os
.
makedirs
(
save_dir
)
cal_pr
(
coco
,
pred_bbox
,
iou_thresh
,
save_dir
,
style
=
'bbox'
)
cal_pr
(
coco
,
pred_bbox
,
iou_thresh
,
save_dir
,
style
=
'bbox'
)
if
pred_mask
is
not
None
:
if
pred_mask
is
not
None
:
cal_pr
(
coco
,
pred_mask
,
iou_thresh
,
save_dir
,
style
=
'segm'
)
cal_pr
(
coco
,
pred_mask
,
iou_thresh
,
save_dir
,
style
=
'segm'
)
paddlex/det.py
浏览文件 @
0c1eb3b1
...
@@ -20,3 +20,4 @@ YOLOv3 = cv.models.YOLOv3
...
@@ -20,3 +20,4 @@ YOLOv3 = cv.models.YOLOv3
MaskRCNN
=
cv
.
models
.
MaskRCNN
MaskRCNN
=
cv
.
models
.
MaskRCNN
transforms
=
cv
.
transforms
.
det_transforms
transforms
=
cv
.
transforms
.
det_transforms
visualize
=
cv
.
models
.
utils
.
visualize
.
visualize_detection
visualize
=
cv
.
models
.
utils
.
visualize
.
visualize_detection
draw_pr_curve
=
cv
.
models
.
utils
.
visualize
.
draw_pr_curve
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录