
【AI达人特训营第三期】基于PP-YOLOE实现工业场景下的小目标检测
基于PP-YOLOE实现工业场景下的小目标检测,完善了从训练到部署的全流程实践,达到了不错的准确率0.932。
★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
1.基于PaddledDetection的喷粉缺陷检测
1.1项目说明
工业测量以工业产品或其零部件的几何量为测量对象,采用多种测量理论、方法和设备进行精密三维空间测量,主要为工业产品的制造、安装、质量检测及仿真建模等服务。三维激光扫描是近十几年来迅速发展的一种新的测量技术,是继 GPS 之后测绘领域的又一次技术革命,被广泛应用于各领域。
[外链图片转存中…(img-w0rwIUjJ-1681485347245)][外链图片转存中…(img-kraSbzzk-1681485347246)][外链图片转存中…(img-9TiuMidf-1681485347246)]
鉴于有些工业构件表面对激光反射较强,抑或颜色较暗,使得直接扫描比较困难,此时需要对构件着色,增强构件表面的漫反射,便于扫描仪更好地扫描出目标的三维特征。着色剂的喷施需要均匀,不可太薄或太厚,太薄会影响最终点云数据的完整程度,太厚不仅会覆盖掉一些细 节特征,还会增大构件的外形。因此我们需要将有喷涂缺陷的构建调选出。鉴于传统的检测方法是依靠人类 的视觉功能对待处理钣金件逐一检测。
[外链图片转存中…(img-rn7Nz0Z2-1681485347247)]
人工检测的缺陷有很多:
人工检大的效率不高,从而影响工件的生产效率。
因为不同的人对钣金件的缺陷标准不同,所以人工检测准确度不高
目前人力成本逐渐生高,极大的增加生产成本。在商业中由于高成本导致这种方法可用性底。
因此,基于光流的视频实时检测评估将是监测缺陷的理想方法。最初,许多监控视频都是人工观察的,效率低下,依赖于工作人员的经验判断,没有标准。然而,近年来,由于大数据时代的到来和计算机图形卡的快速发展,计算机的计算能力不断增强,加速了人工智能的发展。与人工智能相关的研究正在增加,计算机视觉在工业检测中的应用越来越广泛。因此本文提出了基于paddledetection的喷粉缺陷的实时检测。
1.2模型简介
PP-YOLOE+是PP-YOLOE的升级版本,从大规模的obj365目标检测预训练模型入手,在大幅提升收敛速度的同时,提升了模型在COCO数据集上的速度。同时,PP-YOLOE+大幅提升了包括数据预处理在内的端到端的预测速度。关于PP-YOLOE+的更多细节可以参考我们的官方文档。
1.3 模型原理
PP-YOLOE+和PP-YOLOE的整体结构基本一致,其相对于PP-YOLOE的改进点如下:
- 使用大规模数据集obj365预训练模型
- 在backbone中block分支中增加alpha参数
- 优化端到端推理速度,提升训练收敛速度
1.4模型效果
PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。如下图所示,PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比。

