paddle2.0版本的PaddleSeg模型转换为onnx格式

paddleSeg简介

paddleseg release2.0版本提供了50+的高质量预训练模型,支持15+主流分割网络,提供了业界的SOTA模型OCRNet,很好的提升了产品易用性。

PaddleSeg是基于飞桨PaddlePaddle开发的端到端图像分割开发套件,涵盖了高精度和轻量级等不同方向的大量高质量分割模型。通过模块化的设计,提供了配置化驱动和API调用两种应用方式,帮助开发者更便捷地完成从训练到部署的全流程图像分割应用。

特性

  • 高精度模型:基于百度自研的半监督标签知识蒸馏方案(SSLD)训练得到高精度骨干网络,结合前沿的分割技术,提供了50+的高质量预训练模型,效果优于其他开源实现。

  • 模块化设计:支持15+主流 分割网络 ,结合模块化设计的 数据增强策略 、骨干网络、损失函数 等不同组件,开发者可以基于实际应用场景出发,组装多样化的训练配置,满足不同性能和精度的要求。

  • 高性能:支持多进程异步I/O、多卡并行训练、评估等加速策略,结合飞桨核心框架的显存优化功能,可大幅度减少分割模型的训练开销,让开发者更低成本、更高效地完成图像分割训练。

支持的数据集

  • Cityscapes
  • Pascal VOC
  • ADE20K
  • Pascal Context
  • COCO stuff

In [ ]:

# 安装PaddleSeg
! pip install paddleseg
# 下载PaddleSeg代码
! git clone https://github.com/PaddlePaddle/PaddleSeg

In [ ]:

#如果用户网络不佳,可以选择使用Gitee进行代码下载
! git clone https://gitee.com/paddlepaddle/PaddleSeg.git

In [ ]:

# 训练
! python PaddleSeg/train.py --config PaddleSeg/configs/quick_start/bisenet_optic_disc_512x512_1k.yml --do_eval \
       --use_vdl --save_interval 200 --save_dir output

使用VIsualDL进行可视化

VisualDL 是一个面向深度学习任务设计的可视化工具。VisualDL 利用了丰富的图表来展示数据,用户可以更直观、清晰地查看数据的特征与变化趋势,有助于分析数据、及时发现错误,进而改进神经网络模型的设计。

目前,VisualDL 支持 scalar, image, audio, graph, histogram, pr curve, high dimensional 七个组件,项目正处于高速迭代中,敬请期待新组件的加入。

  • 本次项目使用scalar和model进行可视化分析。

  • github首页:https://github.com/PaddlePaddle/VisualDL

  • 官网:https://www.paddlepaddle.org.cn/paddle/visualdl

  • 欢迎大家在GitHub上点赞~

paddle2.0版本的PaddleSeg模型转换为onnx格式_第1张图片

标量数据可视化

paddle2.0版本的PaddleSeg模型转换为onnx格式_第2张图片

==

paddle2.0版本的PaddleSeg模型转换为onnx格式_第3张图片

模型网络结构可视化

因为运行到这里时还没有生成onnx模型文件,所以onnx模型网络结构可视化可以在转换完onnx模型文件后进行

paddle2.0版本的PaddleSeg模型转换为onnx格式_第4张图片

模型验证

当保存完模型后,我们可以通过PaddleSeg提供的脚本对模型进行评估

In [ ]:

# 模型验证
! python PaddleSeg/val.py \
       --config PaddleSeg/configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --model_path output/iter_1000/model.pdparams

模型预测

当保存完模型后,可以通过PaddleSeg提供的脚本对模型进行预测,同时对结果进行可视化,查看分割效果。

--model_path output/iter_1000/model.pdparams 表示选择模型路径 --image_path data/optic_disc_seg/JPEGImages/H0003.jpg 表示选择预测的图片,如果次时候image_path中有多张图片,也可实现全部预测 --save_dir output/result 表示预测保存的结果地址

In [ ]:

! python PaddleSeg/predict.py --config PaddleSeg/configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --model_path output/iter_1000/model.pdparams \
       --image_path data/optic_disc_seg/JPEGImages/N0093.jpg \
       --save_dir output/result

显示结果 在output文件夹中分别有两个文件夹,一个是预测的叠加图,一个是伪彩色图片

模型导出

为了方便用户进行工业级的部署,PaddleSeg提供了一键动转静的功能,即将训练出来的动态图模型文件转化成静态图形式。

In [ ]:

# 模型导出
! python PaddleSeg/export.py \
       --config PaddleSeg/configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --model_path output/iter_1000/model.pdparams
  • 结果文件
output
  ├── deploy.yaml            # 部署相关的配置文件
  ├── model.pdiparams        # 静态图模型参数
  ├── model.pdiparams.info   # 参数额外信息,一般无需关注
  └── model.pdmodel          # 静态图模型文件

paddle2onnx并不是所有模型都支持转换,目前支持的PaddleSeg模型:

paddle2.0版本的PaddleSeg模型转换为onnx格式_第5张图片

搭建paddle2onnx的使用环境

paddle2onnx、ONNX简介

ONNX (Open Neural Network Exchange)是针对机器学习所设计的开源文件格式,用于存储训练好的模型。它使得不同的人工智能框架可以采用相同格式存储模型并交互。通过ONNX格式,Paddle模型可以使用OpenVINO、ONNX Runtime、MNN等框架进行推理。

paddle2onnx支持将PaddlePaddle模型格式转化到ONNX模型格式。

  • 模型格式,支持Paddle静态图和动态图模型转为ONNX,可转换由save_inference_model导出的静态图模型,使用方法请参考IPthon示例。动态图转换目前处于实验状态,将伴随Paddle 2.0正式版发布后,提供详细使用教程。
  • 算子支持,目前稳定支持导出ONNX Opset 9~11,部分Paddle算子支持更低的ONNX Opset转换,详情可参考算子列表。
  • 模型类型,官方测试可转换的模型请参考模型库。

  • github首页:https://github.com/PaddlePaddle/paddle2onnx

  • 官网:https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/09_model_to_onnx_cn.html

  • 欢迎大家在GitHub上点赞~

In [ ]:

# 环境依赖
# Paddle2ONNX项目更新频繁,推荐使用源码进行安装
# 安装之后请点击上方的重启按钮,重启notebook
!git clone https://github.com/paddlepaddle/paddle2onnx --depth 1
!cd ~/paddle2onnx && python setup.py install
!pip install onnx

In [1]:

# 使用paddle2onnx将paddle模型格式转化到ONNX模型格式。
! paddle2onnx --model_dir ./output/ \
    --model_filename model.pdmodel \
    --params_filename model.pdiparams \
    --save_file segonnx/model.onnx \
    --opset_version 11

模型网络结构可视化

paddle2.0版本的PaddleSeg模型转换为onnx格式_第6张图片

ONNX模型的验证

ONNX官方工具包提供了API可验证模型的正确性,主要包括两个方面,一是算子是否符合对应版本的协议,二是网络结构是否完整。

In [3]:

# check by ONNX
import onnx

# onnx_file = save_path +  '.onnx'
# onnx_file ='onnx-model/detectionmodel.onnx'
save_path = 'segonnx/'
onnx_file = save_path +  'model.onnx'
onnx_model = onnx.load(onnx_file)
onnx.checker.check_model(onnx_model)
print('The model is checked!')

你可能感兴趣的:(推理部署,paddlepaddle,深度学习)