Github开源地址,内有数据集设置规则。
参考博客:docs/whole_process_cn.md · PaddlePaddle/PaddleSeg - Gitee.com
开源数据集:
https://paddleseg.bj.bcebos.com/dataset/optic_disc_seg.zip
目录
1.环境安装
参考官方安装文档
2. 配置数据集
2.1 打开项目后,界面如图
2.2 对于数据集的修改脚本都在tools中
这里paddleseg既支持灰度图也支持伪彩色图
通常我们数据集二值化后为像素值为0 255这里伪彩色标注图像素为 0 1归一化,如果有2类就是0 1 如果有3类就是0 1 2 以此类推(这一步很重要)
如果使用0 255 进行训练就会出现如下情况
而且loss很快会变为0
2.2.1 tools中工具说明
1) 灰度标注图转换为伪彩色标注图 (非必须)
python tools/gray2pseudo_color.py <dir_or_file> <output_dir>
脚本使用方法,以下类似
在此文件目录下cmd,将路径替换掉,绝对路径即可中间空格隔开
如果仅希望将指定数据集中的部分灰度标注图转换为伪彩色标注图,则执行以下命令。
python tools/gray2pseudo_color.py <dir_or_file> <output_dir> --dataset_dir <dataset directory> --file_separator <file list separator>
2.3 整理数据
数据格式如下,图片要求24深度jpg格式,标签要求8深度png格式,分类为几项则从0到几
2.4 切分数据
对于所有原始图像和标注图像,需要按照比例划分为训练集、验证集、测试集。
PaddleSeg提供了切分数据并生成文件列表的脚本
split_dataset_list.py
此代码为默认比例7 :3 :1
python tools/split_dataset_list.py <dataset_root> <images_dir_name> <labels_dir_name> ${FLAGS}
参数说明:
- dataset_root: 数据集根目录
- images_dir_name: 原始图像目录名
- labels_dir_name: 标注图像目录名
使用示例:
python tools/split_dataset_list.py <dataset_root> images annotations --split 0.6 0.2 0.2 --format jpg png
切分完成后将生成3个或者2个txt文件
这里的lables.txt为分类种类数如图 ,需要自行设置
这里也可以使用这个切分方法,无需使用脚本。
至此,数据集准备完毕
3.准备配置文件
配置文件均位于configs中,建议自己建一个文件夹,需要哪个模型复制哪个
建议将所有需要的配置复制到一个中,避免重复
避免这种情况,还要去_base_中再去找
4.模型训练
1.单卡训练
准备好配置文件后,在PaddleSeg根目录下执行如下命令,使用train.py
脚本进行单卡模型训练
export CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡
**windows下请执行以下命令**
**set CUDA_VISIBLE_DEVICES=0**
python train.py \
--config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
--save_interval 500 \
--do_eval \
--use_vdl \
--save_dir output
在pycharm中train下右击
上述训练命令解释:
--config
指定配置文件。--save_interval
指定每训练特定轮数后,就进行一次模型保存或者评估(如果开启模型评估)。--do_eval
开启模型评估。具体而言,在训练save_interval指定的轮数后,会进行模型评估。--use_vdl
开启写入VisualDL日志信息,用于VisualDL可视化训练过程。--save_dir
指定模型和visualdl日志文件的保存根路径。
train.py文件说明
2.恢复训练
添加一行resume_model 选择保存的iter
python train.py \
--config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
--resume_model output/iter_500 \
--do_eval \
--use_vdl \
--save_interval 500 \
--save_dir output
3.加载预训练模型
将config中model中的pretrained配置为自己训练的模型即可
6.训练可视化
1.首先安装visualdl
pip install --upgrade --pre visualdl
2.输入命令 ,需要存在log文件
visualdl --logdir ./log --port 8080
# 或者写在自己的文件夹
visualdl --logdir ./output/fcnclass3 --port 8080
7.模型预测
在predict.py中将此代码放入
其中image_path
可以是一个图片路径,也可以是一个目录。如果是一个目录,将对目录内的所有图片进行预测并保存可视化结果图。
同样的,可以通过--aug_pred
开启多尺度翻转预测, --is_slide
开启滑窗预测。
python predict.py \
--config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
--model_path output/best_model/model.pdparams \
--image_path data/optic_disc_seg/JPEGImages/H0002.jpg \
--save_dir output/result
8.模型导出(2步导出)
(1)在export.py中输入如下命令,将模型转为静态
python export.py \
--config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
--model_path output/best_model/model.pdparams \
--save_dir output/infer_model
--input_shape 1 3 512 512
会生成4个文件如图
output/infer_model
├── deploy.yaml # 部署相关的配置文件
├── model.pdiparams # 静态图模型参数
├── model.pdiparams.info # 参数额外信息,一般无需关注
└── model.pdmodel # 静态图模型文件,可以使用netron软件进行可视化查看
(2).利用onnxruntime转为.onnx格式
需要安装onnxruntime库
# 安装cpu版本
pip install onnxruntime
# 安装gpu版本
pip install onnxruntime-gpu
利用pycharm或者cmd都可以在终端输入,需要在中间添加空格,进入paddle环境中输入命令
# 使用paddle2onnx将paddle模型格式转化到ONNX模型格式。
! paddle2onnx --model_dir ./output/ \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--save_file segonnx/model.onnx \
--opset_version 11
--save_file test.onnx
最后转出的模型为
目前支持的模型
利用onnx格式进行整张图像的预测
9.二次开发
paddleseg的代码格式,这里是官方提供的格式说明文件
PaddleSeg
├── configs #配置文件文件夹
├── paddleseg #训练部署的核心代码
├── core # 启动模型训练,评估与预测的接口
├── cvlibs # Config类定义在该文件夹中。它保存了数据集、模型配置、主干网络、损失函数等所有的超参数。
├── callbacks.py
└── ...
├── datasets #PaddleSeg支持的数据格式,包括ade、citycapes等多种格式
├── ade.py
├── citycapes.py
└── ...
├── models #该文件夹下包含了PaddleSeg组网的各个部分
├── backbone # paddleseg的使用的主干网络
├── hrnet.py
├── resnet_vd.py
└── ...
├── layers # 一些组件,例如attention机制
├── activation.py
├── attention.py
└── ...
├── losses #该文件夹下包含了PaddleSeg所用到的损失函数
├── dice_loss.py
├── lovasz_loss.py
└── ...
├── ann.py #该文件表示的是PaddleSeg所支持的算法模型,这里表示ann算法。
├── deeplab.py #该文件表示的是PaddleSeg所支持的算法模型,这里表示Deeplab算法。
├── unet.py #该文件表示的是PaddleSeg所支持的算法模型,这里表示unet算法。
└── ...
├── transforms #进行数据预处理的操作,包括各种数据增强策略
├── functional.py
└── transforms.py
└── utils
├── config_check.py
├── visualize.py
└── ...
├── train.py # 训练入口文件,该文件里描述了参数的解析,训练的启动方法,以及为训练准备的资源等。
├── predict.py # 预测文件
└── ...