2.环境配置
2.1PaddleDetection安装
# !git clone https://github.com/PaddlePaddle/PaddleDetection.git -b develop --depth 1
# 可使用国内gitee镜像
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git
# 更新清华源
!pip install --upgrade pip
# 安装其他依赖
%cd /home/aistudio/PaddleDetection/
!pip uninstall -r requirements.txt
# 编译安装paddledet
!python setup.py install
# 安装模型压缩的工具库,提供剪裁、量化、蒸馏、和模型结构搜索等模型压缩策略
!pip install paddleslim
3.数据集介绍
钣金件是工业大量使用的工业构建,种类丰富。在实际生产中具有重要意义。我们针对喷粉缺陷检测特殊应用场景,制作一种新型图像采集系统EasyGit(如图1所示)其具有适应性极强 ,和灵活的
摄像机,来采集本研究中使用的数据。数据收集自天津中德应用技术大学3D打印及逆向实验室,由天津中德应用技术大学王占辉教授创建。在数据集准备过程中,我们调节EasyGit从不同的角度和方
向采集500张图片 。手工筛选并丢弃一些高度重复的数剧集。
3.1数据划分
-
首先将喷粉缺陷数据集解压到~/work/目录中:
-
安装paddlex
-
按7:2:1划分测试集.验证集.
!unzip /home/aistudio/data/data199132/coco.zip -d ~/work/
安装paddlex的库
!pip install paddlex -q
!paddlex --split_dataset --format coco --dataset_dir PaddleDetection/dataset/Q --val_value 0.2 --test_value 0.2
3.2数据集分析
在调整配置之前,请首先对数据有一个大概的了解。由于是个小数据,这里只简单分析了几项跟配置息息相关的内容。
import json
from collections import defaultdict
import matplotlib.pyplot as plt
%matplotlib inline
with open("/home/aistudio/work/Q/train.json") as f:
data = json.load(f)
imgs = {}
for img in data['images']:
imgs[img['id']] = {
'h': img['height'],
'w': img['width'],
'area': img['height'] * img['width'],
}
hw_ratios = []
area_ratios = []
label_count = defaultdict(int)
for anno in data['annotations']:
hw_ratios.append(anno['bbox'][3]/anno['bbox'][2])
area_ratios.append(anno['area']/imgs[anno['image_id']]['area'])
label_count[anno['category_id']] += 1
label_count, len(data['annotations']) / len(data['images'])
(defaultdict(int, {0: 22415}), 2.4770692894242456)
- 1.从标签来看,总共1个类别。
- 2.各类别之间的框数量相对较平均,不需要调整默认的损失函数。(如果类别之间相差较大,建议调整损失函数,如BalancedL1Loss)
- 3.平均每张图的框数量在3个左右,属于比较稀疏的检测,使用默认的keep_top_k即可。
plt.hist(hw_ratios, bins=100, range=[0, 2])
plt.show()
[外链图片转存中…(img-wkDFy3bj-1681485347247)]
这是真实框的宽高比,可以看到大部分集中在0.50-1.25左右,但也有部分在0.00-0.50之间,少部分在1.25-2.0之间。虽说anchor会进行回归得到更加准确的框,但是一开始给定一个相对靠近的anchor宽高比会让回归更加轻松。这里使用默认的 [0.5, 1, 2]即可。
plt.hist(area_ratios, bins=100, range=[0, 0.005])
plt.show()
[外链图片转存中…(img-bGKmJ5Kc-1681485347248)]
这是真实框在原图的大小比例,可以看到大部分框只占到了原图很小一部份,甚至更小,因此基本都是很小的目标,这个也可以直接看一下原图和真实框就能发现。所以在初始的anchor_size设计时需要考虑到这一点,我这里anchor_size是从8开始的,也可以考虑从4开始,应该都可以的。
3.3数据配置
本实验用到的数据配置文件在work/PaddleDetection-release- 2.1/configs/datasets/coco_detection.yml
中,具体修改后的内容如下:
metric: COCO
num_classes: 1# 不包括背景
TrainDataset:
!COCODataSet
image_dir: images
anno_path: /train.json
dataset_dir: /home/aistudio/work/Q
data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd']
EvalDataset:
!COCODataSet
image_dir: images
anno_path: /val.json
dataset_dir: /home/aistudio/work/Q
TestDataset:
!ImageFolder
anno_path: /home/aistudio/work/Q/test.json
3.4其他配置的调整
- 预训练模型:
建议直接到PaddleDection的MODEL_ZOO文档中找相关的模型参数。预训练能大大缩短收敛
时间。本实验预训练模型参数为https://bj.bcebos.com/v1/paddledet/models/pretrained/ppyoloe_crn_l_obj365_pretrained.pdparams
- 学习率和衰减:
学习率按照默认的学习率除以8,即0.000125。衰减轮数milestones一般配置在max_iters的2/3和8/9处,尽量靠后。具体对应的配置文件为`work/PaddleDetection-release-
2.1/configs/cascade_rcnn/base/optimizer_1x.yml,修改
LearningRate:
base_lr: 0.00125`。
- [数据增强](https://paddlepedia.readthedocs.io/en/latest/tutorials/deep_learning/model_tuning/regularization/data_argumentation.html?
highlight=%E6%95%B0%E6%8D%AE%E5%A2%9E%E5%BC%BA):
这里使用的数据增强方式有RandomResize、RandomFlip、NormalizeImage。
4.模型训练
# 进入PaddleDetection目录
%cd /home/aistudio/PaddleDetection
# 安装pycocotools
!pip install pycocotools
# 训练脚本
!CUDA_VISIBLE_DEVICES=0
# 单卡训练
!python tools/train.py -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml --amp --eval --use_vdl True --vdl_log_dir vdl_log_dir/scalar
注意:
- 如果需要边训练边评估,请添加
--eval
. - PP-YOLOE支持混合精度训练,请添加
--amp
.
5.模型评估
# 评估
%cd /home/aistudio/PaddleDetection
!python tools/eval.py -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml -o weights=output/ppyoloe_plus_crn_l_80e_coco/best_model.pdparams
6.模型预测
# 预测
%cd /home/aistudio/PaddleDetection
!python tools/infer.py -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml -o weights=output/ppyoloe_plus_crn_l_80e_coco/best_model.pdparams --infer_dir=/home/aistudio/test --output_dir infer_output/
推理结果如下:
7.模型导出
PP-YOLOE 在GPU上部署或者速度测试需要通过tools/export_model.py导出模型。
%cd /home/aistudio/PaddleDetection
!python tools/export_model.py -c configs/ppyoloe/ppyoloe_plus_crn_l_80e_coco.yml -o weights=output/ppyoloe_plus_crn_l_80e_coco/best_model.pdparams
8.模型部署
# 选一张验证集图片测试部署效果
%cd /home/aistudio/PaddleDetection
!python deploy/python/infer.py --model_dir=/home/aistudio/PaddleDetection/output_inference/ppyoloe_plus_crn_l_80e_coco --image_file=/home/aistudio/184711746679919488.jpg --device=GPU --save_images=True --threshold=0.25 --slice_infer --slice_size 500 500 --overlap_ratio 0.25 0.25 --combine_method=nms --match_threshold=0.6 --match_metric=ios
推理结果如下
[外链图片转存中…(img-SQlXmeQE-1681485347248)]
9.总结
-
PP-YOLOE 是PaddleDetection团队自研的小目标检测特色模型,使用数据集分布相关的基于向量的DFL算法 和 针对小目标优化的中心先验优化策略,并且在模型的Neck(FPN)结构中加入Transformer模块,以及结合增加P2层、使用large size等策略,最终在多个小目标数据集上达到极高的精
-
不通过切图拼图而直接使用原图或子图去训练评估预测,推荐使用 PP-YOLOE-SOD 模型,更多细节和消融实验可参照COCO模型和VisDrone模型。
-
通过此次项目实践,我学到了很多以往没有掌握的知识技能,比如以往没有使用过COCO格式的数据集,在此次项目实践中,使用到了它,并将其掌握。
10.作者介绍
作者:飞飞 指导老师;刘建建
此文章为搬运
原项目链接
更多推荐
所有评论(0)