数据集中包含6666张已经标注好的数据,原始数据标注形式为csv格式。该项目采用语义分割的标注方式,在本文档中提供了SEG数据集格式。点击此处下载数据集 更多数据格式信息请参考数据标注说明文档
- 数据切分 将训练集、验证集和测试集按照7:2:1的比例划分。 PaddleX中提供了简单易用的API,方便用户直接使用进行数据划分。
paddlex --split_dataset --format SEG --dataset_dir dataset --val_value 0.2 --test_val 0.1
数据文件夹切分前后的状态如下:
dataset/ dataset/
├── Annotations/ --> ├── Annotations/
├── JPEGImages/ ├── JPEGImages/
├── labels.txt
├── test_list.txt
├── train_list.txt
├── val_list.txt
PaddleX提供了丰富的视觉模型,在语义分割中提供了DeepLabV3、UNET、HRNET和FastSCNN系列模型。在本项目中采用UNET为分割模型进行钢板缺陷检测。
在项目中,我们采用UNET作为钢板缺陷分割的模型。具体代码请参考train.py。
运行如下代码开始训练模型:
python train.py
若输入如下代码,则可在log文件中查看训练日志,log文件保存在code
目标下
python train.py > log
- 精度提升 为了进一步提升模型的精度,在项目中采用了一系列模型优化的方式,具体请参考模型优化文档
- 速度优化
运行如下代码:
python code/infer.py
则可生成可视化的分割结果。
预测结果如下:
使用calc_fps.py脚本可计算预测速度,使用UNET网络推理速度如下。
arch | resolution | FPS |
---|---|---|
UNET | 1600x256 | 26.38 |
模型训练后保存在output文件夹,如果要使用PaddleInference进行部署需要导出成静态图的模型,运行如下命令,会自动在output文件夹下创建一个inference_model
的文件夹,用来存放导出后的模型。
paddlex --export_inference --model_dir=output/unet/best_model --save_dir=output/inference_model
模型部署采用了PaddleX提供的C++ inference部署方案,在改方案中提供了C#部署Demo,用户可根据实际情况自行参考。