PaddleSeg 20分钟快速入门教程:从数据标注到模型部署全流程

PaddleSeg 20分钟快速入门教程:从数据标注到模型部署全流程

PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc. PaddleSeg 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleSeg

前言

PaddleSeg是飞桨(PaddlePaddle)生态下的图像分割开发套件,采用模块化设计思想,通过配置文件驱动整个流程,实现了从数据标注到模型部署的全流程支持。本文将带您快速了解如何使用PaddleSeg完成一个完整的图像分割任务。

1. 环境准备

在开始之前,需要确保您的环境满足以下要求:

  • Python 3.6+
  • PaddlePaddle 2.2+
  • 推荐使用CUDA 10.2+和cuDNN 7.6+

可以通过以下命令安装PaddleSeg:

pip install paddleseg

2. 数据准备

2.1 数据集介绍

本教程使用视盘分割数据集作为示例。这是一个医学图像分割数据集,包含267张训练图像、76张验证图像和38张测试图像。

数据集中的原始图像和分割标签如下图所示,我们的任务是分割出眼底图像中的视盘区域。

视盘分割示例

2.2 数据集结构

PaddleSeg支持的数据集需要按照以下结构组织:

dataset_root
├── images
│   ├── image1.jpg
│   ├── image2.jpg
│   └── ...
├── annotations
│   ├── image1.png
│   ├── image2.png
│   └── ...
├── train_list.txt
├── val_list.txt
└── test_list.txt

其中,train_list.txt等文件记录了图像和标签的对应关系,每行格式为:图像路径 标签路径

3. 模型训练

3.1 模型选择

我们选择PP-LiteSeg模型进行训练。PP-LiteSeg是PaddleSeg团队提出的实时语义分割模型,具有以下特点:

  1. 轻量级解码器(FLD):减少计算开销
  2. 统一注意力融合模块(UAFM):结合空间和通道注意力增强特征表示
  3. 简单金字塔池化模块(SPPM):以低计算成本聚合全局上下文

PP-LiteSeg架构

3.2 配置文件详解

PaddleSeg使用YAML格式的配置文件驱动整个训练流程。以pp_liteseg_optic_disc_512x512_1k.yml为例,配置文件主要包含以下部分:

# 训练配置
batch_size: 4  # 批大小
iters: 1000    # 迭代次数

# 训练数据集配置
train_dataset:
  type: Dataset
  dataset_root: data/optic_disc_seg
  train_path: data/optic_disc_seg/train_list.txt
  num_classes: 2  # 类别数(包含背景)
  transforms:      # 数据增强策略
    - type: ResizeStepScaling  # 随机缩放
    - type: RandomPaddingCrop # 随机裁剪
    - type: RandomHorizontalFlip # 水平翻转
    - type: RandomDistort     # 色彩扰动
    - type: Normalize        # 归一化

# 验证数据集配置
val_dataset:
  type: Dataset
  dataset_root: data/optic_disc_seg
  val_path: data/optic_disc_seg/val_list.txt
  num_classes: 2
  transforms:
    - type: Normalize

# 优化器配置
optimizer:
  type: sgd      # 随机梯度下降
  momentum: 0.9
  weight_decay: 4.0e-5

# 学习率策略
lr_scheduler:
  type: PolynomialDecay  # 多项式衰减
  learning_rate: 0.01
  power: 0.9
  end_lr: 0

# 损失函数配置
loss:
  types:
    - type: CrossEntropyLoss  # 交叉熵损失
  coef: [1, 1, 1]  # 主损失和辅助损失的权重

# 模型结构配置
model:
  type: PPLiteSeg
  backbone:
    type: STDC1
    pretrained: https://bj.bcebos.com/paddleseg/dygraph/PP_STDCNet1.tar.gz

3.3 启动训练

单卡训练命令如下:

