随着人工智能技术越来越火,开源的算法框架也越来越多,大家平时使用较多的框架包括TensorFlow、Pytorch、Caffe2、以及国产框架paddle等。
其中,国产框架Paddle主要由百度飞桨团队开发维护,并且在短时间内迅速引发全球开发热度,成为 Github Pull Request 数量增速极高的开源深度学习平台之一。其在模型训练、模型优化、模型推理方面都有大量的工具, PaddleX、Paddle-Detection等封装好的检测框架也加速其落地应用。另外它也具有很好的框架兼容性,支持将其他TensorFlow、Pytorch模型转化为Paddle模型。PaddleX目前提供了图像分类、 目标检测、 实例分割和语义分割4种视觉方面解决方案,用户可以根据自己的任务类型按需选取。
本文主要基于目标检测进行实操讲解,介绍人工智能在工业缺陷检测领域的应用,后续会利用Paddle-Lite框架在FPGA上部署模型进行推理。
01
前置依赖
1)在使用PaddleX之前需要安装相关依赖软件,操作系统我们使用Linux。其他依赖软件有:
paddlepaddle >= 1.8.4
python >= 3.6
cython
Pycocotools
2)安装:
pip install paddlepaddle==1.8.5 -i https://mirror.baidu.com/pypi/simple
pip install paddlex -i https://mirror.baidu.com/pypi/simple
pip install cython
pip install pycocotools
paddlepaddle安装方式可以参考paddle官网(https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/windows-pip.html%EF%BC%89)
02
模型训练
1)下载PaddleX源码:
git clone https://github.com/PaddlePaddle/PaddleX
cd PaddleX/examples/industrial_quality_inspection
2)下载数据集:
因数据集较大,可运行以下代码提前将数据集下载并解压。训练代码中也会自动下载数据集,所以这一步不是必须的。数据集分别检测擦花、杂色、漏底、不导电、桔皮、喷流、漆泡、起坑、脏点和角位漏底10种缺陷。
Wget https://bj.bcebos.com/paddlex/examples/industrial_quality_inspection/datasets/aluminum_inspection.tar.gz
tar xvf aluminum_inspection.tar.gz
3)开始训练:
运行以下代码进行模型训练,代码会自动下载数据集,如若事先下载了数据集,需将下载和解压铝材缺陷检测数据集的相关行注释掉。
python train_yolov3.py
可根据实际情况调整 batch_size 和 learning_rate 。可以在训练代码中添加迭代次数保存参数,即多少个迭代保存一次训练模型。
# vim train_yolov3.py
# 注释数据集下载代码
# aluminum_dataset = 'https://bj.bcebos.com/paddlex/examples/industrial_quality_inspection/datasets/aluminum_inspection.tar.gz'
# pdx.utils.download_and_decompress(aluminum_dataset, path='./')
# 添加save_interval_epochs配置
model.train(save_interval_epochs=1)
如果不想再次训练模型,可以直接下载已经训练好的模型完成后面的模型测试和部署推理:
wget https://bj.bcebos.com/paddlex/examples/industrial_quality_inspection/models/yolov3_mobilenetv3_large_pruned.tar.gz
tar xvf yolov3_mobilenetv3_large_pruned.tar.gz
训练完成后,查看output目录下保存模型
03
模型预测
1)单独下载测试集图片:
wget https://bj.bcebos.com/paddlex/examples/industrial_quality_inspection/datasets/aluminum_inspection_test.tar.gz
tar xvf aluminum_inspection_test.tar.gz
2)根据训练后保存模型路径,修改预测代码:
# vim predict.py
# 预测图片地址
img_file = 'aluminum_inspection_test/11.jpg'
# 修改模型路径
model_dir = 'output/yolov3_mobilenetv3/best_model/'
3)进行预python predict.py;
4)预测结果显示:
上面绿色框选出来的部分就是检测到的缺陷,可以看到该缺陷类型为lou_di。
04
模型导出
利用PaddleX训练的模型是动态图模型,需要将其转化为静态图模型才能被FPGA使用。PaddleX自带导出功能,这里需要将训练过程中保存的模型导出为inference格式模型,导出的inference格式模型包括 __model__ 、 __params__ 和 model.yml 三个文件,分别表示模型的网络结构、模型权重和模型的配置文件(包括数据预处理参数等)。
1)执行模型导出:
paddlex --export_inference --model_dir=./output/yolov3_mobilenetv3/best_model/ --save_dir=./inference_model --fixed_input_shape=[608,608]
2)导出结果:
最终生成__model__和__params__两个文件,该文件是Paddle框架通用的模型格式,后续可以使用Paddle-Lite框架在FPGA上进行推理。
05
总结
本文主要介绍了基于PaddleX框架在工业缺陷检测领域的应用案例,从实际应用角度介绍了模型训练、预测、导出的操作步骤。接下来的文章会在此模型基础上,继续介绍如何在海云C5MB FPGA开发板上部署运行。
作者:杨振宇、田辉。
杨振宇,海云捷迅资深系统架构师,成都信息工程大学计算机应用技术硕士研究生毕业,10余年软件开发和架构经验,熟悉Linux,OpenStack,Kubernetes,Docker等开源技术并具有开源社区贡献经历,在云计算、人工智能、物联网等技术领域有较深的研究和丰富的一线开发经验。
田辉,海云捷迅研发工程师。毕业于湖北大学计信学院,计算机科学与技术专业。4年软件开发经验,熟悉Linux、OpenStack、Kubernetes、Docker等开源技术,在云计算、人工智能等技术领域有一定的开发经验。