PaddleSeg学习3——使用PP-LiteSeg模型对道路进行分割

1 准备环境

参考上一篇:Windows PaddleSeg c++部署

2 样本

车道线分割实战的智能车数据集

#标签
'背景':0, 0.05
'单实线-黄': 1, 
'单实线-白': 2, 
'双实线-黄(包括一黄一白)': 3,
'双实线-白': 4, 
'单虚线-黄': 5, 
'单虚线-白': 6, 
'双虚线->    黄(包扩一黄一白)': 7, 
'双虚线-白': 8, 
'一实一虚-黄(包括一黄一白)': 9,
'一实一虚-白': 10, 
'多条车道线(线>2,不区分虚实与颜色)': 11, 
'实线减速车道线': 12, 
'虚线减速车道线': 13,
'锯齿线(可变车道线)': 14

智能车数据集

3 准备config文件

参考下面两个文件
(1). 遥感道路分割的配置文件PaddleSeg-road/configs/road_seg/pp_liteseg_stdc1_deepglobe_1024x1024_80k.yml
(2). 车道线分割实战的配置文件
PaddleSeg/configs/ocrnet/ocrnet_hrnetw18_cityscapes_1024x512_160k_lovasz_softmax.yml

编写 pp_liteseg_stdc1_lane_1024x512.yml

batch_size: 8 
iters: 35000

optimizer:
  type: sgd
  momentum: 0.9
  weight_decay: 5.0e-4
  
lr_scheduler:
  type: PolynomialDecay
  learning_rate: 0.0025
  end_lr: 0
  power: 0.9
  warmup_iters: 1000
  warmup_start_lr: 1.0e-5
  
loss:
  types:
    - type: OhemCrossEntropyLoss
      min_kept: 260000
    - type: OhemCrossEntropyLoss
      min_kept: 260000
    - type: OhemCrossEntropyLoss
      min_kept: 260000
  coef: [1, 1, 1]
  
train_dataset:
  type: Dataset
  dataset_root: dataset/zhinengche
  num_classes: 15
  mode: train
  train_path: dataset/zhinengche/train_list.txt
  transforms:
    - type: ResizeStepScaling
      min_scale_factor: 0.5
      max_scale_factor: 2.0
      scale_step_size: 0.25
    - type: RandomRotation
      max_rotation: 90
    - type: RandomPaddingCrop
      crop_size: [768, 768]
    - type: RandomHorizontalFlip
    - type: RandomVerticalFlip
    - type: RandomDistort
      brightness_range: 0.3
      brightness_prob: 0.5
      contrast_range: 0.3
      contrast_prob: 0.5
      saturation_range: 0.3
      saturation_prob: 0.5
      hue_range: 15
      hue_prob: 0.5
    - type: Normalize

val_dataset:
  type: Dataset
  dataset_root: dataset/zhinengche/
  num_classes: 15
  mode: val
  val_path: dataset/zhinengche/val_list.txt
  transforms:
    - type: Normalize

model:
  type: PPLiteSeg
  backbone:
    type: STDC1
    pretrained: https://bj.bcebos.com/paddleseg/dygraph/PP_STDCNet1.tar.gz
  arm_out_chs: [32, 64, 128]
  seg_head_inter_chs: [32, 64, 64]

4 模型训练

# train pp_liteseg
%cd ~/work/PaddleSeg-road/
!python train.py \
       --config configs/amy/pp_liteseg_stdc1_lane_1024x512.yml\
       #--do_eval \
       #--num_workers 3 \
       --save_interval 1000 \
       --save_dir output/pp_liteseg_stdc1_lane

5 模型预测

5.1 python预测

%cd ~/work/PaddleSeg-road
!python  predict.py \
    --config configs/amy/pp_liteseg_stdc1_lane_1024x512.yml \
    --model_path pp_liteseg_stdc1_lane/model.pdparams \
    --image_path Data/seg/test/5.jpg \
    --save_dir output/pp_liteseg_stdc1_lane

5.2 C++预测

(1)导出模型

%cd ~/work/PaddleSeg-road
!python  export.py \
    --config configs\amy\pp_liteseg_stdc1_lane_1024x512.yml \
    --model_path pp_liteseg_stdc1_lane/model.pdparams \
    --save_dir ./output/pp_liteseg_stdc1_lane

(2) c++预测

配置模型路径
在这里插入图片描述
修改输出的数据类型为 int64_t
在这里插入图片描述

5.3 预测结果展示

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PaddleSeg 中计算模型推理速度时,需要使用推理模型。因为训练模型通常包含了大量的 Dropout、BN 等操作以及梯度计算等过程,会导致模型计算速度变慢。而推理模型则去掉了这些训练过程中的操作,只保留了前向计算部分,因此推理模型的计算速度更快,更适用于模型推理。 在 PaddleSeg 中,可以通过在训练过程中设置 `save_dir` 参数,保存训练过程中的模型参数,然后使用 `paddle.jit.to_static()` 函数将动态图模型转换为静态图模型,并生成推理模型。具体操作步骤如下: 1. 在训练过程中设置 `save_dir` 参数,保存模型参数。 2. 使用 `paddle.jit.to_static()` 函数将动态图模型转换为静态图模型,并生成推理模型。 3. 使用生成的推理模型进行模型推理,并计算模型的推理速度。 示例代码如下: ```python import paddle import paddleseg # 训练模型 model = paddleseg.models.UNet("resnet50") model.train(...) paddle.save(model.state_dict(), "unet_resnet50") # 转换为推理模型 model.eval() input_spec = paddle.static.InputSpec(shape=[None, 3, 256, 256], dtype='float32', name='image') model = paddle.jit.to_static(model, input_spec=input_spec) paddle.jit.save(model, "unet_resnet50_inference") # 使用推理模型进行模型推理,并计算模型的推理速度 config = paddle.inference.Config("unet_resnet50_inference") predictor = paddle.inference.create_predictor(config) ... ``` 需要注意的是,生成的推理模型可以使用 `paddle.jit.save()` 函数保存到本地,然后在模型推理时加载使用。同时,生成的推理模型也可以使用 Paddle Serving 进行部署,提供在线推理服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

waf13916

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

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

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

打赏作者

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

抵扣说明:

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

余额充值