今天为大家带来的分析是有关于如何利用基于 PP-YOLOE-SOD 的小目标检测方案,实现无人机巡检快速准确地检测出小目标的应用案例~
在社会活动和社会生产中,巡检是一个必不可少的环节。然而,传统的人工巡检方式存在效率低下、成本高昂、安全风险大等问题,限制了巡检的效果和范围。无人机巡检因其高效、灵活、安全的特点被越来越多的企业采用。但是,如何在无人机巡检中快速准确地检测出小目标,成为了该技术的重要难点之一。本文将介绍一种基于 PP-YOLOE-SOD 的小目标检测方案, 并分享使用 PaddleSlim 模型压缩工具和 OpenVINO 在 Intel x86平台上部署加速 PP-YOLOE+ 系列模型。
- 项目链接
https://aistudio.baidu.com/aistudio/projectdetail/5036782
无人机视角目标物示意
场景难点
- 数据量和质量不足
在无人机巡检场景下,要获取大量的高质量数据是非常困难的。此外,场景的复杂性和多变性也给数据采集和标注带来了很大的挑战。
- 小目标检测难度大
无人机巡检场景中的小目标往往尺寸较小、形状复杂,容易被周围环境干扰而导致检测误差。
- 模型精度受量化误差的影响大
目标检测融合了目标定位和目标分类两种任务,任务复杂度高,精度受量化的影响更大。
- 部署效率较低
在实际应用中,模型的部署效率往往是一个重要的考虑因素,特别是在无人机巡检等场景中,需要实时检测并及时反馈结果,而浮点模型由于计算量较大,推理性能不佳。
方案设计
如上分析,无人机巡检场景下由于其视角较高、画面较大、目标物较小,故比较适合小目标检测算法。针对小目标检测难点,百度飞桨团队基于 PP-YOLOE+ 通用检测模型,从流程和算法上进行了改进,提出了一套小目标专属检测器 PP-YOLOE-SOD (Small Object Detection)。
- 点击文末阅读原文快速体验
https://github.com/PaddlePaddle/PaddleDetection
关于 PaddleDetection 的技术问题欢迎大家在 Github 提 issue,也欢迎大家点 Star 支持我们的工作!
PP-YOLOE-SOD 针对小目标有两种检测方案,分别是基于切图拼图流程优化的小目标检测方案以及基于原图模型算法优化的小目标检测方案。同时提供了数据集自动分析脚本,只需输入数据集标注文件,便可得到数据集统计结果,辅助判断数据集是否是小目标数据集以及是否需要采用切图策略,同时给出网络超参数参考值。综合考虑准确和时延,最终选择速度和精度较为平衡的基于原图的小目标检测方案。 如下图标红路径,整体算法时延以及算力要求更低。
小目标检测方案
性能调优
模型调优:
PP-YOLOE-SOD 基于原图的小目标检测方案相比 PP-YOLOE 模型,PP-YOLOE-SOD 改进点主要包括在neck中引入Transformer全局注意力机制以及在回归分支中使用基于向量的 DFL。
引入 Transformer 全局注意力机制
Transformer 在 CV 中的应用是目前研究较为火热的一个方向。最早的ViT直接将图像分为多个 Patch 并加入位置 Embedding 送入 Transformer Encoder 中,加上相应的分类或者检测头即可实现较好的效果。
ViT结构图
我们这里类似,主要加入了 Position Embedding 和 Encoder 两个模块,不同的是输入是最后一层特征图。
PP-YOLOE-SOD 的改进结构
基于向量的DFL回归算法
PP-YOLOE 将回归看作是一个分布预测任务,并在回归分支中使用 DFL 。解决边界框不确定性问题,让网络快速地聚焦到目标位置的邻近区域的分布中去。现有的 DFL 把回归范围划分成n等份,预测结果落在每个小位置的概率,对结果求期望作为最终回归的 box 坐标。在回归距离时,用 softmax 将网络输出转换为概率,计算在[0, ... , reg_max]上的概率和,表示在当前特征图上中心点到目标框四边距离,其最大值应为 reg_max,结果乘以步长就可以映射回输入图尺寸上。但是该方法将 reg_max 视为标量,针对目标分布不同的数据集采用的回归范围是固定的,这就导致无法兼顾大目标和小目标的检测精度。由于小目标的 box 框相对较小,会出现小目标框内没有检测到相应目标但是附近点可能满足需求的情况。
DFL示意
因此,如上图,我们将 DFL 回归范围向量化,引入回归负半轴,根据不同数据集调整回归上限,减少回归小目标时的噪声。同时用半径为 center_radius ,以 gt 框的中心点为中心的先验框来辅助回归小目标检测框,通过 gt 框与先验框的并集来匹配目标,当目标中心点在 box 框外部但在先验框内部时,则可以用先验框进行回归,提高了对小目标的预测效果。最终在数据集上的测试精度如下所示:
数据集上的测试精度
量化策略:
模型自动压缩工具
针对 PP-YOLOE-SOD 模型,本文使用了 PaddleSlim 的自动压缩工具 ACT(Auto Compression Toolkit) 。ACT中的量化技术包含离线量化和量化训练两种量化策略。在对 PP-YOLOE-SOD 模型进行量化的时候会对具体的量化策略进行自动选择。先运行离线量化,如果输出差异和原始模型差别较大,则转为使用量化训练对模型进行量化压缩。如果输出差异和原始模型差别不大,则使用离线量化超参搜索进行量化精度调优。具体量化细节和过程欢迎大家关注直播课。
ACT中的量化策略
推理部署
OpenVINO介绍
OpenVINO 作为 Intel 原生的深度学习推理框架,可以最大化地提升神经网络在 Intel 平台上的执行性能,实现一次编写,任意部署的开发体验。OpenVINO 在2022.1版本后,就可以直接支持飞桨模型,大大提升了模型在 Intel 硬件上的推理性能与部署便捷性,带来更高的生产效率,更广阔的兼容性以及推理性能的优化。
OpenVINO支持情况
OpenVINO加速飞桨量化模型
从 OpenVINO 2022.1发行版开始,OpenVINO 接口也可以直接读取加载飞桨模型到指定的硬件设备,省去了离线转换的过程,大大提升了飞桨开发者在 Intel 平台上部署的效率。最新版 OpenVINO 集成了对飞桨的量化模型的支持,可以成倍提高飞桨量化模型的推理性能。
OpenVINO加速飞桨量化模型
OpenVINO性能调优
OpenVINO 2022.1发行版中引入了全新的 PERFORMANCE_HINT 功能。用户只需指定推理任务需求即延迟优先还是吞吐优先, compile_model 便可以自动进行相应的硬件参数配置,达到相对较优的性能目标。
本项目的最终部署环境为 Intel x86硬件平台设备。考虑开发便捷性,本次示例使用 Python 部署开发环境。为了进一步提高模型的部署效率,我们采用了 OpenVINO 工具包对模型进行了部署。目前,OpenVINO 最新版已经原生支持PaddleSlim生成的量化模型。通过使用该功能,我们可以将 PP-YOLOE-SOD 量化模型转换为 OpenVINO 可用的IR格式。凭借 OpenVINO 对量化模型的高度融合和优化,可以将模型在 Intel 处理器上的推理速度提高3倍以上。在 AI Studio 中也提供了完整的使用示例与开发说明,可参考该教程快速学习,并针对实际项目进行开发和集成。
部署Demo方案