利用paddleseg训练自己的数据集

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中

 2.2.1 tools中工具说明

2.3 整理数据

 2.4 切分数据

3.准备配置文件

4.模型训练

 1.单卡训练

2.恢复训练

3.加载预训练模型 

6.训练可视化

7.模型预测

8.模型导出(2步导出)

9.二次开发 


 

 

 1.环境安装

参考官方安装文档

2. 配置数据集

2.1 打开项目后,界面如图 

910f72bff8434f65d7319cf9ef17a940.png

2.2 对于数据集的修改脚本都在tools中

36a7237d39d096dd81d90a030f601263.png

这里paddleseg既支持灰度图也支持伪彩色图

9d083c1039bd7190bb7302d03cae3421.png通常我们数据集二值化后为像素值为0 255这里伪彩色标注图像素为 0 1归一化,如果有2类就是0 1 如果有3类就是0 1 2  以此类推(这一步很重要)

 如果使用0 255 进行训练就会出现如下情况

5a6a8f98842d9aa490adcf5d06db138c.png

而且loss很快会变为0

 2.2.1 tools中工具说明

1) 灰度标注图转换为伪彩色标注图 (非必须)

182ee5c83d49259854cee4a5140ebbc9.png

python tools/gray2pseudo_color.py <dir_or_file> <output_dir>

 78bb5088719dd885413edf6017d61bf1.png

脚本使用方法,以下类似

在此文件目录下cmd,将路径替换掉,绝对路径即可中间空格隔开a288aae408914ccd7b94e55678a837b4.png

bd568e7c028f9c5dcb6416e6338c4e96.png

 如果仅希望将指定数据集中的部分灰度标注图转换为伪彩色标注图,则执行以下命令。

python tools/gray2pseudo_color.py <dir_or_file> <output_dir> --dataset_dir <dataset directory> --file_separator <file list separator>

 e08b41c352f5ca00cbeb1b00de95b4f5.png

2.3 整理数据

 数据格式如下,图片要求24深度jpg格式,标签要求8深度png格式,分类为几项则从0到几

21569b7acaf90e1594fed1fa81bbc90d.png

 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: 标注图像目录名

6039f04d5b270458259e4a10469bb6ec.png

 使用示例:

python tools/split_dataset_list.py <dataset_root> images annotations --split 0.6 0.2 0.2 --format jpg png

9b76aef3190b92f88779ebaf88b30513.png

 切分完成后将生成3个或者2个txt文件

aa2907ad860be66cb9b4c3d3a2494791.png

这里的lables.txt为分类种类数如图 ,需要自行设置 

 7f69d747935fecce735b25ba0f5fd99c.png

这里也可以使用这个切分方法,无需使用脚本。

至此,数据集准备完毕

3.准备配置文件

配置文件均位于configs中,建议自己建一个文件夹,需要哪个模型复制哪个

8e88650197a37302d29b939c24c4f83e.png

建议将所有需要的配置复制到一个中,避免重复

 d6e5f4528716e18803d5602e15c90ff7.png

避免这种情况,还要去_base_中再去找

57fc3bf9ce4866ea7328c0549fefc482.png

配置文件说明说的非常清楚

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下右击

494d54eba2c0a013d46fe1fc3794b197.png

52847cec90df04c3b62d4139783a6dd7.png

 

上述训练命令解释:

  • --config指定配置文件。
  • --save_interval指定每训练特定轮数后,就进行一次模型保存或者评估(如果开启模型评估)。
  • --do_eval开启模型评估。具体而言,在训练save_interval指定的轮数后,会进行模型评估。
  • --use_vdl开启写入VisualDL日志信息,用于VisualDL可视化训练过程。
  • --save_dir指定模型和visualdl日志文件的保存根路径。

c8b6bda7c6d0251c9a827c8a0a03e7a0.png

 

train.py文件说明

1ca9513956b96145793ad7f1d6aee65c.png

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配置为自己训练的模型即可

cc1d730a624c16dbd485fc937af7fd40.png

dd2fbc89c4dd2b08827e061ae22fd92d.png

 

6.训练可视化

官方文档

1.首先安装visualdl

pip install --upgrade --pre visualdl

2.输入命令 ,需要存在log文件

visualdl --logdir ./log --port 8080

# 或者写在自己的文件夹
visualdl --logdir ./output/fcnclass3 --port 8080

 bca726eff31dc997fd173cc7c39d03a2.png

 

 

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

4d0adb14cd5c2c6946dbda08934ca4c3.png

 

14262bc02ecd6e1ddd5c4b6aee5fb6bb.png

会生成4个文件如图

 70696cb14927f28b3c81b42565bec3b0.png

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环境中输入命令

18912a5b8ea601d50b63024b75271d9f.png

 

# 使用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

最后转出的模型为

4d6e5c5234fbe311dfd8f180199d695b.png

 目前支持的模型

14ca588c1afadc7a793d98b904c86372.png

利用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 # 预测文件
     └── ...

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值