Skip to content

Latest commit

 

History

History

smrt

本目录下的配置文件用于飞桨模型选型工具(PaddleSMRT)。

PaddleSMRT

一、项目介绍

PaddleSMRT 是飞桨结合产业落地经验推出的产业模型选型工具,在项目落地过程中,用户根据自身的实际情况,输入自己的需求,即可以得到对应在算法模型、部署硬件以及教程文档的信息。 同时为了更加精准的推荐,增加了数据分析功能,用户上传自己的标注文件,系统可以自动分析数据特点,例如数据分布不均衡、小目标、密集型等,从而提供更加精准的模型以及优化策略,更好的符合场景的需求。

本文档主要介绍PaddleSMRT在分割方向上是如何进行模型选型推荐,以及推荐模型的使用方法。

二、数据介绍

PaddleSMRT结合产业真实场景,通过比较算法效果,向用户推荐最适合的模型。目前PaddleSMRT覆盖工业质检、城市安防两大场景,下面介绍PaddleSMRT进行算法对比所使用的数据集。

1. 新能源电池质检数据集

数据集为新能源电池电池组件质检数据集,包含15021张图片,覆盖45种缺陷类型,例如掉胶,裂纹,划痕等。

新能源电池数据展示图:

数据集特点为:

  1. 类别分布均衡
  2. 属于小目标数据
  3. 非密集型数据

2. 铝件质检数据集

数据集为铝件生产过程中的质检数据集,包含11293张图片,覆盖5种缺陷类型,例如划伤,压伤,起皮等。

铝件质检数据展示图:

数据集特点为:

  1. 类别分布不均衡
  2. 属于小目标数据
  3. 非密集型数据

三、推荐模型使用全流程

通过飞桨官网的模型选型工具明确需要使用的模型后,大家需要进行数据准备、模型训练、模型导出、模型部署,下面我们以一个例子进行简要说明。

3.1 准备环境

参考PaddleSeg安装文档安装PaddlePaddle、下载PaddleSeg代码、安装PaddleSeg依赖库。

3.2 准备数据

详细的数据准备方法,请参考数据标注文档数据配置文档

此处,我们准备了一个缺陷分割的数据集,点击链接下载,或者执行如下命令下载。

wget https://paddle-smrt.bj.bcebos.com/data/seg/defect_data.zip

将下载的数据集解压,并存放到PaddleSeg/data/defect_data目录,如下。

PaddleSeg/data/defect_data
├── Annotations
├── JPEGImages
├── test.txt
├── train.txt
└── val.txt

该数据集的原始图片保存在JPEGImages文件,标注图片保存在Annotations。

train.txt、val.txt和test.txt分别标识用于训练、验证和测试的数据,其中内容如下,每一行的前面表示原始图像的相对路径、后面表示标注图像的相对路径。

JPEGImages/liewen_26.png Annotations/liewen_26.png
JPEGImages/diaojiao_394.png Annotations/diaojiao_394.png

标注图像包含背景和3类缺陷目标,总共4类,分别标注的数值使0,1,2,3。

3.3 准备配置文件

PaddleSeg推荐使用配置文件的方式来训练、导出模型,简单方便。

针对工业质检任务,我们为模型选型工具推荐的6个模型准备好了配置文件,存放在PaddleSeg/configs/smrt目录下。

PaddleSeg/configs/smrt
├── base_cfg.yml  
├── pp_liteseg_stdc1.yml  
├── pp_liteseg_stdc2.yml  
├── deeplabv3p_resnet50_os8.yml  
├── ocrnet_hrnetw18.yml
├── bisenetv2.yml
└── sfnet_resnet18_os8.yml

其中,base_cfg.yml是公共配置,包括数据集、优化器、学习率,其他文件包含base_cfg.yml,额外定义了模型、损失函数。

在其他应用中,大家可以根据实际情况修改上述配置文件中的字段,而且需要根据模型数据量调整配置文件中的超参,比如训练轮数iters、batch_size、学习率等。

3.4 执行训练

本教程简单演示单卡和多卡训练,详细的模型训练方法请参考文档

单卡训练

在PaddleSeg目录下,执行如下命令,使用单卡GPU进行模型训练。

export CUDA_VISIBLE_DEVICES=0 # Linux下设置1张可用的卡
# set CUDA_VISIBLE_DEVICES=0  # windows下设置1张可用的卡

cd PaddleSeg

python tools/train.py \
       --config configs/smrt/pp_liteseg_stdc2.yml \
       --do_eval \
       --use_vdl \
       --save_interval 1000 \
       --save_dir output/pp_liteseg_stdc2

说明:

  • 上面脚本选择pp_liteseg_stdc2模型进行训练,所以加载configs/smrt/pp_liteseg_stdc2.yml配置文件,如果需要使用其他模型,可以修改--config输入参数。
  • --do_eval表示训练过程中会进行测试,--save_interval设置每训练多少轮会进行一次测试。
  • 训练结束后,精度最高的模型保存在--save_dir中,比如output/pp_liteseg_stdc2/best_model/
  • 查看训练的log,可以知道模型训练的最高精度。
  • 为了实现最高的精度,大家可以适当调参,重点关注学习率lr、BatchSize、训练轮数iters、损失函数Loss等。

多卡训练

在PaddleSeg目录下,执行如下命令,使用多卡GPU进行模型训练。

export CUDA_VISIBLE_DEVICES=0,1,2,3 # 设置4张可用的卡

python -m paddle.distributed.launch tools/train.py \
       --config configs/smrt/pp_liteseg_stdc2.yml \
       --do_eval \
       --use_vdl \
       --save_interval 1000 \
       --save_dir output/pp_liteseg_stdc2

3.5 模型导出

训练得到精度符合预期的模型后,可以导出预测模型,进行部署。详细的模型导出方法请参考文档

python tools/export.py \
       --config configs/smrt/pp_liteseg_stdc2.yml \
       --model_path output/pp_liteseg_stdc2/best_model/model.pdparams \
       --save_dir output/pp_liteseg_stdc2/infer_models

上面脚本加载pp_liteseg_stdc2模型精度最高的权重,导出预测模型保存在output/pp_liteseg_stdc2/infer_models目录。

3.5 部署

导出模型后,大家可以参考如下文档进行部署。

端侧 教程
服务端端Python部署 Paddle预测库 文档
服务器端端C++部署 PaddleInference预测库 文档
移动端部署 PaddleLite 文档
前端部署 PaddleJS 文档

四、部署demo

为了更方便大家部署,我们也提供了完备的可视化部署Demo,欢迎尝试使用

五、场景范例

为了更方便大家更好的进行产业落地,PaddleSMRT也提供了详细详细的应用范例,欢迎大家使用。