语义分割——PaddleSeg网络训练并测试自己数据集(详细图文教程)

在这里插入图片描述

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《暗光增强》
📝《模型优化》
📝《模型实战部署》


在这里插入图片描述

PaddleSeg是一个功能强大且易用的语义分割库,适合从研究到工业应用的各种需求。它提供了丰富的预训练模型、高效的训练和推理支持、灵活的配置系统和详尽的文档,是开发语义分割应用的理想选择。

一、源码包准备

本教程配套的源码包获取方法文章末扫码到公众号「视觉研坊」中回复关键字:语义分割PaddleSeg。获取下载链接。

官网链接:PaddleSeg官网

下载解压源码包后的样子见下:

在这里插入图片描述

二、环境准备

2.1 PaddlePaddle环境安装

安装GPU版本PaddlePaddle在终端执行下面命令:

pip install paddlepaddle-gpu==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 验证PaddlePaddle是否安装成功

在终端使用如下命令验证PaddlePaddle是否安装成功,并且查看版本。

# 在Python解释器中顺利执行如下命令
import paddle
paddle.utils.run_check()

# 如果命令行出现以下提示,说明PaddlePaddle安装成功
# PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.

# 查看PaddlePaddle版本
print(paddle.__version__)

2.3 PaddleSeg包安装

2.3.1 PaddleSeg源码包安装

2.3.1.1 下载PaddleSeg源码包

建议安装PaddleSeg源码包,有利于开发和调试。

从Github下载PaddleSeg代码,使用下面命令:

git clone https://github.com/PaddlePaddle/PaddleSeg

如果连不上Github,可以从Gitee下载PaddleSeg代码,但是Gitee上代码可能不是最新,命令见下:

git clone https://gitee.com/paddlepaddle/PaddleSeg.git
2.3.1.2 编译安装PaddleSeg源码包
cd PaddleSeg
pip install -r requirements.txt
pip install -v -e .

2.3.2 PaddleSeg发布包安装

安装PaddleSeg发布包在终端使用下面命令:

pip install paddleseg

2.3.3 检测PaddleSeg是否安装成功

检测PaddleSeg是否安装成功,在终端执行下面命令:

python tools/predict.py --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml --model_path https://paddleseg.bj.bcebos.com/dygraph/optic_disc/pp_liteseg_optic_disc_512x512_1k/model.pdparams --image_path docs/images/optic_test_image.jpg --save_dir output/result

执行后如果输出类似下面,则说明PaddleSeg安装成功:

在这里插入图片描述

2.4 参考环境

下面是我自己训练并测试的环境,仅供参考,其它版本也行:

在这里插入图片描述

三、数据集准备

3.1 官方数据集

教程配套源码包中数据集是一组眼底医疗分割数据集,包含了267张训练图片、76张验证图片、38张测试图片。此数据集下载链接为:眼底医疗分割数据集

下载解压后保存到PaddleSeg/data路径下:

在这里插入图片描述

3.2 制作数据集

参考官网提供训练样本格式,制作自己的数据集。

制作数据集时需要提前打好标签,打标签推荐工具LabelMe,纯手动一个点一个点的标记,效果较低,使用用法见:Labelme使用教程

还有一个半自动标注工具ISAT,类似PS中的魔棒工具,点击目标物体自动框选,后台运行的是深度学习模型(多模型可选择),框选精度和打标签效率贼高,非常推荐学者使用此工具打标签,使用方法见:半自动打标签工具ISAT安装及使用教程

使用ISAT工具打好标签后,将原图片复制一份到PaddleSeg\data\Visible_Images路径中,将VOC格式标签图复制一份到PaddleSeg\data\Visible_Images\Annotations中,classification.txt文件中存放着打标签是的类名及对应的颜色信息,具体见下:

其中Annotations文件夹中的图片即为标签图,且为8bit图。

在这里插入图片描述
在这里插入图片描述

上面准备好后还需要三个.txt文件,用于存放训练集、验证集、测试集中数据样本图片路径,对应的标签图路径,这三个.txt文件生成方法见另外一篇博文:自定义比例划分训练集train.txt、验证集val.txt、测试集text.txt

生成三个.txt文件的样子见下:

在这里插入图片描述

此时训练样本已经制作好,进行后续训练和测试。

3.3 为什么单通道8bit图像能显示多种色块

此问题见另外一篇博文解答:单通道图像显示多色块

四、训练

4.1 训练配置文件参数修改

下面是训练的配置文件,其中有很多参数,已经详细表明注释,学者根据自己的需求修改参数,配置文件路径:configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml

在这里插入图片描述

在这里插入图片描述

4.2 炼丹可修改参数

上面4.1 配置文件中,PaddleSeg网络框架支持的一些参数见下,学者炼丹时可以在此框架基础上调整不同策略训练测试:

4.2.1 数据集格式类型

该网络框架支持的数据集格式类型见下,路径在paddleseg/datasets

在这里插入图片描述

4.2.2 数据增强预处理方法

该网络框架支持的数据增强预处理方法在paddleseg/transforms/transforms.py脚本中,见下:

在这里插入图片描述

4.2.3 优化器和学习率衰减模块

优化器和学习率衰减模块的调整,参考官网:优化器和学习率衰减

4.2.4 损失函数

该网络框架支持的损失函数见下,位于路径paddleseg/models/losses

在这里插入图片描述

4.2.5 模型

该网络框架支持模型见下,位于路径:paddleseg/models

在这里插入图片描述

4.2.5 Backbones

该网络框架支持的骨干网络见下:paddleseg/models/backbones

