语义分割 您所在的位置:网站首页 语义图像分割 语义分割

语义分割

2024-07-14 15:08| 来源: 网络整理| 查看: 265

在这里插入图片描述

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

在这里插入图片描述

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

目录 一、源码包准备二、环境准备2.1 PaddlePaddle环境安装2.2 验证PaddlePaddle是否安装成功2.3 PaddleSeg包安装2.3.1 PaddleSeg源码包安装2.3.1.1 下载PaddleSeg源码包2.3.1.2 编译安装PaddleSeg源码包 2.3.2 PaddleSeg发布包安装2.3.3 检测PaddleSeg是否安装成功 2.4 参考环境 三、数据集准备四、训练4.1 训练配置文件参数修改4.2 炼丹可修改参数4.2.1 数据集格式类型4.2.2 数据增强预处理方法4.2.3 优化器和学习率衰减模块4.2.4 损失函数4.2.5 模型4.2.5 Backbones 4.3 启动训练4.3.1 终端命令方式启动4.3.2 Configuration配置训练命令4.3.3 训练命令参数解析 4.4 训练过程和结果4.5 中断后接着训练4.6 可视化训练过程 五、模型评估5.1 评估指标5.1.1 准确率5.1.2 平均交并比5.1.3 Kappa系数 5.2 评估5.3 评估输出 六、模型测试6.1 配置参数需改6.2 启动测试6.3 输出和测试结果 七、总结

一、源码包准备

本教程配套的源码包获取方法文章末扫码到公众号「视觉研坊」中回复关键字:语义分割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 参考环境

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

在这里插入图片描述

三、数据集准备

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

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

在这里插入图片描述

学者训练自己数据集时,按照上面的格式制作。关于语义分割高效打标签方法,后面我会出一篇教程。

四、训练 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网络训练并测试自己数据集的详细教程,在此框架基础上可调整多种策略训练,学者自行尝试。

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有