简体中文 | English
训练完成后,大家可以使用评估脚本tools/val.py
来评估模型的精度,即对配置文件中的验证数据集进行测试。
假设训练过程中迭代次数(iters)为1000,保存模型的间隔为500,即每迭代1000次数据集保存2次训练模型。因此一共会产生2个定期保存的模型,加上保存的最佳模型best_model
,一共有3个模型。
output
├── iter_500 #表示在500步保存一次模型
├── model.pdparams #模型参数
└── model.pdopt #训练阶段的优化器参数
├── iter_1000 #表示在1000步保存一次模型
├── model.pdparams #模型参数
└── model.pdopt #训练阶段的优化器参数
└── best_model #精度最高的模型权重
└── model.pdparams
在PP-LiteSeg示例中,执行如下命令进行模型评估。其中,通过--model_path
输入参数来指定评估的模型权重。
!python tools/val.py \
--config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
--model_path output/iter_1000/model.pdparams
如果想进行多尺度翻转评估,可通过传入--aug_eval
进行开启,然后通过--scales
传入尺度信息, --flip_horizontal
开启水平翻转, flip_vertical
开启垂直翻转。使用示例如下:
python tools/val.py \
--config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
--model_path output/iter_1000/model.pdparams \
--aug_eval \
--scales 0.75 1.0 1.25 \
--flip_horizontal
如果想进行滑窗评估,可通过传入--is_slide
进行开启, 通过--crop_size
传入窗口大小, --stride
传入步长。使用示例如下:
python tools/val.py \
--config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
--model_path output/iter_1000/model.pdparams \
--is_slide \
--crop_size 256 256 \
--stride 128 128
在图像分割领域中,评估模型质量主要是通过三个指标进行判断,准确率(acc)、平均交并比(Mean Intersection over Union,简称mIoU)、Kappa系数。
随着评估脚本的运行,最终打印的评估日志如下。
...
2022-06-22 11:05:55 [INFO] [EVAL] #Images: 76 mIoU: 0.9232 Acc: 0.9970 Kappa: 0.9171 Dice: 0.9585
2022-06-22 11:05:55 [INFO] [EVAL] Class IoU:
[0.997 0.8494]
2022-06-22 11:05:55 [INFO] [EVAL] Class Precision:
[0.9984 0.9237]
2022-06-22 11:05:55 [INFO] [EVAL] Class Recall:
[0.9986 0.9135]
构建模型
from paddleseg.models import BiSeNetV2
model = BiSeNetV2(num_classes=2,
lambd=0.25,
align_corners=False,
pretrained=None)
加载模型参数
model_path = 'output/best_model/model.pdparams'#最优模型路径
if model_path:
para_state_dict = paddle.load(model_path)
model.set_dict(para_state_dict) #加载模型参数
print('Loaded trained params of model successfully')
else:
raise ValueError('The model_path is wrong: {}'.format(model_path))
构建验证集
# 构建验证用的transforms
import paddleseg.transforms as T
transforms = [
T.Resize(target_size=(512, 512)),
T.Normalize()
]
# 构建验证集
from paddleseg.datasets import OpticDiscSeg
val_dataset = OpticDiscSeg(
dataset_root='data/optic_disc_seg',
transforms=transforms,
mode='val'
)
Evaluate API 参数解析
paddleseg.core.evaluate(
model,
eval_dataset,
aug_eval=False,
scales=1.0,
flip_horizontal=True,
flip_vertical=False,
is_slide=False,
stride=None,
crop_size=None,
num_workers=0
)
参数名 | 数据类型 | 用途 | 是否必选项 | 默认值 |
---|---|---|---|---|
model | nn.Layer | 分割模型 | 是 | - |
eval_dataset | paddle.io.Dataset | 验证集DataSet | 是 | - |
aug_eval | bool | 是否使用数据增强 | 否 | False |
scales | list/float | 多尺度评估,aug_eval为True时生效 | 否 | 1.0 |
flip_horizontal | bool | 是否使用水平翻转,aug_eval为True时生效 | 否 | True |
flip_vertical | bool | 是否使用垂直翻转,aug_eval为True时生效 | 否 | False |
is_slide | bool | 是否通过滑动窗口进行评估 | 否 | False |
stride | tuple/list | 设置滑动窗宽的宽度和高度,is_slide为True时生效 | 否 | None |
crop_size | tuple/list | 设置滑动窗口的裁剪的宽度和高度,is_slide为True时生效 | 否 | None |
num_workers | int | 多线程数据加载 | 否 | 0 |
注意 如果你想提升显存利用率,可以适当的提高 num_workers 的设置,以防GPU工作期间空等。
导入API接口,开始评估
from paddleseg.core import evaluate
evaluate(
model,
val_dataset #paddle.io.Dataset,验证集DataSet
)
多尺度+翻转评估
evaluate(
model,
val_dataset,
aug_eval=True, #是否使用数据增强
scales=[0.75, 1.0, 1.25], #缩放因子
flip_horizontal=True) #是否水平翻转
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》