在这里插入图片描述

4.3 启动训练

4.3.1 终端命令方式启动

在终端输入下面命令,使用单卡训练或多卡训练的,注意下面注释了的命令,对应打开:

# export CUDA_VISIBLE_DEVICES=0 # Linux上设置1张可用的卡训练
# export CUDA_VISIBLE_DEVICES=0,1,2,3 # 设置4张可用的卡训练
# set CUDA_VISIBLE_DEVICES=0  # Windows上设置1张可用的卡

python tools/train.py --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml --save_interval 500 --do_eval --use_vdl --save_dir output/Train_Result/Train_optic_disc_seg

4.3.2 Configuration配置训练命令

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.3.3 训练命令参数解析

上面训练命令参数解析见下:

–config指定配置文件。

–save_interval指定每训练特定轮数后,就进行一次模型保存或者评估(如果开启模型评估)。

–do_eval开启模型评估。具体而言,在训练save_interval指定的轮数后,会进行模型评估。

–use_vdl开启写入VisualDL日志信息,用于VisualDL可视化训练过程。

–save_dir指定模型和visualdl日志文件的保存根路径。

4.4 训练过程和结果

训练过程见下:

在这里插入图片描述

训练好的模型保存到output/Train_Result/Train_optic_disc_seg路径中,见下:

在这里插入图片描述

在这里插入图片描述

4.5 中断后接着训练

训练过程由于某种外界因素导致训练中断,中断后还想接着之前的训练,通过给tools/train.py脚本设置resume_model输入参数,加载中断前最近一次保存的模型信息,恢复训练。

在PP-LiteSeg示例中,总共需要训练1000轮。假如训练到750轮中断了,在output/Train_Result/Train_optic_disc_seg目录下,可以看到在iter_500文件夹中保存了第500轮的训练信息。执行如下命令,加载第500轮的训练信息恢复训练。

终端中输入下面命令接着训练:

python tools/train.py --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml --resume_model output/Train_Result/Train_optic_disc_seg/iter_500 --do_eval --use_vdl --save_interval 50 --save_dir output/Train_Result/Train_optic_disc_seg

或者配置Configuration训练命令:

在这里插入图片描述

4.6 可视化训练过程

为了直观显示模型的训练过程,对训练过程进行分析从而快速的得到更好的模型,飞桨提供了可视化分析工具:VisualDL。

当tools/train.py脚本设置use_vdl输入参数后,PaddleSeg会将训练过程中的日志信息写入VisualDL文件,写入的日志信息包括:
• loss
• 学习率lr
• 训练时间
• 数据读取时间
• 验证集上mIoU(当打开了do_eval开关后生效)
• 验证集上mean Accuracy(当打开了do_eval开关后生效)

启动VisualDL,在终端输入下面命令:

visualdl --logdir output/Train_Result/Train_optic_disc_seg

如果8040端口被占用,增加参数–port修改端口,命令见下:

visualdl --logdir output/Train_Result/Train_optic_disc_seg --port 8041

将输出的网址复制到浏览器中打开,见下:

在这里插入图片描述

在这里插入图片描述

下面就是日志文件中包含的数据信息,直观查看训练过程:

在这里插入图片描述

五、模型评估

5.1 评估指标

在图像分割领域中,评估模型质量主要是通过三个指标进行判断,准确率(acc)、平均交并比(Mean Intersection over Union,简称mIoU)、Kappa系数。

5.1.1 准确率

准确率:指类别预测正确的像素占总像素的比例,准确率越高模型质量越好。

5.1.2 平均交并比

平均交并比:对每个类别数据集单独进行推理计算,计算出的预测区域和实际区域交集除以预测区域和实际区域的并集,然后将所有类别得到的结果取平均。在本例中,正常情况下模型在验证集上的mIoU指标值会达到0.80以上,显示信息示例如下所示,第3行的mIoU=0.9232即为mIoU。

5.1.3 Kappa系数

Kappa系数:一个用于一致性检验的指标,可以用于衡量分类的效果。kappa系数的计算是基于混淆矩阵的,取值为-1到1之间,通常大于0。其公式如下所示,P0P_0P0为分类器的准确率,PeP_eP**e为随机分类器的准确率。Kappa系数越高模型质量越好。

在这里插入图片描述

5.2 评估

训练完成后,使用评估脚本tools/val.py来评估模型的精度,即对配置文件中的验证数据集进行测试。

执行如下命令进行模型评估。其中,通过–model_path输入参数来指定评估的模型权重。

终端输入下面命令:

python tools/val.py --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml --model_path output/Train_Result/Train_optic_disc_seg/best_model/model.pdparams

或者验证Configuration参数配置修改:

在这里插入图片描述

5.3 评估输出

评估输出见下:

在这里插入图片描述

六、模型测试

模型预测的脚本为tools/predict.py。

6.1 配置参数需改

需要修改的参数见下:

在这里插入图片描述

6.2 启动测试

在终端使用下面命令测试:

python tools/predict.py --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml --model_path output/Train_Result/Train_optic_disc_seg/best_model/model.pdparams --image_path Test_Images/Test_optic_disc_seg --save_dir output/result/Test_optic_disc_seg_Result

或修改测试的Configuration参数配置:

在这里插入图片描述

6.3 输出和测试结果

输出见下:

在这里插入图片描述

保存结果见下:

在这里插入图片描述

七、总结

以上就是语义分割PaddleSeg网络训练并测试自己数据集的详细教程,在此框架基础上可调整多种策略训练,学者自行尝试。

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉研坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值