本目录下的配置文件用于飞桨模型选型工具(PaddleSMRT)。
PaddleSMRT 是飞桨结合产业落地经验推出的产业模型选型工具,在项目落地过程中,用户根据自身的实际情况,输入自己的需求,即可以得到对应在算法模型、部署硬件以及教程文档的信息。 同时为了更加精准的推荐,增加了数据分析功能,用户上传自己的标注文件,系统可以自动分析数据特点,例如数据分布不均衡、小目标、密集型等,从而提供更加精准的模型以及优化策略,更好的符合场景的需求。
本文档主要介绍PaddleSMRT在分割方向上是如何进行模型选型推荐,以及推荐模型的使用方法。
PaddleSMRT结合产业真实场景,通过比较算法效果,向用户推荐最适合的模型。目前PaddleSMRT覆盖工业质检、城市安防两大场景,下面介绍PaddleSMRT进行算法对比所使用的数据集。
数据集为新能源电池电池组件质检数据集,包含15021张图片,覆盖45种缺陷类型,例如掉胶,裂纹,划痕等。
新能源电池数据展示图:
数据集特点为:
- 类别分布均衡
- 属于小目标数据
- 非密集型数据
数据集为铝件生产过程中的质检数据集,包含11293张图片,覆盖5种缺陷类型,例如划伤,压伤,起皮等。
铝件质检数据展示图:
数据集特点为:
- 类别分布不均衡
- 属于小目标数据
- 非密集型数据
通过飞桨官网的模型选型工具明确需要使用的模型后,大家需要进行数据准备、模型训练、模型导出、模型部署,下面我们以一个例子进行简要说明。
参考PaddleSeg安装文档安装PaddlePaddle、下载PaddleSeg代码、安装PaddleSeg依赖库。
此处,我们准备了一个缺陷分割的数据集,点击链接下载,或者执行如下命令下载。
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。
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、学习率等。
本教程简单演示单卡和多卡训练,详细的模型训练方法请参考文档。
单卡训练
在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
训练得到精度符合预期的模型后,可以导出预测模型,进行部署。详细的模型导出方法请参考文档。
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
目录。
导出模型后,大家可以参考如下文档进行部署。
端侧 | 库 | 教程 |
---|---|---|
服务端端Python部署 | Paddle预测库 | 文档 |
服务器端端C++部署 | PaddleInference预测库 | 文档 |
移动端部署 | PaddleLite | 文档 |
前端部署 | PaddleJS | 文档 |
为了更方便大家部署,我们也提供了完备的可视化部署Demo,欢迎尝试使用
为了更方便大家更好的进行产业落地,PaddleSMRT也提供了详细详细的应用范例,欢迎大家使用。