💪 专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《暗光增强》
📝《模型优化》
📝《模型实战部署》
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网络训练并测试自己数据集的详细教程,在此框架基础上可调整多种策略训练,学者自行尝试。
感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖
关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!