python tools/train.py \
    --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
    --do_eval \          # 开启边训练边验证
    --use_vdl \          # 启用VisualDL日志
    --save_interval 500 \ # 保存间隔
    --save_dir output    # 输出目录

多卡训练(4卡)命令:

export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch tools/train.py \
    --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
    --do_eval \
    --use_vdl \
    --save_interval 500 \
    --save_dir output

3.4 训练参数说明

| 参数 | 说明 | 是否必选 | 默认值 | |------|------|---------|-------| | config | 配置文件路径 | 是 | - | | save_dir | 模型保存目录 | 否 | output | | do_eval | 是否边训练边验证 | 否 | False | | use_vdl | 是否使用VisualDL | 否 | False | | save_interval | 模型保存间隔(iter) | 否 | 1000 | | log_iters | 日志打印间隔 | 否 | 10 | | resume_model | 恢复训练路径 | 否 | None |

4. 训练可视化

PaddleSeg集成了VisualDL工具,可以方便地可视化训练过程中的各项指标:

  1. 启动VisualDL服务:
visualdl --logdir output/
  1. 在浏览器中访问提示的URL,可以看到以下指标变化:
  • 损失变化趋势
  • 学习率变化
  • 训练时间
  • 数据读取时间
  • mIoU变化趋势(开启do_eval时)
  • 像素准确率变化趋势(开启do_eval时)

VisualDL可视化界面

5. 模型评估

训练完成后,可以使用评估脚本评估模型性能:

python tools/val.py \
    --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
    --model_path output/iter_1000/model.pdparams

支持多尺度翻转评估:

python tools/val.py \
    --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
    --model_path output/iter_1000/model.pdparams \
    --aug_eval \          # 开启多尺度翻转评估
    --scales 0.75 1.0 1.25 \ # 尺度列表
    --flip_horizontal    # 水平翻转

6. 模型预测与可视化

使用训练好的模型进行预测并可视化结果:

python tools/predict.py \
    --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
    --model_path output/iter_1000/model.pdparams \
    --image_path data/optic_disc_seg/test_images/1.jpg \ # 预测图像路径
    --save_dir output/result  # 结果保存目录

预测结果会保存在指定目录中,包含原始图像、预测结果和叠加效果图。

7. 模型导出

为了部署模型,需要将训练好的模型导出为静态图模型:

python tools/export.py \
    --config configs/quick_start/pp_liteseg_optic_disc_512x512_1k.yml \
    --model_path output/iter_1000/model.pdparams \
    --save_dir output/inference_model

导出的模型包含:

  • model.pdmodel:模型结构文件
  • model.pdiparams:模型权重文件
  • deploy.yaml:部署配置文件

8. 模型部署

PaddleSeg支持多种部署方式,这里以Python部署为例:

import paddle
from paddleseg.core import predict

model = paddle.jit.load("output/inference_model/model")
transforms = paddle.vision.transforms.Compose([
    paddle.vision.transforms.Normalize()
])

# 单张图像预测
result = predict(
    model,
    model_path="output/inference_model",
    transforms=transforms,
    image_list=["data/test.jpg"],
    save_dir="output/results"
)

# 视频流预测
predict(
    model,
    model_path="output/inference_model",
    transforms=transforms,
    video_path="data/test.mp4",
    save_dir="output/results"
)

总结

通过本教程,您已经掌握了使用PaddleSeg完成图像分割任务的全流程,包括:

  1. 环境准备
  2. 数据准备与处理
  3. 模型训练与调优
  4. 训练过程可视化
  5. 模型评估
  6. 预测与可视化
  7. 模型导出与部署

PaddleSeg提供了丰富的预训练模型和灵活的配置方式,可以快速适配各种图像分割任务。希望本教程能帮助您快速上手PaddleSeg,在实际项目中应用图像分割技术。

PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc. PaddleSeg 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleSeg

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柏廷章Berta

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

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

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

打赏作者

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

抵扣说明:

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

余额充值